diff options
author | Dale Johannesen <dalej@apple.com> | 2010-02-16 00:43:58 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2010-02-16 00:43:58 +0000 |
commit | ae87fc43a7ddba71475c5b13722004e19d2c46c0 (patch) | |
tree | 824605806ad34360439eb23631f6926013eafd9f | |
parent | 1b78ea446fb0d0653972df1f6310aca5895cd56f (diff) | |
download | bcm5719-llvm-ae87fc43a7ddba71475c5b13722004e19d2c46c0.tar.gz bcm5719-llvm-ae87fc43a7ddba71475c5b13722004e19d2c46c0.zip |
Something broke. Hard to believe it was this patch
but it's harder to believe it's the other candidate,
so reverting. Temporarily I hope.
llvm-svn: 96303
-rw-r--r-- | llvm/lib/CodeGen/RegAllocLocal.cpp | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/llvm/lib/CodeGen/RegAllocLocal.cpp b/llvm/lib/CodeGen/RegAllocLocal.cpp index 04303cff5bf..c25c24a67cb 100644 --- a/llvm/lib/CodeGen/RegAllocLocal.cpp +++ b/llvm/lib/CodeGen/RegAllocLocal.cpp @@ -490,12 +490,10 @@ MachineInstr *RALocal::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI, // If the virtual register is already available, just update the instruction // and return. if (unsigned PR = getVirt2PhysRegMapSlot(VirtReg)) { + MarkPhysRegRecentlyUsed(PR); // Already have this value available! MI->getOperand(OpNum).setReg(PR); // Assign the input register - if (!MI->isDebugValue()) { - // Do not do these for DBG_VALUE as they can affect codegen. - MarkPhysRegRecentlyUsed(PR); // Already have this value available! + if (!MI->isDebugValue()) getVirtRegLastUse(VirtReg) = std::make_pair(MI, OpNum); - } return MI; } @@ -696,13 +694,7 @@ void RALocal::ComputeLocalLiveness(MachineBasicBlock& MBB) { bool usedOutsideBlock = isPhysReg ? false : UsedInMultipleBlocks.test(MO.getReg() - TargetRegisterInfo::FirstVirtualRegister); - if (!isPhysReg && !usedOutsideBlock) { - // DBG_VALUE complicates this: if the only refs of a register outside - // this block are DBG_VALUE, we can't keep the reg live just for that, - // as it will cause the reg to be spilled at the end of this block when - // it wouldn't have been otherwise. Nullify the DBG_VALUEs when that - // happens. - bool UsedByDebugValueOnly = false; + if (!isPhysReg && !usedOutsideBlock) for (MachineRegisterInfo::reg_iterator UI = MRI.reg_begin(MO.getReg()), UE = MRI.reg_end(); UI != UE; ++UI) // Two cases: @@ -710,26 +702,12 @@ void RALocal::ComputeLocalLiveness(MachineBasicBlock& MBB) { // - used in the same block before it is defined (loop) if (UI->getParent() != &MBB || (MO.isDef() && UI.getOperand().isUse() && precedes(&*UI, MI))) { - if (UI->isDebugValue()) { - UsedByDebugValueOnly = true; - continue; - } - // A non-DBG_VALUE use means we can leave DBG_VALUE uses alone. UsedInMultipleBlocks.set(MO.getReg() - TargetRegisterInfo::FirstVirtualRegister); usedOutsideBlock = true; - UsedByDebugValueOnly = false; break; } - if (UsedByDebugValueOnly) - for (MachineRegisterInfo::reg_iterator UI = MRI.reg_begin(MO.getReg()), - UE = MRI.reg_end(); UI != UE; ++UI) - if (UI->isDebugValue() && - (UI->getParent() != &MBB || - (MO.isDef() && precedes(&*UI, MI)))) - UI.getOperand().setReg(0U); - } - + // Physical registers and those that are not live-out of the block // are killed/dead at their last use/def within this block. if (isPhysReg || !usedOutsideBlock) { |