aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveIntervalAnalysis.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-06-27 18:47:28 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-06-27 18:47:28 +0000
commit292da949f6c87d6499425d64d37d7c5870ec57ad (patch)
tree68eec077c9120c29ae0460d850ab7b0c82c6dc48 /lib/CodeGen/LiveIntervalAnalysis.cpp
parente47c333a12094296e54571ed1ac511a04d74840d (diff)
If a livein is not used in the block. It's live through.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37764 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r--lib/CodeGen/LiveIntervalAnalysis.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index ebab85fb48..369493ff94 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -625,13 +625,15 @@ void LiveIntervals::handleLiveInRegister(MachineBasicBlock *MBB,
exit:
// Live-in register might not be used at all.
if (end == MIIdx) {
- DOUT << " dead";
- if (isAlias)
+ if (isAlias) {
+ DOUT << " dead";
end = getDefIndex(MIIdx) + 1;
+ } else {
+ DOUT << " live through";
+ end = baseIndex;
+ }
}
- assert(start < end && "did not find end of interval?");
-
LiveRange LR(start, end, interval.getNextValue(~0U, 0));
DOUT << " +" << LR << '\n';
interval.addRange(LR);
@@ -662,7 +664,8 @@ void LiveIntervals::computeIntervals() {
// Multiple live-ins can alias the same register.
for (const unsigned* AS = mri_->getSubRegisters(*LI); *AS; ++AS)
if (!hasInterval(*AS))
- handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS), true);
+ handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS),
+ true);
}
}