diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-02-17 16:40:44 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-02-17 16:40:44 +0000 |
commit | 0f7de3542f792da8abced2ad1809b2dfa8a4daff (patch) | |
tree | 20c29b614426e17fc46114e24696f6c5e0665d0b /lib/CodeGen/MachineLICM.cpp | |
parent | 406262a69ff0ff00558781e8e87a84336f425bd5 (diff) | |
download | llvm-0f7de3542f792da8abced2ad1809b2dfa8a4daff.tar.gz llvm-0f7de3542f792da8abced2ad1809b2dfa8a4daff.tar.bz2 llvm-0f7de3542f792da8abced2ad1809b2dfa8a4daff.tar.xz |
Revert r150288, "Allow Post-RA LICM to hoist reserved register reads."
This caused miscompilations on out-of-tree targets, and possibly i386 as
well.
I'll find some other way of hoisting %rip-relative loads from loops
containing calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150816 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineLICM.cpp')
-rw-r--r-- | lib/CodeGen/MachineLICM.cpp | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/lib/CodeGen/MachineLICM.cpp b/lib/CodeGen/MachineLICM.cpp index 47eb685db3..fda60563ed 100644 --- a/lib/CodeGen/MachineLICM.cpp +++ b/lib/CodeGen/MachineLICM.cpp @@ -68,7 +68,6 @@ namespace { MachineRegisterInfo *MRI; const InstrItineraryData *InstrItins; bool PreRegAlloc; - BitVector ReservedRegs; // Various analyses that we use... AliasAnalysis *AA; // Alias analysis info. @@ -338,8 +337,6 @@ bool MachineLICM::runOnMachineFunction(MachineFunction &MF) { for (TargetRegisterInfo::regclass_iterator I = TRI->regclass_begin(), E = TRI->regclass_end(); I != E; ++I) RegLimit[(*I)->getID()] = TRI->getRegPressureLimit(*I, MF); - } else { - ReservedRegs = TRI->getReservedRegs(MF); } // Get our Loop information... @@ -429,9 +426,6 @@ void MachineLICM::ProcessMI(MachineInstr *MI, "Not expecting virtual register!"); if (!MO.isDef()) { - // Allow reserved register reads to be hoisted. - if (ReservedRegs.test(Reg)) - continue; if (Reg && (PhysRegDefs.test(Reg) || PhysRegClobbers.test(Reg))) // If it's using a non-loop-invariant register, then it's obviously not // safe to hoist. @@ -537,11 +531,6 @@ void MachineLICM::HoistRegionPostRA() { const MachineOperand &MO = MI->getOperand(j); if (!MO.isReg() || MO.isDef() || !MO.getReg()) continue; - // Allow hoisting of reserved register reads that aren't call preserved. - // For example %rip. - // IsLoopInvariantInst() already checks MRI->isConstantPhysReg(). - if (ReservedRegs.test(MO.getReg())) - continue; if (PhysRegDefs.test(MO.getReg()) || PhysRegClobbers.test(MO.getReg())) { // If it's using a non-loop-invariant register, then it's obviously |