diff options
author | Manman Ren <mren@apple.com> | 2012-07-28 16:48:01 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2012-07-28 16:48:01 +0000 |
commit | 0eb3edea9cb6819334173a7d288da85943201fe5 (patch) | |
tree | 77172a23d7618e5dbe447fc4b7536ba1a416deaf /lib/Target/X86/X86InstrInfo.h | |
parent | cdfbcdeeede52de472ae8187c0fb4ed4a014c2a3 (diff) | |
download | llvm-0eb3edea9cb6819334173a7d288da85943201fe5.tar.gz llvm-0eb3edea9cb6819334173a7d288da85943201fe5.tar.bz2 llvm-0eb3edea9cb6819334173a7d288da85943201fe5.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.
rdar://10554090 and rdar://11873276
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160919 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..9205315653 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, + SmallSet<unsigned, 4> &FoldAsLoadDefRegs, + MachineInstr *&DefMI) const; + private: MachineInstr * convertToThreeAddressWithLEA(unsigned MIOpc, MachineFunction::iterator &MFI, |