diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-01-11 09:18:45 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-01-11 09:18:45 +0000 |
commit | b08bdc4a161313bb09a73e6c61f0cb0669e291c7 (patch) | |
tree | 513143c5dc3fb9f1fc353afffa449597a7660889 /lib/CodeGen/TwoAddressInstructionPass.cpp | |
parent | a14b0d441dee43e5dc92aa450e65628d28a5f4df (diff) |
Make LiveVariables::HandlePhysRegUse and
LiveVariables::HandlePhysRegDef private they use information that is
not in memory when LiveVariables finishes the analysis.
Also update the TwoAddressInstructionPass to not use this interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10755 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TwoAddressInstructionPass.cpp')
-rw-r--r-- | lib/CodeGen/TwoAddressInstructionPass.cpp | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp index 4d8db815b2..2cb393ee48 100644 --- a/lib/CodeGen/TwoAddressInstructionPass.cpp +++ b/lib/CodeGen/TwoAddressInstructionPass.cpp @@ -120,8 +120,10 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &fn) { // a = a op c unsigned regA = mi->getOperand(0).getAllocatedRegNum(); unsigned regB = mi->getOperand(1).getAllocatedRegNum(); - bool regAisPhysical = regA < MRegisterInfo::FirstVirtualRegister; - bool regBisPhysical = regB < MRegisterInfo::FirstVirtualRegister; + + assert(regA >= MRegisterInfo::FirstVirtualRegister && + regB >= MRegisterInfo::FirstVirtualRegister && + "cannot update physical register live information"); // first make sure we do not have a use of a in the // instruction (a = b + a for example) because our @@ -132,10 +134,8 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &fn) { mi->getOperand(i).getAllocatedRegNum() != (int)regA); } - const TargetRegisterClass* rc = regAisPhysical ? - mri_->getRegClass(regA) : + const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(regA); - numInstrsAdded += mri_->copyRegToReg(*mbbi, mii, regA, regB, rc); MachineInstr* prevMi = *(mii - 1); @@ -143,25 +143,15 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &fn) { prevMi->print(std::cerr, *tm_)); // update live variables for regA - if (regAisPhysical) { - lv_->HandlePhysRegDef(regA, prevMi); - } - else { - LiveVariables::VarInfo& varInfo = lv_->getVarInfo(regA); - varInfo.DefInst = prevMi; - } + LiveVariables::VarInfo& varInfo = lv_->getVarInfo(regA); + varInfo.DefInst = prevMi; // update live variables for regB - if (regBisPhysical) { - lv_->HandlePhysRegUse(regB, prevMi); - } - else { - if (lv_->removeVirtualRegisterKilled(regB, &*mbbi, mi)) - lv_->addVirtualRegisterKilled(regB, &*mbbi, prevMi); + if (lv_->removeVirtualRegisterKilled(regB, &*mbbi, mi)) + lv_->addVirtualRegisterKilled(regB, &*mbbi, prevMi); - if (lv_->removeVirtualRegisterDead(regB, &*mbbi, mi)) - lv_->addVirtualRegisterDead(regB, &*mbbi, prevMi); - } + if (lv_->removeVirtualRegisterDead(regB, &*mbbi, mi)) + lv_->addVirtualRegisterDead(regB, &*mbbi, prevMi); // replace all occurences of regB with regA for (unsigned i = 1; i < mi->getNumOperands(); ++i) { |