mirror of
https://github.com/RPCSX/llvm.git
synced 2025-04-07 10:42:16 +00:00
Spill explicit physical register defs as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12260 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
73716d582e
commit
6a367f33f3
@ -283,8 +283,8 @@ namespace {
|
|||||||
// the value of the spilled virtual register
|
// the value of the spilled virtual register
|
||||||
VirtRegMap::MI2VirtMap::const_iterator i, e;
|
VirtRegMap::MI2VirtMap::const_iterator i, e;
|
||||||
for (tie(i, e) = vrm_->getFoldedVirts(mii); i != e; ++i) {
|
for (tie(i, e) = vrm_->getFoldedVirts(mii); i != e; ++i) {
|
||||||
unsigned physReg = vrm_->getPhys(i->second);
|
if (vrm_->hasPhys(i->second))
|
||||||
if (physReg) vacateJustPhysReg(mbb, mii, physReg);
|
vacateJustPhysReg(mbb, mii, vrm_->getPhys(i->second));
|
||||||
}
|
}
|
||||||
|
|
||||||
// rewrite all used operands
|
// rewrite all used operands
|
||||||
@ -304,11 +304,19 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// spill implicit defs
|
// spill implicit physical register defs
|
||||||
const TargetInstrDescriptor& tid = tii_->get(mii->getOpcode());
|
const TargetInstrDescriptor& tid = tii_->get(mii->getOpcode());
|
||||||
for (const unsigned* id = tid.ImplicitDefs; *id; ++id)
|
for (const unsigned* id = tid.ImplicitDefs; *id; ++id)
|
||||||
vacatePhysReg(mbb, mii, *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
|
// rewrite def operands (def&use was handled with the
|
||||||
// uses so don't check for those here)
|
// uses so don't check for those here)
|
||||||
for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
|
for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user