Author: void
Date: Wed Jan  2 15:10:40 2008
New Revision: 45498

URL: http://llvm.org/viewvc/llvm-project?rev=45498&view=rev
Log:
Machine LICM will check that operands are defined outside of the loop. Also
check that register isn't 0 before going further.

Modified:
    llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
    llvm/trunk/lib/Target/X86/X86InstrInfo.h

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=45498&r1=45497&r2=45498&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Wed Jan  2 15:10:40 2008
@@ -144,37 +144,6 @@
   return true;
 }
 
-/// isDefinedInEntryBlock - Goes through the entry block to see if the given
-/// virtual register is indeed defined in the entry block.
-/// 
-bool X86InstrInfo::isDefinedInEntryBlock(const MachineBasicBlock &Entry,
-                                         unsigned VReg) const {
-  assert(MRegisterInfo::isVirtualRegister(VReg) &&
-         "Map only holds virtual registers!");
-  MachineInstrMap.grow(VReg);
-  if (MachineInstrMap[VReg]) return true;
-
-  MachineBasicBlock::const_iterator I = Entry.begin(), E = Entry.end();
-
-  for (; I != E; ++I) {
-    const MachineInstr &MI = *I;
-    unsigned NumOps = MI.getNumOperands();
-
-    for (unsigned i = 0; i < NumOps; ++i) {
-      const MachineOperand &MO = MI.getOperand(i);
-
-      if(MO.isRegister() && MO.isDef() &&
-         MRegisterInfo::isVirtualRegister(MO.getReg()) &&
-         MO.getReg() == VReg) {
-        MachineInstrMap[VReg] = &MI;
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
 /// isReallySideEffectFree - If the M_MAY_HAVE_SIDE_EFFECTS flag is set, this
 /// method is called to determine if the specific instance of this instruction
 /// has side effects. This is useful in cases of instructions, like loads, 
which
@@ -189,8 +158,7 @@
 
       // Loads from global addresses which aren't redefined in the function are
       // side effect free.
-      if (MRegisterInfo::isVirtualRegister(Reg) &&
-          isDefinedInEntryBlock(MI->getParent()->getParent()->front(), Reg) &&
+      if (Reg != 0 && MRegisterInfo::isVirtualRegister(Reg) &&
           MI->getOperand(2).isImmediate() &&
           MI->getOperand(3).isRegister() &&
           MI->getOperand(4).isGlobalAddress() &&

Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=45498&r1=45497&r2=45498&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Wed Jan  2 15:10:40 2008
@@ -225,13 +225,6 @@
 class X86InstrInfo : public TargetInstrInfoImpl {
   X86TargetMachine &TM;
   const X86RegisterInfo RI;
-  mutable IndexedMap<const MachineInstr*, VirtReg2IndexFunctor> 
MachineInstrMap;
-
-  /// isDefinedInEntryBlock - Goes through the entry block to see if the given
-  /// virtual register is indeed defined in the entry block.
-  /// 
-  bool isDefinedInEntryBlock(const MachineBasicBlock &Entry,
-                             unsigned VReg) const;
 public:
   X86InstrInfo(X86TargetMachine &tm);
 


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to