Changes in directory llvm/lib/CodeGen:
LiveVariables.cpp updated: 1.76 -> 1.77 --- Log message: Be careful when to add implicit kill / dead operands. Don't add them during / post reg-allocation. --- Diffs of the changes: (+17 -9) LiveVariables.cpp | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-) Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.76 llvm/lib/CodeGen/LiveVariables.cpp:1.77 --- llvm/lib/CodeGen/LiveVariables.cpp:1.76 Wed Apr 25 16:34:08 2007 +++ llvm/lib/CodeGen/LiveVariables.cpp Wed Apr 25 20:40:09 2007 @@ -170,7 +170,8 @@ MarkVirtRegAliveInBlock(VRInfo, *PI); } -void LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI) { +bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound) { bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); @@ -187,17 +188,21 @@ RegInfo->isSuperRegister(IncomingReg, Reg) && MO.isKill()) // A super-register kill already exists. - return; + return true; } } // If not found, this means an alias of one of the operand is killed. Add a - // new implicit operand. - if (!Found) + // new implicit operand if required. + if (!Found && AddIfNotFound) { MI->addRegOperand(IncomingReg, false/*IsDef*/,true/*IsImp*/,true/*IsKill*/); + return true; + } + return Found; } -void LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI) { +bool LiveVariables::addRegisterDead(unsigned IncomingReg, MachineInstr *MI, + bool AddIfNotFound) { bool Found = false; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); @@ -214,15 +219,18 @@ RegInfo->isSuperRegister(IncomingReg, Reg) && MO.isDead()) // There exists a super-register that's marked dead. - return; + return true; } } // If not found, this means an alias of one of the operand is dead. Add a // new implicit operand. - if (!Found) + if (!Found && AddIfNotFound) { MI->addRegOperand(IncomingReg, true/*IsDef*/,true/*IsImp*/,false/*IsKill*/, true/*IsDead*/); + return true; + } + return Found; } void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) { @@ -271,9 +279,9 @@ addRegisterKilled(Reg, LastRef); else if (PhysRegPartUse[Reg]) // Add implicit use / kill to last use of a sub-register. - addRegisterKilled(Reg, PhysRegPartUse[Reg]); + addRegisterKilled(Reg, PhysRegPartUse[Reg], true); else - addRegisterDead(Reg, LastRef); + addRegisterDead(Reg, LastRef, true); } PhysRegInfo[Reg] = MI; PhysRegUsed[Reg] = false; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits