diff options
| author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-03-09 08:35:13 +0000 |
|---|---|---|
| committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-03-09 08:35:13 +0000 |
| commit | 6623cd78f968a9909654cde0c150c3ae8b0554c6 (patch) | |
| tree | bae5b72548ba279a78f67b81990071d1a127dc60 /llvm/lib/CodeGen/VirtRegMap.cpp | |
| parent | 0766126e2e802984c90b2258cb365d5cf827f53f (diff) | |
| download | bcm5719-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.cpp | 14 |
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) { |

