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