Live intervals for live-in registers should begin at the beginning of a basic block, not at the first

instruction.  Also, their valno's should have an unknown def.  This has no effect currently, but was
causing issues when StrongPHIElimination was enabled.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56231 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2008-09-15 22:00:38 +00:00
parent ad7321f58a
commit 99500aeb7c

View File

@ -624,7 +624,11 @@ void LiveIntervals::handleLiveInRegister(MachineBasicBlock *MBB,
MachineBasicBlock::iterator mi = MBB->begin();
unsigned baseIndex = MIIdx;
unsigned start = baseIndex;
unsigned end = start;
while (baseIndex / InstrSlots::NUM < i2miMap_.size() &&
getInstructionFromIndex(baseIndex) == 0)
baseIndex += InstrSlots::NUM;
unsigned end = baseIndex;
while (mi != MBB->end()) {
if (mi->killsRegister(interval.reg, tri_)) {
DOUT << " killed";
@ -659,7 +663,7 @@ exit:
}
}
LiveRange LR(start, end, interval.getNextValue(start, 0, VNInfoAllocator));
LiveRange LR(start, end, interval.getNextValue(~0U, 0, VNInfoAllocator));
interval.addRange(LR);
interval.addKill(LR.valno, end);
DOUT << " +" << LR << '\n';
@ -676,11 +680,6 @@ void LiveIntervals::computeIntervals() {
// Track the index of the current machine instr.
unsigned MIIndex = 0;
// Skip over empty initial indices.
while (MIIndex / InstrSlots::NUM < i2miMap_.size() &&
getInstructionFromIndex(MIIndex) == 0)
MIIndex += InstrSlots::NUM;
for (MachineFunction::iterator MBBI = mf_->begin(), E = mf_->end();
MBBI != E; ++MBBI) {
MachineBasicBlock *MBB = MBBI;
@ -699,6 +698,11 @@ void LiveIntervals::computeIntervals() {
true);
}
// Skip over empty initial indices.
while (MIIndex / InstrSlots::NUM < i2miMap_.size() &&
getInstructionFromIndex(MIIndex) == 0)
MIIndex += InstrSlots::NUM;
for (; MI != miEnd; ++MI) {
DOUT << MIIndex << "\t" << *MI;