summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2013-08-30 04:31:01 +0000
committerAndrew Trick <atrick@apple.com>2013-08-30 04:31:01 +0000
commitff60477306946ea9ddaa1c51fc007394d5549b92 (patch)
tree0424166484a1573c1490390b58e5883a47c0b9ce
parentb1a45b6c610bf66c45606ea3e0f8cc62ba5199d0 (diff)
downloadbcm5719-llvm-ff60477306946ea9ddaa1c51fc007394d5549b92.tar.gz
bcm5719-llvm-ff60477306946ea9ddaa1c51fc007394d5549b92.zip
Replace LiveInterval::killedAt with isKilledAtInstr.
Return true for LRGs that end at EarlyClobber or Register slots. llvm-svn: 189642
-rw-r--r--llvm/include/llvm/CodeGen/LiveInterval.h13
-rw-r--r--llvm/lib/CodeGen/LiveRangeEdit.cpp2
-rw-r--r--llvm/lib/CodeGen/RegisterPressure.cpp6
3 files changed, 11 insertions, 10 deletions
diff --git a/llvm/include/llvm/CodeGen/LiveInterval.h b/llvm/include/llvm/CodeGen/LiveInterval.h
index 6361c3570cd..058f95e24e6 100644
--- a/llvm/include/llvm/CodeGen/LiveInterval.h
+++ b/llvm/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/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp
index ca64729ab90..86271116f4e 100644
--- a/llvm/lib/CodeGen/LiveRangeEdit.cpp
+++ b/llvm/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/llvm/lib/CodeGen/RegisterPressure.cpp b/llvm/lib/CodeGen/RegisterPressure.cpp
index 188750dbc00..8328b500af1 100644
--- a/llvm/lib/CodeGen/RegisterPressure.cpp
+++ b/llvm/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);
}
OpenPOWER on IntegriCloud