Author: evancheng Date: Wed Aug 8 02:03:29 2007 New Revision: 40925 URL: http://llvm.org/viewvc/llvm-project?rev=40925&view=rev Log: Adding kill info to val#.
Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=40925&r1=40924&r2=40925&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Wed Aug 8 02:03:29 2007 @@ -166,8 +166,23 @@ /// addKillForValNum - Add a kill instruction index to the specified value /// number. void addKillForValNum(unsigned ValNo, unsigned KillIdx) { + assert(ValNo < ValueNumberInfo.size()); ValueNumberInfo[ValNo].kills.push_back(KillIdx); } + + /// replaceKillForValNum - Replace a kill index of the specified value with + /// a new kill index. + bool replaceKillForValNum(unsigned ValNo, unsigned OldKill, + unsigned NewKill) { + SmallVector<unsigned, 4> kills = ValueNumberInfo[ValNo].kills; + SmallVector<unsigned, 4>::iterator I = + std::find(kills.begin(), kills.end(), OldKill); + if (I == kills.end()) + return false; + kills.erase(I); + kills.push_back(NewKill); + return true; + } VNInfo getValNumInfo(unsigned ValNo) const { assert(ValNo < ValueNumberInfo.size()); Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=40925&r1=40924&r2=40925&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Wed Aug 8 02:03:29 2007 @@ -457,6 +457,7 @@ LiveRange LR(DefIndex, RedefIndex, ValNo); DOUT << " replace range with " << LR; interval.addRange(LR); + interval.addKillForValNum(ValNo, RedefIndex); // If this redefinition is dead, we need to add a dummy unit live // range covering the def slot. @@ -481,6 +482,8 @@ DOUT << " Removing [" << Start << "," << End << "] from: "; interval.print(DOUT, mri_); DOUT << "\n"; interval.removeRange(Start, End); + bool replaced = interval.replaceKillForValNum(0, End, Start); + assert(replaced && "Incorrect kill info?"); DOUT << " RESULT: "; interval.print(DOUT, mri_); // Replace the interval with one of a NEW value number. Note that this @@ -488,6 +491,7 @@ LiveRange LR(Start, End, interval.getNextValue(~0, 0)); DOUT << " replace range with " << LR; interval.addRange(LR); + interval.addKillForValNum(LR.ValId, End); DOUT << " RESULT: "; interval.print(DOUT, mri_); } @@ -503,9 +507,10 @@ else ValNum = interval.getNextValue(defIndex, SrcReg); - LiveRange LR(defIndex, - getInstructionIndex(&mbb->back()) + InstrSlots::NUM, ValNum); + unsigned killIndex = getInstructionIndex(&mbb->back()) + InstrSlots::NUM; + LiveRange LR(defIndex, killIndex, ValNum); interval.addRange(LR); + interval.addKillForValNum(ValNum, killIndex); DOUT << " +" << LR; } } @@ -570,6 +575,7 @@ ? OldLR->ValId : interval.getNextValue(start, SrcReg); LiveRange LR(start, end, Id); interval.addRange(LR); + interval.addKillForValNum(LR.ValId, end); DOUT << " +" << LR << '\n'; } @@ -635,8 +641,9 @@ } LiveRange LR(start, end, interval.getNextValue(start, 0)); - DOUT << " +" << LR << '\n'; interval.addRange(LR); + interval.addKillForValNum(LR.ValId, end); + DOUT << " +" << LR << '\n'; } /// computeIntervals - computes the live intervals for virtual _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits