Evan, On Wed, 2007-08-08 at 03:00 +0000, Evan Cheng wrote: > Author: evancheng > Date: Tue Aug 7 22:00:28 2007 > New Revision: 40916 > > URL: http://llvm.org/viewvc/llvm-project?rev=40916&view=rev > Log: > - Each val# can have multiple kills. > - Fix some minor bugs related to special markers on val# def. ~0U means > undefined, ~1U means dead val#. > > Modified: > llvm/trunk/include/llvm/CodeGen/LiveInterval.h > llvm/trunk/lib/CodeGen/LiveInterval.cpp > llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp > llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp > > Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=40916&r1=40915&r2=40916&view=diff > > ============================================================================== > --- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original) > +++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Tue Aug 7 22:00:28 2007 > @@ -87,17 +87,14 @@ > Ranges ranges; // the ranges in which this register is live > > /// ValueNumberInfo - If the value number definition is undefined (e.g. > phi > - /// merge point), it contains ~0,x,x. If the value number is not in use, > it > - /// contains ~1,x,x to indicate that the value # is not used. The first > - /// entry is the instruction # of the definition, the second is the kill > #. > - /// If the third value is non-zero, then the val# is defined by a copy > and > - /// it represents the register number it is copied from. > + /// merge point), it contains ~0u,x. If the value number is not in use, > it > + /// contains ~1u,x to indicate that the value # is not used. > struct VNInfo { > - unsigned def; > - unsigned kill; > - unsigned reg; > - VNInfo() : def(~1U), kill(~0U), reg(0) {}; > - VNInfo(unsigned d, unsigned k, unsigned r) : def(d), kill(k), reg(r) > {}; > + unsigned def; // instruction # of the definition > + unsigned reg; // src reg: non-zero iff val# is defined by a copy > + SmallVector<unsigned, 4> kills; // instruction #s of the kills
Why loose the doxygen on these? The /// lines you removed were previously included in the doxygen documentation, now they won't be. Please use ///< to indicate a doxygen comment that applies to the preceding field. You can do this for function parameters too. Thanks, Reid. > + VNInfo() : def(~1U), reg(0) {}; > + VNInfo(unsigned d, unsigned r) : def(d), reg(r) {}; > }; > private: > SmallVector<VNInfo, 4> ValueNumberInfo; > @@ -143,7 +140,7 @@ > /// getNextValue - Create a new value number and return it. MIIdx > specifies > /// the instruction that defines the value number. > unsigned getNextValue(unsigned MIIdx, unsigned SrcReg) { > - ValueNumberInfo.push_back(VNInfo(MIIdx, ~0U, SrcReg)); > + ValueNumberInfo.push_back(VNInfo(MIIdx, SrcReg)); > return ValueNumberInfo.size()-1; > } > > @@ -154,16 +151,22 @@ > return ValueNumberInfo[ValNo].def; > } > > - /// getKillForValNum - Return the machine instruction index that kills > the > - /// specified value number. > - unsigned getKillForValNum(unsigned ValNo) const { > + unsigned getSrcRegForValNum(unsigned ValNo) const { > //assert(ValNo < ValueNumberInfo.size()); > - return ValueNumberInfo[ValNo].kill; > + return ValueNumberInfo[ValNo].reg; > } > > - unsigned getSrcRegForValNum(unsigned ValNo) const { > + /// getKillsForValNum - Return the kill instruction indexes of the > specified > + /// value number. > + SmallVector<unsigned, 4> getKillsForValNum(unsigned ValNo) const { > //assert(ValNo < ValueNumberInfo.size()); > - return ValueNumberInfo[ValNo].reg; > + return ValueNumberInfo[ValNo].kills; > + } > + > + /// addKillForValNum - Add a kill instruction index to the specified > value > + /// number. > + void addKillForValNum(unsigned ValNo, unsigned KillIdx) { > + ValueNumberInfo[ValNo].kills.push_back(KillIdx); > } > > VNInfo getValNumInfo(unsigned ValNo) const { > @@ -176,7 +179,7 @@ > void setValueNumberInfo(unsigned ValNo, const VNInfo &I) { > ValueNumberInfo[ValNo] = I; > } > - > + > /// MergeValueNumberInto - This method is called when two value nubmers > /// are found to be equivalent. This eliminates V1, replacing all > /// LiveRanges with the V1 value number with the V2 value number. This > can > > Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=40916&r1=40915&r2=40916&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) > +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Aug 7 22:00:28 2007 > @@ -300,7 +300,7 @@ > // we want to avoid the interval scan if not. > bool MustMapCurValNos = false; > for (unsigned i = 0, e = getNumValNums(); i != e; ++i) { > - if (ValueNumberInfo[i].def == ~1U) continue; // tombstone value # > + //if (ValueNumberInfo[i].def == ~1U) continue; // tombstone value # > if (i != (unsigned)LHSValNoAssignments[i]) { > MustMapCurValNos = true; > break; > @@ -508,14 +508,11 @@ > OS << i << "@"; > if (ValueNumberInfo[i].def == ~0U) { > OS << "?"; > + } else if (ValueNumberInfo[i].def == ~1U) { > + OS << "x"; > } else { > OS << ValueNumberInfo[i].def; > } > - if (ValueNumberInfo[i].kill == ~0U) { > - OS << ",?"; > - } else { > - OS << "," << ValueNumberInfo[i].kill; > - } > } > } > } > > Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=40916&r1=40915&r2=40916&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) > +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue Aug 7 22:00:28 2007 > @@ -347,7 +347,6 @@ > > // Get the Idx of the defining instructions. > unsigned defIndex = getDefIndex(MIIdx); > - > unsigned ValNum; > unsigned SrcReg, DstReg; > if (!tii_->isMoveInstr(*mi, SrcReg, DstReg)) > @@ -378,6 +377,7 @@ > LiveRange LR(defIndex, killIdx, ValNum); > interval.addRange(LR); > DOUT << " +" << LR << "\n"; > + interval.addKillForValNum(ValNum, killIdx); > return; > } > } > @@ -412,10 +412,11 @@ > // block to the 'use' slot of the killing instruction. > for (unsigned i = 0, e = vi.Kills.size(); i != e; ++i) { > MachineInstr *Kill = vi.Kills[i]; > + unsigned killIdx = getUseIndex(getInstructionIndex(Kill))+1; > LiveRange LR(getMBBStartIdx(Kill->getParent()), > - getUseIndex(getInstructionIndex(Kill))+1, > - ValNum); > + killIdx, ValNum); > interval.addRange(LR); > + interval.addKillForValNum(ValNum, killIdx); > DOUT << " +" << LR; > } > > @@ -450,7 +451,7 @@ > interval.setValueNumberInfo(1, interval.getValNumInfo(0)); > > // Value#0 is now defined by the 2-addr instruction. > - interval.setValueNumberInfo(0, LiveInterval::VNInfo(DefIndex, ~0U, > 0U)); > + interval.setValueNumberInfo(0, LiveInterval::VNInfo(DefIndex, 0U)); > > // Add the new live interval which replaces the range for the input > copy. > LiveRange LR(DefIndex, RedefIndex, ValNo); > > Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=40916&r1=40915&r2=40916&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original) > +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Tue Aug 7 22:00:28 > 2007 > @@ -132,7 +132,7 @@ > // We are about to delete CopyMI, so need to remove it as the 'instruction > // that defines this value #'. Update the the valnum with the new defining > // instruction #. > - IntB.setValueNumberInfo(BValNo, LiveInterval::VNInfo(FillerStart, ~0U, 0)); > + IntB.setValueNumberInfo(BValNo, LiveInterval::VNInfo(FillerStart, 0)); > > // Okay, we can merge them. We need to insert a new liverange: > // [ValLR.end, BLR.begin) of either value number, then we merge the > @@ -645,7 +645,7 @@ > // Otherwise, use the specified value #. > LHSValNoAssignments[VN] = RHSValID; > if (VN != (unsigned)RHSValID) > - ValueNumberInfo[VN].def = ~1U; > + ValueNumberInfo[VN].def = RHSValNoInfo.def; > else > ValueNumberInfo[VN] = RHSValNoInfo; > } > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits