summaryrefslogtreecommitdiff
path: root/lib/CodeGen/TwoAddressInstructionPass.cpp
diff options
context:
space:
mode:
authorAlkis Evlogimenos <alkis@evlogimenos.com>2004-01-11 09:18:45 +0000
committerAlkis Evlogimenos <alkis@evlogimenos.com>2004-01-11 09:18:45 +0000
commitb08bdc4a161313bb09a73e6c61f0cb0669e291c7 (patch)
tree513143c5dc3fb9f1fc353afffa449597a7660889 /lib/CodeGen/TwoAddressInstructionPass.cpp
parenta14b0d441dee43e5dc92aa450e65628d28a5f4df (diff)
downloadllvm-b08bdc4a161313bb09a73e6c61f0cb0669e291c7.tar.gz
llvm-b08bdc4a161313bb09a73e6c61f0cb0669e291c7.tar.bz2
llvm-b08bdc4a161313bb09a73e6c61f0cb0669e291c7.tar.xz
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.cpp32
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) {