StrongPHIElimination requires LiveVariables.
authorOwen Anderson <resistor@mac.com>
Tue, 6 Nov 2007 04:49:43 +0000 (04:49 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 6 Nov 2007 04:49:43 +0000 (04:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43751 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/StrongPHIElimination.cpp

index a9625e24d3c3b2a673f3abf71e076100fff49426..51a2ef944d000211bccbee341a469ced424e69d3 100644 (file)
@@ -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;
+}