verify that the frame index is immutable before remat'ing (still disabled)
authorChris Lattner <sabre@nondot.org>
Thu, 10 Jan 2008 04:16:31 +0000 (04:16 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 10 Jan 2008 04:16:31 +0000 (04:16 +0000)
or being side-effect free.

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

lib/Target/X86/X86InstrInfo.cpp

index c7313288605cd82cde3f598e0b3c5d215deec6f7..26ab7d2d0a484ddb3816633158bc80f5d5ac7133 100644 (file)
@@ -749,10 +749,11 @@ bool X86InstrInfo::isReallyTriviallyReMaterializable(MachineInstr *MI) const {
     // 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;
+    if (MI->getOperand(1).isFI()) {
+      const MachineFrameInfo &MFI=*MI->getParent()->getParent()->getFrameInfo();
+      int Idx = MI->getOperand(1).getIndex();
+      return MFI.isFixedObjectIndex(Idx) && MFI.isImmutableObjectIndex(Idx);
+    }
 #endif
       
     return false;
@@ -805,9 +806,11 @@ bool X86InstrInfo::isReallySideEffectFree(MachineInstr *MI) const {
     // 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;
+    if (MI->getOperand(1).isFI()) {
+      const MachineFrameInfo &MFI = *MF->getFrameInfo();
+      int Idx = MI->getOperand(1).getIndex();
+      return MFI.isFixedObjectIndex(Idx) && MFI.isImmutableObjectIndex(Idx);
+    }
       
     return false;
   }