diff options
author | Andrew Trick <atrick@apple.com> | 2013-08-30 04:31:01 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-08-30 04:31:01 +0000 |
commit | 1362dcb5899bc88f0e567dd10e2e9003a79ace21 (patch) | |
tree | f448d4843eff1df0705397bc111802aed49cc2b3 | |
parent | da6fc15f0fb26ebbe42ab96e0d066bbd5bdbb72e (diff) | |
download | llvm-1362dcb5899bc88f0e567dd10e2e9003a79ace21.tar.gz llvm-1362dcb5899bc88f0e567dd10e2e9003a79ace21.tar.bz2 llvm-1362dcb5899bc88f0e567dd10e2e9003a79ace21.tar.xz |
Replace LiveInterval::killedAt with isKilledAtInstr.
Return true for LRGs that end at EarlyClobber or Register slots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189642 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/LiveInterval.h | 13 | ||||
-rw-r--r-- | lib/CodeGen/LiveRangeEdit.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/RegisterPressure.cpp | 6 |
3 files changed, 11 insertions, 10 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index 6361c3570c..058f95e24e 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -287,12 +287,13 @@ namespace llvm { return r != end() && r->start <= index; } - /// killedAt - Return true if a live range ends at index. Note that the kill - /// point is not contained in the half-open live range. It is usually the - /// getDefIndex() slot following its last use. - bool killedAt(SlotIndex index) const { - const_iterator r = find(index.getRegSlot(true)); - return r != end() && r->end == index; + /// Return true if a live range ends at the instruction at this index. Note + /// that the kill point is not contained in the half-open live range. It is + /// usually the EarlyClobber or Register slot following its last use. + bool isKilledAtInstr(SlotIndex index) const { + SlotIndex BaseIdx = index.getBaseIndex(); + const_iterator r = find(BaseIdx); + return r != end() && r->end.getBaseIndex() == BaseIdx; } /// getLiveRangeContaining - Return the live range that contains the diff --git a/lib/CodeGen/LiveRangeEdit.cpp b/lib/CodeGen/LiveRangeEdit.cpp index ca64729ab9..86271116f4 100644 --- a/lib/CodeGen/LiveRangeEdit.cpp +++ b/lib/CodeGen/LiveRangeEdit.cpp @@ -278,7 +278,7 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink) { // Always shrink COPY uses that probably come from live range splitting. if (MI->readsVirtualRegister(Reg) && (MI->isCopy() || MOI->isDef() || MRI.hasOneNonDBGUse(Reg) || - LI.killedAt(Idx))) + LI.isKilledAtInstr(Idx))) ToShrink.insert(&LI); // Remove defined value. diff --git a/lib/CodeGen/RegisterPressure.cpp b/lib/CodeGen/RegisterPressure.cpp index 188750dbc0..8328b500af 100644 --- a/lib/CodeGen/RegisterPressure.cpp +++ b/lib/CodeGen/RegisterPressure.cpp @@ -496,7 +496,7 @@ bool RegPressureTracker::recede(PressureDiff *PDiff) { // Adjust liveouts if LiveIntervals are available. if (RequireIntervals) { const LiveInterval *LI = getInterval(Reg); - if (LI && !LI->killedAt(SlotIdx)) + if (LI && !LI->isKilledAtInstr(SlotIdx)) discoverLiveOut(Reg); } increaseRegPressure(Reg); @@ -550,7 +550,7 @@ bool RegPressureTracker::advance() { bool lastUse = false; if (RequireIntervals) { const LiveInterval *LI = getInterval(Reg); - lastUse = LI && LI->killedAt(SlotIdx); + lastUse = LI && LI->isKilledAtInstr(SlotIdx); } else { // Allocatable physregs are always single-use before register rewriting. @@ -886,7 +886,7 @@ void RegPressureTracker::bumpDownwardPressure(const MachineInstr *MI) { // to be bottom-scheduled to avoid searching uses at each query. SlotIndex CurrIdx = getCurrSlot(); const LiveInterval *LI = getInterval(Reg); - if (LI && LI->killedAt(SlotIdx) + if (LI && LI->isKilledAtInstr(SlotIdx) && !findUseBetween(Reg, CurrIdx, SlotIdx, MRI, LIS)) { decreaseRegPressure(Reg); } |