forked from OSchip/llvm-project
Use LiveRangeQuery for instruction-level liveness queries.
Remove redundant or bug-prone LiveInterval APIs. llvm-svn: 189685
This commit is contained in:
parent
9b05d80632
commit
3bf33075ce
|
@ -287,21 +287,6 @@ namespace llvm {
|
|||
return r != end() && r->start <= 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;
|
||||
}
|
||||
|
||||
/// Return true if a live range starts at the instruction at this index.
|
||||
bool isDefinedByInstr(SlotIndex index) const {
|
||||
const_iterator r = find(index.getDeadSlot());
|
||||
return r != end() && r->end.getBaseIndex() == index.getBaseIndex();
|
||||
}
|
||||
|
||||
/// getLiveRangeContaining - Return the live range that contains the
|
||||
/// specified index, or null if there is none.
|
||||
const LiveRange *getLiveRangeContaining(SlotIndex Idx) const {
|
||||
|
|
|
@ -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.isKilledAtInstr(Idx)))
|
||||
LiveRangeQuery(LI, Idx).isKill()))
|
||||
ToShrink.insert(&LI);
|
||||
|
||||
// Remove defined value.
|
||||
|
|
|
@ -500,8 +500,9 @@ bool RegPressureTracker::recede(SmallVectorImpl<unsigned> *LiveUses,
|
|||
if (RequireIntervals) {
|
||||
const LiveInterval *LI = getInterval(Reg);
|
||||
// Check if this LR is killed and not redefined here.
|
||||
if (LI && !LI->isKilledAtInstr(SlotIdx)
|
||||
&& !LI->isDefinedByInstr(SlotIdx)) {
|
||||
if (LI) {
|
||||
LiveRangeQuery LRQ(*LI, SlotIdx);
|
||||
if (!LRQ.isKill() && !LRQ.valueDefined())
|
||||
discoverLiveOut(Reg);
|
||||
}
|
||||
}
|
||||
|
@ -558,7 +559,7 @@ bool RegPressureTracker::advance() {
|
|||
bool lastUse = false;
|
||||
if (RequireIntervals) {
|
||||
const LiveInterval *LI = getInterval(Reg);
|
||||
lastUse = LI && LI->isKilledAtInstr(SlotIdx);
|
||||
lastUse = LI && LiveRangeQuery(*LI, SlotIdx).isKill();
|
||||
}
|
||||
else {
|
||||
// Allocatable physregs are always single-use before register rewriting.
|
||||
|
@ -882,9 +883,10 @@ 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->isKilledAtInstr(SlotIdx)
|
||||
&& !findUseBetween(Reg, CurrIdx, SlotIdx, MRI, LIS)) {
|
||||
decreaseRegPressure(Reg);
|
||||
if (LI) {
|
||||
LiveRangeQuery LRQ(*LI, SlotIdx);
|
||||
if (LRQ.isKill() && !findUseBetween(Reg, CurrIdx, SlotIdx, MRI, LIS))
|
||||
decreaseRegPressure(Reg);
|
||||
}
|
||||
}
|
||||
else if (!TargetRegisterInfo::isVirtualRegister(Reg)) {
|
||||
|
|
Loading…
Reference in New Issue