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
This commit is contained in:
Andrew Trick 2013-08-30 04:31:01 +00:00
parent da6fc15f0f
commit 1362dcb589
3 changed files with 11 additions and 10 deletions

View File

@ -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

View File

@ -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.

View File

@ -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);
}