mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
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:
parent
ad7321f58a
commit
99500aeb7c
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user