diff options
author | Manman Ren <mren@apple.com> | 2012-08-02 00:56:42 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2012-08-02 00:56:42 +0000 |
commit | d7d003c2b7b7f657eed364e4ac06f4ab32fc8c2d (patch) | |
tree | a135e2b9b794ea8b4b12c05e4a2a768d32577f59 /lib/Target/X86/X86InstrInfo.h | |
parent | e5c79a5c2542fa0d852df28b5ee9de8dfef694d8 (diff) | |
download | llvm-d7d003c2b7b7f657eed364e4ac06f4ab32fc8c2d.tar.gz llvm-d7d003c2b7b7f657eed364e4ac06f4ab32fc8c2d.tar.bz2 llvm-d7d003c2b7b7f657eed364e4ac06f4ab32fc8c2d.tar.xz |
X86 Peephole: fold loads to the source register operand if possible.
Machine CSE and other optimizations can remove instructions so folding
is possible at peephole while not possible at ISel.
This patch is a rework of r160919 and was tested on clang self-host on my local
machine.
rdar://10554090 and rdar://11873276
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161152 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86InstrInfo.h')
-rw-r--r-- | lib/Target/X86/X86InstrInfo.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrInfo.h b/lib/Target/X86/X86InstrInfo.h index ec9b2e619d..9ed5210b22 100644 --- a/lib/Target/X86/X86InstrInfo.h +++ b/lib/Target/X86/X86InstrInfo.h @@ -387,6 +387,14 @@ public: unsigned SrcReg2, int CmpMask, int CmpValue, const MachineRegisterInfo *MRI) const; + /// optimizeLoadInstr - Try to remove the load by folding it to a register + /// operand at the use. We fold the load instructions if and only if the + /// def and use are in the same BB. + virtual MachineInstr* optimizeLoadInstr(MachineInstr *MI, + const MachineRegisterInfo *MRI, + unsigned &FoldAsLoadDefReg, + MachineInstr *&DefMI) const; + private: MachineInstr * convertToThreeAddressWithLEA(unsigned MIOpc, MachineFunction::iterator &MFI, |