Eliminate RegisterAnalysis.  RegisterPass now does all that is necessary.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29921 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h
index 8d978b3..95702c0 100644
--- a/include/llvm/PassSupport.h
+++ b/include/llvm/PassSupport.h
@@ -179,24 +179,33 @@
 struct RegisterPass : public RegisterPassBase {
 
   // Register Pass using default constructor...
-  RegisterPass(const char *PassArg, const char *Name)
+  RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false)
   : RegisterPassBase(Name, PassArg, typeid(PassName),
-                     callDefaultCtor<PassName>) {}
+                     callDefaultCtor<PassName>) {
+    if (CFGOnly) setOnlyUsesCFG();
+  }
 
   // Register Pass using default constructor explicitly...
   RegisterPass(const char *PassArg, const char *Name,
-               Pass *(*ctor)()) 
-  : RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {}
+               Pass *(*ctor)(), bool CFGOnly = false) 
+  : RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {
+    if (CFGOnly) setOnlyUsesCFG();
+  }
 
   // Register Pass using TargetMachine constructor...
   RegisterPass(const char *PassArg, const char *Name, 
-               Pass *(*targetctor)(TargetMachine &))
-  : RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {}
+               Pass *(*targetctor)(TargetMachine &), bool CFGOnly = false)
+  : RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {
+    if (CFGOnly) setOnlyUsesCFG();
+  }
 
   // Generic constructor version that has an unknown ctor type...
   template<typename CtorType>
-  RegisterPass(const char *PassArg, const char *Name, CtorType *Fn)
-  : RegisterPassBase(Name, PassArg, typeid(PassName), 0) {}
+  RegisterPass(const char *PassArg, const char *Name, CtorType *Fn,
+               bool CFGOnly = false)
+  : RegisterPassBase(Name, PassArg, typeid(PassName), 0) {
+    if (CFGOnly) setOnlyUsesCFG();
+  }
 };
 
 /// RegisterOpt - Register something that is to show up in Opt, this is just a
@@ -246,22 +255,6 @@
   }
 };
 
-/// RegisterAnalysis - Register something that is to show up in Analysis, this
-/// is just a shortcut for specifying RegisterPass...  Analyses take a special
-/// argument that, when set to true, tells the system that the analysis ONLY
-/// depends on the shape of the CFG, so if a transformation preserves the CFG
-/// that the analysis is not invalidated.
-///
-template<typename PassName>
-struct RegisterAnalysis : public RegisterPassBase {
-  RegisterAnalysis(const char *PassArg, const char *Name,
-                   bool CFGOnly = false)
-  : RegisterPassBase(Name, PassArg, typeid(PassName),
-                     callDefaultCtor<PassName>) {
-    if (CFGOnly) setOnlyUsesCFG();
-  }
-};
-
 
 /// RegisterAnalysisGroup - Register a Pass as a member of an analysis _group_.
 /// Analysis groups are used to define an interface (which need not derive from
diff --git a/lib/Analysis/CFGPrinter.cpp b/lib/Analysis/CFGPrinter.cpp
index 693c1f6..a762a8e 100644
--- a/lib/Analysis/CFGPrinter.cpp
+++ b/lib/Analysis/CFGPrinter.cpp
@@ -109,8 +109,8 @@
     }
   };
 
-  RegisterAnalysis<CFGPrinter> P1("print-cfg",
-                                  "Print CFG of function to 'dot' file");
+  RegisterPass<CFGPrinter> P1("print-cfg",
+                              "Print CFG of function to 'dot' file");
 
   struct CFGOnlyPrinter : public CFGPrinter {
     virtual bool runOnFunction(Function &F) {
@@ -127,7 +127,7 @@
     }
   };
 
-  RegisterAnalysis<CFGOnlyPrinter>
+  RegisterPass<CFGOnlyPrinter>
   P2("print-cfg-only",
      "Print CFG of function to 'dot' file (with no function bodies)");
 }
diff --git a/lib/Analysis/DataStructure/BottomUpClosure.cpp b/lib/Analysis/DataStructure/BottomUpClosure.cpp
index dc7c761..d2708b0 100644
--- a/lib/Analysis/DataStructure/BottomUpClosure.cpp
+++ b/lib/Analysis/DataStructure/BottomUpClosure.cpp
@@ -37,7 +37,7 @@
   UpdateGlobals("budatastructures-update-from-globals",
 		cl::desc("Update local graph from global graph when processing function"));
 
