aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2007-11-06 04:49:43 +0000
committerOwen Anderson <resistor@mac.com>2007-11-06 04:49:43 +0000
commita4ad2e740ac7727229ee0b47affb2e7efae085eb (patch)
treede7517faba6ac29da461ceb0a138d53b31dbd5eb
parent000604afd45e9f729cf6559cd5b4d33af0cddb02 (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.cpp34
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;
+}