StrongPHIElimination requires LiveVariables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson
2007-11-06 04:49:43 +00:00
parent 000604afd4
commit a4ad2e740a

View File

@@ -37,23 +37,22 @@ namespace {
static char ID; // Pass identification, replacement for typeid static char ID; // Pass identification, replacement for typeid
StrongPHIElimination() : MachineFunctionPass((intptr_t)&ID) {} StrongPHIElimination() : MachineFunctionPass((intptr_t)&ID) {}
bool runOnMachineFunction(MachineFunction &Fn) { bool runOnMachineFunction(MachineFunction &Fn);
computeDFS(Fn);
return false;
}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addPreserved<LiveVariables>(); AU.addPreserved<LiveVariables>();
AU.addPreservedID(PHIEliminationID); AU.addPreservedID(PHIEliminationID);
AU.addRequired<MachineDominatorTree>(); AU.addRequired<MachineDominatorTree>();
AU.addRequired<LiveVariables>();
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU); MachineFunctionPass::getAnalysisUsage(AU);
} }
virtual void releaseMemory() { virtual void releaseMemory() {
preorder.clear(); preorder.clear();
maxpreorder.clear(); maxpreorder.clear();
waiting.clear();
} }
private: private:
@@ -72,15 +71,23 @@ namespace {
parent->addChild(this); 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(); } inline MachineInstr* getInstr() { return instr; }
DomForestNode::iterator end() { return children.end(); }
inline DomForestNode::iterator begin() { return children.begin(); }
inline DomForestNode::iterator end() { return children.end(); }
}; };
DenseMap<MachineBasicBlock*, unsigned> preorder; DenseMap<MachineBasicBlock*, unsigned> preorder;
DenseMap<MachineBasicBlock*, unsigned> maxpreorder; DenseMap<MachineBasicBlock*, unsigned> maxpreorder;
DenseMap<MachineBasicBlock*, std::vector<MachineInstr*> > waiting;
void computeDFS(MachineFunction& MF); void computeDFS(MachineFunction& MF);
std::vector<DomForestNode*> std::vector<DomForestNode*>
@@ -198,3 +205,10 @@ StrongPHIElimination::computeDomForest(SmallPtrSet<MachineInstr*, 8>& instrs) {
ret.insert(ret.end(), VirtualRoot->begin(), VirtualRoot->end()); ret.insert(ret.end(), VirtualRoot->begin(), VirtualRoot->end());
return ret; return ret;
} }
bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
computeDFS(Fn);
return false;
}