-  RegisterAnalysis<BUDataStructures>
+  RegisterPass<BUDataStructures>
   X("budatastructure", "Bottom-up Data Structure Analysis");
 }
 
diff --git a/lib/Analysis/DataStructure/CallTargets.cpp b/lib/Analysis/DataStructure/CallTargets.cpp
index 30d7d48..eb1e28d 100644
--- a/lib/Analysis/DataStructure/CallTargets.cpp
+++ b/lib/Analysis/DataStructure/CallTargets.cpp
@@ -34,7 +34,7 @@
   Statistic<> CompleteInd("calltarget", "Number of complete indirect calls");
   Statistic<> CompleteEmpty("calltarget", "Number of complete empty calls");
 
-  RegisterAnalysis<CallTargetFinder> X("calltarget", "Find Call Targets (uses DSA)");
+  RegisterPass<CallTargetFinder> X("calltarget","Find Call Targets (uses DSA)");
 }
 
 void CallTargetFinder::findIndTargets(Module &M)
diff --git a/lib/Analysis/DataStructure/CompleteBottomUp.cpp b/lib/Analysis/DataStructure/CompleteBottomUp.cpp
index 452f033..ea21a4f 100644
--- a/lib/Analysis/DataStructure/CompleteBottomUp.cpp
+++ b/lib/Analysis/DataStructure/CompleteBottomUp.cpp
@@ -25,7 +25,7 @@
 using namespace llvm;
 
 namespace {
-  RegisterAnalysis<CompleteBUDataStructures>
+  RegisterPass<CompleteBUDataStructures>
   X("cbudatastructure", "'Complete' Bottom-up Data Structure Analysis");
   Statistic<> NumCBUInlines("cbudatastructures", "Number of graphs inlined");
 }
diff --git a/lib/Analysis/DataStructure/DataStructureStats.cpp b/lib/Analysis/DataStructure/DataStructureStats.cpp
index f4aff30..a73fc96 100644
--- a/lib/Analysis/DataStructure/DataStructureStats.cpp
+++ b/lib/Analysis/DataStructure/DataStructureStats.cpp
@@ -60,7 +60,7 @@
     void print(std::ostream &O, const Module* = 0) const { }
   };
 
