enable sinking and licm of loads from the argument area. I'd like to enable this
authorChris Lattner <sabre@nondot.org>
Sat, 5 Jan 2008 06:10:42 +0000 (06:10 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 5 Jan 2008 06:10:42 +0000 (06:10 +0000)
for remat, but can't due to an RA bug.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45623 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.cpp

index 38188369145cccd8fed8cb9defa8ce8f97008a27..ede88f28ffefab497040df469bbff89f958e9e86 100644 (file)
@@ -141,6 +141,18 @@ bool X86InstrInfo::isReallyTriviallyReMaterializable(MachineInstr *MI) const {
         MI->getOperand(2).getImm() == 1 &&
         MI->getOperand(3).getReg() == 0)
       return true;
+      
+    // If this is a load from a fixed argument slot, we know the value is
+    // invariant across the whole function, because we don't redefine argument
+    // values.
+#if 0
+    // FIXME: This is disabled due to a remat bug. rdar://5671644
+    MachineFunction *MF = MI->getParent()->getParent();
+    if (MI->getOperand(1).isFI() && 
+        MF->getFrameInfo()->isFixedObjectIndex(MI->getOperand(1).getIndex()))
+      return true;
+#endif
+      
     return false;
   }
   // All other instructions marked M_REMATERIALIZABLE are always trivially
@@ -188,6 +200,15 @@ bool X86InstrInfo::isReallySideEffectFree(MachineInstr *MI) const {
         MI->getOperand(2).getImm() == 1 &&
         MI->getOperand(3).getReg() == 0)
       return true;
+      
+    // If this is a load from a fixed argument slot, we know the value is
+    // invariant across the whole function, because we don't redefine argument
+    // values.
+    MachineFunction *MF = MI->getParent()->getParent();
+    if (MI->getOperand(1).isFI() && 
+        MF->getFrameInfo()->isFixedObjectIndex(MI->getOperand(1).getIndex()))
+      return true;
+      
     return false;
   }