diff options
author | Owen Anderson <resistor@mac.com> | 2007-11-06 04:49:43 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2007-11-06 04:49:43 +0000 |
commit | a4ad2e740ac7727229ee0b47affb2e7efae085eb (patch) | |
tree | de7517faba6ac29da461ceb0a138d53b31dbd5eb | |
parent | 000604afd45e9f729cf6559cd5b4d33af0cddb02 (diff) |
StrongPHIElimination requires LiveVariables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43751 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/StrongPHIElimination.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index a9625e24d3..51a2ef944d 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -37,23 +37,22 @@ namespace { static char ID; // Pass identification, replacement for typeid StrongPHIElimination() : MachineFunctionPass((intptr_t)&ID) {} - bool runOnMachineFunction(MachineFunction &Fn) { - computeDFS(Fn); - - - return false; - } - + bool runOnMachineFunction(MachineFunction &Fn); + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved<LiveVariables>(); AU.addPreservedID(PHIEliminationID); AU.addRequired<MachineDominatorTree>(); + AU.addRequired<LiveVariables>(); + AU.setPreservesAll(); MachineFunctionPass::getAnalysisUsage(AU); } virtual void releaseMemory() { preorder.clear(); maxpreorder.clear(); + + waiting.clear(); } private: @@ -72,15 +71,23 @@ namespace { parent->addChild(this); } - MachineInstr* getInstr() { return instr; } + ~DomForestNode() { + for (iterator I = begin(), E = end(); I != E; ++I) + delete *I; + } - DomForestNode::iterator begin() { return children.begin(); } - DomForestNode::iterator end() { return children.end(); } + inline MachineInstr* getInstr() { return instr; } + + inline DomForestNode::iterator begin() { return children.begin(); } + inline DomForestNode::iterator end() { return children.end(); } }; DenseMap<MachineBasicBlock*, unsigned> preorder; DenseMap<MachineBasicBlock*, unsigned> maxpreorder; + DenseMap<MachineBasicBlock*, std::vector<MachineInstr*> > waiting; + + void computeDFS(MachineFunction& MF); std::vector<DomForestNode*> @@ -198,3 +205,10 @@ StrongPHIElimination::computeDomForest(SmallPtrSet<MachineInstr*, 8>& instrs) { ret.insert(ret.end(), VirtualRoot->begin(), VirtualRoot->end()); return ret; } + +bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) { + computeDFS(Fn); + + + return false; +} |