summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-07 23:29:10 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-07 23:29:10 +0000
commit71c380f6c71da3b9d6d41e6aba43a28720171cf8 (patch)
treeea29886d6852f8e9c59b02bf635ff3788453d2e4 /llvm/lib/CodeGen
parent6258c53e12dbf973f64acbc055312f57564bc7d8 (diff)
downloadbcm5719-llvm-71c380f6c71da3b9d6d41e6aba43a28720171cf8.tar.gz
bcm5719-llvm-71c380f6c71da3b9d6d41e6aba43a28720171cf8.zip
Let shrinkToUses optionally return a list of now dead machine instructions.
llvm-svn: 127192
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
index 4dda5485488..8a2db3e1a38 100644
--- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -746,7 +746,8 @@ LiveInterval* LiveIntervals::dupInterval(LiveInterval *li) {
/// shrinkToUses - After removing some uses of a register, shrink its live
/// range to just the remaining uses. This method does not compute reaching
/// defs for new uses, and it doesn't remove dead defs.
-void LiveIntervals::shrinkToUses(LiveInterval *li) {
+void LiveIntervals::shrinkToUses(LiveInterval *li,
+ SmallVectorImpl<MachineInstr*> *dead) {
DEBUG(dbgs() << "Shrink: " << *li << '\n');
assert(TargetRegisterInfo::isVirtualRegister(li->reg)
&& "Can't only shrink physical registers");
@@ -852,6 +853,10 @@ void LiveIntervals::shrinkToUses(LiveInterval *li) {
MachineInstr *MI = getInstructionFromIndex(VNI->def);
assert(MI && "No instruction defining live value");
MI->addRegisterDead(li->reg, tri_);
+ if (dead && MI->allDefsAreDead()) {
+ DEBUG(dbgs() << "All defs dead: " << *MI);
+ dead->push_back(MI);
+ }
}
}
OpenPOWER on IntegriCloud