summaryrefslogtreecommitdiff
path: root/lib/CodeGen/TwoAddressInstructionPass.cpp
diff options
context:
space:
mode:
authorAlkis Evlogimenos <alkis@evlogimenos.com>2004-02-15 21:50:32 +0000
committerAlkis Evlogimenos <alkis@evlogimenos.com>2004-02-15 21:50:32 +0000
commitf11800b718909a334a1130997523419ae3e0f06e (patch)
tree6e32c31583d9e9c8dc62cba4609b828f75ed2aa0 /lib/CodeGen/TwoAddressInstructionPass.cpp
parent5aaf1d28209db546534c5ea69a78b68fa150af16 (diff)
downloadllvm-f11800b718909a334a1130997523419ae3e0f06e.tar.gz
llvm-f11800b718909a334a1130997523419ae3e0f06e.tar.bz2
llvm-f11800b718909a334a1130997523419ae3e0f06e.tar.xz
This pass should not require phi elimination or live variable
analysis. It should only preserve them and update LiveVariables if it already ran. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11479 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TwoAddressInstructionPass.cpp')
-rw-r--r--lib/CodeGen/TwoAddressInstructionPass.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp
index 6f1e990140..79c47ac26f 100644
--- a/lib/CodeGen/TwoAddressInstructionPass.cpp
+++ b/lib/CodeGen/TwoAddressInstructionPass.cpp
@@ -65,9 +65,7 @@ const PassInfo *llvm::TwoAddressInstructionPassID = X.getPassInfo();
void TwoAddressInstructionPass::getAnalysisUsage(AnalysisUsage &AU) const
{
AU.addPreserved<LiveVariables>();
- AU.addRequired<LiveVariables>();
AU.addPreservedID(PHIEliminationID);
- AU.addRequiredID(PHIEliminationID);
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -79,7 +77,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
const TargetMachine &TM = MF.getTarget();
const MRegisterInfo &MRI = *TM.getRegisterInfo();
const TargetInstrInfo &TII = TM.getInstrInfo();
- LiveVariables &LV = getAnalysis<LiveVariables>();
+ LiveVariables* LV = getAnalysisToUpdate<LiveVariables>();
bool MadeChange = false;
@@ -139,18 +137,20 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
DEBUG(std::cerr << "\t\tadded instruction: ";
prevMi->print(std::cerr, TM));
- // update live variables for regA
- assert(Added == 1 &&
- "Cannot handle multi-instruction copies yet!");
- LiveVariables::VarInfo& varInfo = LV.getVarInfo(regA);
- varInfo.DefInst = prevMi;
+ if (LV) {
+ // update live variables for regA
+ assert(Added == 1 &&
+ "Cannot handle multi-instruction copies yet!");
+ LiveVariables::VarInfo& varInfo = LV->getVarInfo(regA);
+ varInfo.DefInst = prevMi;
- // update live variables for regB
- if (LV.removeVirtualRegisterKilled(regB, &*mbbi, mi))
- LV.addVirtualRegisterKilled(regB, &*mbbi, prevMi);
+ // update live variables for regB
+ 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, e = mi->getNumOperands(); i != e; ++i) {