summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-12-05 09:51:10 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-12-05 09:51:10 +0000
commit06353b48b5df6eed9ece03c921dfe7c7575eeba1 (patch)
tree6c3d6c4c4aad6aa5bda6a832efa4105445a70f49 /llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
parent64b3baaaeab3c215026ea95870a22e2e7536f4bc (diff)
downloadbcm5719-llvm-06353b48b5df6eed9ece03c921dfe7c7575eeba1.tar.gz
bcm5719-llvm-06353b48b5df6eed9ece03c921dfe7c7575eeba1.zip
If a split live interval is spilled again, remove the kill marker on its last use.
llvm-svn: 44611
Diffstat (limited to 'llvm/lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
index b237247f7f1..b321b3fdf6b 100644
--- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -1165,6 +1165,7 @@ addIntervalsForSpills(const LiveInterval &li,
// it's also guaranteed to be a single val# / range interval.
if (vrm.getPreSplitReg(li.reg)) {
vrm.setIsSplitFromReg(li.reg, 0);
+ vrm.removeKillPoint(li.reg);
bool DefIsReMat = vrm.isReMaterialized(li.reg);
Slot = vrm.getStackSlot(li.reg);
assert(Slot != VirtRegMap::MAX_STACK_SLOT);
@@ -1398,8 +1399,10 @@ addIntervalsForSpills(const LiveInterval &li,
int UseIdx = LastUse->findRegisterUseOperandIdx(LI->reg);
assert(UseIdx != -1);
if (LastUse->getInstrDescriptor()->
- getOperandConstraint(UseIdx, TOI::TIED_TO) == -1)
+ getOperandConstraint(UseIdx, TOI::TIED_TO) == -1) {
LastUse->getOperand(UseIdx).setIsKill();
+ vrm.addKillPoint(LI->reg, &LastUse->getOperand(UseIdx));
+ }
}
RetNewLIs.push_back(LI);
}
OpenPOWER on IntegriCloud