Instcombine PHI's of the form %PN = phi PN, X into X and
[oota-llvm.git] / lib / Transforms / Scalar / PiNodeInsertion.cpp
index 2e9c32800b6189c5d8123cd30228750fafff1374..bf0119f2f3c359984eaf66d67d41064d639de800 100644 (file)
@@ -40,13 +40,11 @@ static Statistic<> NumInserted("pinodes\t\t- Number of Pi nodes inserted");
 
 namespace {
   struct PiNodeInserter : public FunctionPass {
-    const char *getPassName() const { return "Pi Node Insertion"; }
-    
-    virtual bool runOnFunction(Function *F);
+    virtual bool runOnFunction(Function &F);
     
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.preservesCFG();
-      AU.addRequired(DominatorSet::ID);
+      AU.addRequired<DominatorSet>();
     }
 
     // insertPiNodeFor - Insert a Pi node for V in the successors of BB if our
@@ -56,16 +54,17 @@ namespace {
     //
     bool insertPiNodeFor(Value *V, BasicBlock *BB, Value *Rep = 0);
   };
+
+  RegisterOpt<PiNodeInserter> X("pinodes", "Pi Node Insertion");
 }
 
 Pass *createPiNodeInsertionPass() { return new PiNodeInserter(); }
 
 
-bool PiNodeInserter::runOnFunction(Function *F) {
+bool PiNodeInserter::runOnFunction(Function &F) {
   bool Changed = false;
-  for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
-    BasicBlock *BB = *I;
-    TerminatorInst *TI = BB->getTerminator();
+  for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
+    TerminatorInst *TI = I->getTerminator();
     
     // FIXME: Insert PI nodes for switch statements too
 
@@ -112,8 +111,7 @@ bool PiNodeInserter::runOnFunction(Function *F) {
 }
 
 
-// alreadyHasPiNodeFor - Return true if there is already a Pi node in BB for
-// V.
+// alreadyHasPiNodeFor - Return true if there is already a Pi node in BB for V.
 static bool alreadyHasPiNodeFor(Value *V, BasicBlock *BB) {
   for (Value::use_iterator I = V->use_begin(), E = V->use_end(); I != E; ++I)
     if (PHINode *PN = dyn_cast<PHINode>(*I))