From a57c57067d158cf48d22ab3fd77c87ede1d7b978 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Mon, 18 Aug 2008 23:41:04 +0000 Subject: [PATCH] Fix a few more bugs: 1) Assign stack slots to new temporaries. 2) Don't insert an interval into the return vector more than once. llvm-svn: 54956 --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index ae090f58ec6d..53d74fc22458 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -1608,7 +1608,7 @@ std::vector LiveIntervals:: addIntervalsForSpillsFast(const LiveInterval &li, const MachineLoopInfo *loopInfo, VirtRegMap &vrm, float& SSWeight) { - vrm.assignVirt2StackSlot(li.reg); + unsigned slot = vrm.assignVirt2StackSlot(li.reg); std::vector added; @@ -1631,9 +1631,13 @@ addIntervalsForSpillsFast(const LiveInterval &li, // Create a new virtual register for the spill interval. MachineOperand& MO = RI.getOperand(); unsigned NewVReg = 0; + bool newInt = false; if (!VRegMap.count(MO.getParent())) { VRegMap[MO.getParent()] = NewVReg = mri_->createVirtualRegister(rc); vrm.grow(); + vrm.assignVirt2StackSlot(NewVReg, slot); + + newInt = true; } else NewVReg = VRegMap[MO.getParent()]; @@ -1666,8 +1670,9 @@ addIntervalsForSpillsFast(const LiveInterval &li, DOUT << " +" << LR; nI.addRange(LR); } - - added.push_back(&nI); + + if (newInt) + added.push_back(&nI); DOUT << "\t\t\t\tadded new interval: "; DEBUG(nI.dump());