diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-02 00:06:15 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-02 00:06:15 +0000 |
commit | 9763e2bf39b84f18bd464b0cda61fe1cd98dcaae (patch) | |
tree | 5dc7d40b83ab0a2124e236fb408b680447f81bdc /lib/CodeGen/LiveInterval.cpp | |
parent | edb87555e466e781087e18936f427816c952f3e7 (diff) | |
download | external_llvm-9763e2bf39b84f18bd464b0cda61fe1cd98dcaae.zip external_llvm-9763e2bf39b84f18bd464b0cda61fe1cd98dcaae.tar.gz external_llvm-9763e2bf39b84f18bd464b0cda61fe1cd98dcaae.tar.bz2 |
Move LiveIntervalMap::extendTo into LiveInterval itself.
This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and
now it can use extendIntervalEndTo() which coalesces ranges.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126803 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveInterval.cpp')
-rw-r--r-- | lib/CodeGen/LiveInterval.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp index c2dbd6a..a37296f 100644 --- a/lib/CodeGen/LiveInterval.cpp +++ b/lib/CodeGen/LiveInterval.cpp @@ -291,6 +291,22 @@ LiveInterval::addRangeFrom(LiveRange LR, iterator From) { return ranges.insert(it, LR); } +/// extendInBlock - If this interval is live before UseIdx in the basic +/// block that starts at StartIdx, extend it to be live at UseIdx and return +/// the value. If there is no live range before UseIdx, return NULL. +VNInfo *LiveInterval::extendInBlock(SlotIndex StartIdx, SlotIndex UseIdx) { + if (empty()) + return 0; + iterator I = std::upper_bound(begin(), end(), UseIdx); + if (I == begin()) + return 0; + --I; + if (I->end <= StartIdx) + return 0; + if (I->end <= UseIdx) + extendIntervalEndTo(I, UseIdx.getNextSlot()); + return I->valno; +} /// removeRange - Remove the specified range from this interval. Note that /// the range must be in a single LiveRange in its entirety. |