summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2008-09-15 22:00:38 +0000
committerOwen Anderson <resistor@mac.com>2008-09-15 22:00:38 +0000
commit82ab1e72808a652f32d91592b1654f61fe2dea18 (patch)
treedc2da4b08eb34b906744b2efbe4251be8964a659 /llvm/lib/CodeGen
parent68e7735a3890294c9538ed843169ac5da7db33ba (diff)
downloadbcm5719-llvm-82ab1e72808a652f32d91592b1654f61fe2dea18.tar.gz
bcm5719-llvm-82ab1e72808a652f32d91592b1654f61fe2dea18.zip
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. llvm-svn: 56231
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
index 41804db13dc..577400c674b 100644
--- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -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;
OpenPOWER on IntegriCloud