summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/VirtRegMap.cpp
diff options
context:
space:
mode:
authorAlkis Evlogimenos <alkis@evlogimenos.com>2004-03-09 08:35:13 +0000
committerAlkis Evlogimenos <alkis@evlogimenos.com>2004-03-09 08:35:13 +0000
commit6623cd78f968a9909654cde0c150c3ae8b0554c6 (patch)
treebae5b72548ba279a78f67b81990071d1a127dc60 /llvm/lib/CodeGen/VirtRegMap.cpp
parent0766126e2e802984c90b2258cb365d5cf827f53f (diff)
downloadbcm5719-llvm-6623cd78f968a9909654cde0c150c3ae8b0554c6.tar.gz
bcm5719-llvm-6623cd78f968a9909654cde0c150c3ae8b0554c6.zip
Spill explicit physical register defs as well.
llvm-svn: 12260
Diffstat (limited to 'llvm/lib/CodeGen/VirtRegMap.cpp')
-rw-r--r--llvm/lib/CodeGen/VirtRegMap.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/VirtRegMap.cpp b/llvm/lib/CodeGen/VirtRegMap.cpp
index d2c53d5ba6f..7e8e416034c 100644
--- a/llvm/lib/CodeGen/VirtRegMap.cpp
+++ b/llvm/lib/CodeGen/VirtRegMap.cpp
@@ -283,8 +283,8 @@ namespace {
// the value of the spilled virtual register
VirtRegMap::MI2VirtMap::const_iterator i, e;
for (tie(i, e) = vrm_->getFoldedVirts(mii); i != e; ++i) {
- unsigned physReg = vrm_->getPhys(i->second);
- if (physReg) vacateJustPhysReg(mbb, mii, physReg);
+ if (vrm_->hasPhys(i->second))
+ vacateJustPhysReg(mbb, mii, vrm_->getPhys(i->second));
}
// rewrite all used operands
@@ -304,11 +304,19 @@ namespace {
}
}
- // spill implicit defs
+ // spill implicit physical register defs
const TargetInstrDescriptor& tid = tii_->get(mii->getOpcode());
for (const unsigned* id = tid.ImplicitDefs; *id; ++id)
vacatePhysReg(mbb, mii, *id);
+ // spill explicit physical register defs
+ for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
+ MachineOperand& op = mii->getOperand(i);
+ if (op.isRegister() && op.getReg() && !op.isUse() &&
+ MRegisterInfo::isPhysicalRegister(op.getReg()))
+ vacatePhysReg(mbb, mii, op.getReg());
+ }
+
// rewrite def operands (def&use was handled with the
// uses so don't check for those here)
for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
OpenPOWER on IntegriCloud