diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2009-11-14 00:38:06 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2009-11-14 00:38:06 +0000 |
commit | 9aebb61daf4d787aa7dcff9e3caa89bac88e11d1 (patch) | |
tree | 3090c0b4b5c3a2f0e49c034145a3b85f6517fc44 | |
parent | b3661585c0f87b6045f0d65b5cac16921ae27086 (diff) | |
download | external_llvm-9aebb61daf4d787aa7dcff9e3caa89bac88e11d1.zip external_llvm-9aebb61daf4d787aa7dcff9e3caa89bac88e11d1.tar.gz external_llvm-9aebb61daf4d787aa7dcff9e3caa89bac88e11d1.tar.bz2 |
Update MachineDominator information
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88727 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/PHIElimination.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/CodeGen/PHIElimination.cpp b/lib/CodeGen/PHIElimination.cpp index 3fe1424..e42d7a5 100644 --- a/lib/CodeGen/PHIElimination.cpp +++ b/lib/CodeGen/PHIElimination.cpp @@ -17,7 +17,7 @@ #include "PHIElimination.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/Passes.h" -#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineRegisterInfo.h" @@ -49,12 +49,12 @@ const PassInfo *const llvm::PHIEliminationID = &X; void llvm::PHIElimination::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved<LiveVariables>(); + AU.addPreserved<MachineDominatorTree>(); if (SplitEdges) { AU.addRequired<LiveVariables>(); } else { AU.setPreservesCFG(); AU.addPreservedID(MachineLoopInfoID); - AU.addPreservedID(MachineDominatorsID); } MachineFunctionPass::getAnalysisUsage(AU); } @@ -297,7 +297,6 @@ void llvm::PHIElimination::LowerAtomicPHINode( // Okay, if we now know that the value is not live out of the block, we can // add a kill marker in this block saying that it kills the incoming value! - // When SplitEdges is enabled, the value is never live out. if (!ValueIsUsed && !isLiveOut(SrcReg, opBlock, *LV)) { // In our final twist, we have to decide which instruction kills the // register. In most cases this is the copy, however, the first @@ -443,14 +442,18 @@ MachineBasicBlock *PHIElimination::SplitCriticalEdge(MachineBasicBlock *A, SmallVector<MachineOperand, 4> Cond; MF->getTarget().getInstrInfo()->InsertBranch(*NMBB, B, NULL, Cond); - if (LiveVariables *LV = getAnalysisIfAvailable<LiveVariables>()) - LV->addNewBlock(NMBB, A); - // Fix PHI nodes in B so they refer to NMBB instead of A for (MachineBasicBlock::iterator i = B->begin(), e = B->end(); i != e && i->getOpcode() == TargetInstrInfo::PHI; ++i) for (unsigned ni = 1, ne = i->getNumOperands(); ni != ne; ni += 2) if (i->getOperand(ni+1).getMBB() == A) i->getOperand(ni+1).setMBB(NMBB); + + if (LiveVariables *LV=getAnalysisIfAvailable<LiveVariables>()) + LV->addNewBlock(NMBB, A); + + if (MachineDominatorTree *MDT=getAnalysisIfAvailable<MachineDominatorTree>()) + MDT->addNewBlock(NMBB, A); + return NMBB; } |