-  static RegisterAnalysis<DSGraphStats> Z("dsstats", "DS Graph Statistics");
+  static RegisterPass<DSGraphStats> Z("dsstats", "DS Graph Statistics");
 }
 
 FunctionPass *llvm::createDataStructureStatsPass() { 
diff --git a/lib/Analysis/DataStructure/EquivClassGraphs.cpp b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
index cc536a7..9126ef9 100644
--- a/lib/Analysis/DataStructure/EquivClassGraphs.cpp
+++ b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
@@ -30,7 +30,7 @@
 using namespace llvm;
 
 namespace {
-  RegisterAnalysis<EquivClassGraphs> X("eqdatastructure",
+  RegisterPass<EquivClassGraphs> X("eqdatastructure",
                     "Equivalence-class Bottom-up Data Structure Analysis");
   Statistic<> NumEquivBUInlines("equivdatastructures",
                                 "Number of graphs inlined");
diff --git a/lib/Analysis/DataStructure/GraphChecker.cpp b/lib/Analysis/DataStructure/GraphChecker.cpp
index f42ea7e..50a41f2 100644
--- a/lib/Analysis/DataStructure/GraphChecker.cpp
+++ b/lib/Analysis/DataStructure/GraphChecker.cpp
@@ -74,7 +74,7 @@
     void verify(const DSGraph &G);
   };
 
-  RegisterAnalysis<DSGC> X("datastructure-gc", "DSA Graph Checking Pass");
+  RegisterPass<DSGC> X("datastructure-gc", "DSA Graph Checking Pass");
 }
 
 FunctionPass *llvm::createDataStructureGraphCheckerPass() {
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp
index ecf9532..c70970a 100644
--- a/lib/Analysis/DataStructure/Local.cpp
+++ b/lib/Analysis/DataStructure/Local.cpp
@@ -33,7 +33,7 @@
 
 using namespace llvm;
 
-static RegisterAnalysis<LocalDataStructures>
+static RegisterPass<LocalDataStructures>
 X("datastructure", "Local Data Structure Analysis");
 
 static cl::opt<bool>
diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp
index 2271fa4..9fdaac3 100644
--- a/lib/Analysis/DataStructure/TopDownClosure.cpp
+++ b/lib/Analysis/DataStructure/TopDownClosure.cpp
@@ -32,7 +32,7 @@
 #endif
 
 namespace {
-  RegisterAnalysis<TDDataStructures>   // Register the pass
+  RegisterPass<TDDataStructures>   // Register the pass
   Y("tddatastructure", "Top-down Data Structure Analysis");
 
   Statistic<> NumTDInlines("tddatastructures", "Number of graphs inlined");
diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp
index 725cec4..d4ea9f9 100644
--- a/lib/Analysis/IPA/FindUsedTypes.cpp
+++ b/lib/Analysis/IPA/FindUsedTypes.cpp
@@ -21,7 +21,7 @@
 #include "llvm/Support/InstIterator.h"
 using namespace llvm;
 
-static RegisterAnalysis<FindUsedTypes>
+static RegisterPass<FindUsedTypes>
 X("printusedtypes", "Find Used Types");
 
 // IncorporateType - Incorporate one type and all of its subtypes into the
diff --git a/lib/Analysis/InstCount.cpp b/lib/Analysis/InstCount.cpp
index df11fc4..72bc2c7 100644
--- a/lib/Analysis/InstCount.cpp
+++ b/lib/Analysis/InstCount.cpp
@@ -55,8 +55,8 @@
 
   };
 
-  RegisterAnalysis<InstCount> X("instcount",
-                                "Counts the various types of Instructions");
+  RegisterPass<InstCount> X("instcount",
+                            "Counts the various types of Instructions");
 }
 
 FunctionPass *llvm::createInstCountPass() { return new InstCount(); }
diff --git a/lib/Analysis/IntervalPartition.cpp b/lib/Analysis/IntervalPartition.cpp
index a6b85d4..2385a7d 100644
--- a/lib/Analysis/IntervalPartition.cpp
+++ b/lib/Analysis/IntervalPartition.cpp
@@ -15,7 +15,7 @@
 #include "llvm/Analysis/IntervalIterator.h"
 using namespace llvm;
 
-static RegisterAnalysis<IntervalPartition>
+static RegisterPass<IntervalPartition>
 X("intervals", "Interval Partition Construction", true);
 
 //===----------------------------------------------------------------------===//
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index a91c201..907cf5f 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -25,7 +25,7 @@
 #include <iostream>
 using namespace llvm;
 
-static RegisterAnalysis<LoopInfo>
+static RegisterPass<LoopInfo>
 X("loops", "Natural Loop Construction", true);
 
 //===----------------------------------------------------------------------===//
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index e195d7a..ec7f7c7 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -23,7 +23,7 @@
 //  ImmediatePostDominators Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<ImmediatePostDominators>
+static RegisterPass<ImmediatePostDominators>
 D("postidom", "Immediate Post-Dominators Construction", true);
 
 unsigned ImmediatePostDominators::DFSPass(BasicBlock *V, InfoRec &VInfo,
@@ -145,7 +145,7 @@
 //  PostDominatorSet Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<PostDominatorSet>
+static RegisterPass<PostDominatorSet>
 B("postdomset", "Post-Dominator Set Construction", true);
 
 // Postdominator set construction.  This converts the specified function to only
@@ -212,7 +212,7 @@
 //  PostDominatorTree Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<PostDominatorTree>
+static RegisterPass<PostDominatorTree>
 F("postdomtree", "Post-Dominator Tree Construction", true);
 
 DominatorTreeBase::Node *PostDominatorTree::getNodeForBlock(BasicBlock *BB) {
@@ -258,7 +258,7 @@
 // PostETForest Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<PostETForest>
+static RegisterPass<PostETForest>
 G("postetforest", "Post-ET-Forest Construction", true);
 
 ETNode *PostETForest::getNodeForBlock(BasicBlock *BB) {
@@ -322,7 +322,7 @@
 //  PostDominanceFrontier Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<PostDominanceFrontier>
+static RegisterPass<PostDominanceFrontier>
 H("postdomfrontier", "Post-Dominance Frontier Construction", true);
 
 const DominanceFrontier::DomSetType &
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index 37c6a44e..289297c 100644
--- a/lib/Analysis/ScalarEvolution.cpp
+++ b/lib/Analysis/ScalarEvolution.cpp
@@ -80,7 +80,7 @@
 using namespace llvm;
 
 namespace {
-  RegisterAnalysis<ScalarEvolution>
+  RegisterPass<ScalarEvolution>
   R("scalar-evolution", "Scalar Evolution Analysis");
 
   Statistic<>
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index 7e3bec9..4f34881 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -38,7 +38,7 @@
 using namespace llvm;
 
 namespace {
-  RegisterAnalysis<LiveIntervals> X("liveintervals", "Live Interval Analysis");
+  RegisterPass<LiveIntervals> X("liveintervals", "Live Interval Analysis");
 
   static Statistic<> numIntervals
   ("liveintervals", "Number of original intervals");
diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp
index 46a8012..4f203e9 100644
--- a/lib/CodeGen/LiveVariables.cpp
+++ b/lib/CodeGen/LiveVariables.cpp
@@ -38,7 +38,7 @@
 #include <iostream>
 using namespace llvm;
 
-static RegisterAnalysis<LiveVariables> X("livevars", "Live Variable Analysis");
+static RegisterPass<LiveVariables> X("livevars", "Live Variable Analysis");
 
 void LiveVariables::VarInfo::dump() const {
   std::cerr << "Register Defined by: ";
diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp
index f079acf..9f7e5d9 100644
--- a/lib/VMCore/Dominators.cpp
+++ b/lib/VMCore/Dominators.cpp
@@ -44,7 +44,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<ImmediateDominators>
+static RegisterPass<ImmediateDominators>
 C("idom", "Immediate Dominators Construction", true);
 
 unsigned ImmediateDominators::DFSPass(BasicBlock *V, InfoRec &VInfo,
@@ -243,7 +243,7 @@
 //  DominatorSet Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<DominatorSet>
+static RegisterPass<DominatorSet>
 B("domset", "Dominator Set Construction", true);
 
 // dominates - Return true if A dominates B.  This performs the special checks
@@ -343,7 +343,7 @@
 //  DominatorTree Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<DominatorTree>
+static RegisterPass<DominatorTree>
 E("domtree", "Dominator Tree Construction", true);
 
 // DominatorTreeBase::reset - Free all of the tree node memory.
@@ -434,7 +434,7 @@
 //  DominanceFrontier Implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<DominanceFrontier>
+static RegisterPass<DominanceFrontier>
 G("domfrontier", "Dominance Frontier Construction", true);
 
 const DominanceFrontier::DomSetType &
@@ -813,7 +813,7 @@
 // ETForest implementation
 //===----------------------------------------------------------------------===//
 
-static RegisterAnalysis<ETForest>
+static RegisterPass<ETForest>
 D("etforest", "ET Forest Construction", true);
 
 void ETForestBase::reset() {
diff --git a/tools/opt/AnalysisWrappers.cpp b/tools/opt/AnalysisWrappers.cpp
index b371d50..5c815f2 100644
--- a/tools/opt/AnalysisWrappers.cpp
+++ b/tools/opt/AnalysisWrappers.cpp
@@ -61,7 +61,7 @@
     }
   };
 
-  RegisterAnalysis<ExternalFunctionsPassedConstants>
+  RegisterPass<ExternalFunctionsPassedConstants>
   P1("externalfnconstants", "Print external fn callsites passed constants");
   
   struct CallGraphPrinter : public ModulePass {
@@ -76,6 +76,6 @@
     }
   };
   
-  RegisterAnalysis<CallGraphPrinter>
+  RegisterPass<CallGraphPrinter>
     P2("callgraph", "Print a call graph");
 }
diff --git a/tools/opt/GraphPrinters.cpp b/tools/opt/GraphPrinters.cpp
index 8826cd2..8ae0a03 100644
--- a/tools/opt/GraphPrinters.cpp
+++ b/tools/opt/GraphPrinters.cpp
@@ -72,6 +72,6 @@
     }
   };
 
-  RegisterAnalysis<CallGraphPrinter> P2("print-callgraph",
-                                        "Print Call Graph to 'dot' file");
+  RegisterPass<CallGraphPrinter> P2("print-callgraph",
+                                    "Print Call Graph to 'dot' file");
 }
diff --git a/tools/opt/PrintSCC.cpp b/tools/opt/PrintSCC.cpp
index c0adf5c..904442d 100644
--- a/tools/opt/PrintSCC.cpp
+++ b/tools/opt/PrintSCC.cpp
@@ -57,10 +57,10 @@
     }
   };
 
-  RegisterAnalysis<CFGSCC>
+  RegisterPass<CFGSCC>
   Y("cfgscc", "Print SCCs of each function CFG");
 
-  RegisterAnalysis<CallGraphSCC>
+  RegisterPass<CallGraphSCC>
   Z("callscc", "Print SCCs of the Call Graph");
 }