* Add support for different "PassType's"
authorChris Lattner <sabre@nondot.org>
Fri, 26 Jul 2002 21:12:44 +0000 (21:12 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 26 Jul 2002 21:12:44 +0000 (21:12 +0000)
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Remove getPassName implementations from various subclasses

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3112 91177308-0d34-0410-b5e6-96231b3b80d8

19 files changed:
include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
lib/Analysis/DataStructure/BottomUpClosure.cpp
lib/Analysis/DataStructure/DataStructure.cpp
lib/Analysis/IPA/CallGraph.cpp
lib/Analysis/IntervalPartition.cpp
lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
lib/Analysis/LoopInfo.cpp
lib/Analysis/PostDominators.cpp
lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
lib/Transforms/IPO/ConstantMerge.cpp
lib/Transforms/IPO/DeadTypeElimination.cpp
lib/Transforms/IPO/FunctionResolution.cpp
lib/Transforms/IPO/GlobalDCE.cpp
lib/Transforms/IPO/Internalize.cpp
lib/Transforms/IPO/OldPoolAllocate.cpp
lib/Transforms/IPO/SimpleStructMutation.cpp
lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
lib/VMCore/Dominators.cpp

index 042a4191b269ac9d5f7c3040893f31be60acf177..719c05ed2309174b0f8cee00c31a95958448ad67 100644 (file)
@@ -22,7 +22,6 @@ public:
   //
   BasicBlock *getExitNode() const { return ExitNode; }
 
-  virtual const char *getPassName() const { return "Unify Function Exit Nodes";}
   virtual bool runOnFunction(Function &F);
   virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addProvided(ID); }
 };
index f7a6332e78c7637f00f6fccaffc50920008075aa..62206d9b0e9fe65b05672ae79947e3474ac89a56 100644 (file)
@@ -13,6 +13,8 @@
 #include "Support/StatisticReporter.h"
 using std::map;
 
+static RegisterAnalysis<BUDataStructures>
+X("budatastructure", "Bottom-Up Data Structure Analysis Closure");
 AnalysisID BUDataStructures::ID(AnalysisID::create<BUDataStructures>());
 
 // releaseMemory - If the pass pipeline is done with this pass, we can release
index befbd55040c300ddcfcf8ce0fe443077497660c9..f573a0be1a639e05d30caf1d6aee9b81b34d47c5 100644 (file)
@@ -15,6 +15,8 @@
 
 using std::vector;
 
+static RegisterAnalysis<LocalDataStructures>
+X("datastructure", "Local Data Structure Analysis");
 AnalysisID LocalDataStructures::ID(AnalysisID::create<LocalDataStructures>());
 
 //===----------------------------------------------------------------------===//
index 0e3722a86e3128fa9a602facd585c7f7499e7cae..dfb5de68de0ccf0f4831895fc8349339dc56a543 100644 (file)
 
 #include "llvm/Analysis/CallGraph.h"
 #include "llvm/Module.h"
-#include "llvm/Function.h"
-#include "llvm/BasicBlock.h"
 #include "llvm/iOther.h"
 #include "llvm/iTerminators.h"
 #include "Support/STLExtras.h"
 #include <algorithm>
-#include <iostream>
+
+static RegisterAnalysis<CallGraph> X("callgraph", "Call Graph Construction");
 
 AnalysisID CallGraph::ID(AnalysisID::create<CallGraph>());
 
index 8d0e34c1a73f5249fe14d40453faf91db75dd57a..5e6bf9ca4da127bd07e4e1f07fcf8053ca855d7d 100644 (file)
@@ -10,6 +10,9 @@
 
 using std::make_pair;
 
+static RegisterAnalysis<IntervalPartition>
+X("intervals", "Interval Partition Construction");
+
 AnalysisID IntervalPartition::ID(AnalysisID::create<IntervalPartition>(), true);
 
 //===----------------------------------------------------------------------===//
index b080ec2f3e2db69955ccf48e916dc9aab26dcc41..e730f49e692d3121711f0fe46002eb3108bb5dec 100644 (file)
@@ -15,6 +15,8 @@
 #include "Support/CommandLine.h"
 #include <iostream>
 
+static RegisterAnalysis<FunctionLiveVarInfo>
+X("livevar", "Live Variable Analysis");
 AnalysisID FunctionLiveVarInfo::ID(AnalysisID::create<FunctionLiveVarInfo>());
 
 LiveVarDebugLevel_t DEBUG_LV;
index 2559912c0eb48a17815cfed91f440a0383837357..c53cc9038c90186fa03de2b9bf7c99a50d56e54b 100644 (file)
@@ -13,6 +13,8 @@
 #include "Support/DepthFirstIterator.h"
 #include <algorithm>
 
+static RegisterAnalysis<LoopInfo>
+X("loops", "Natural Loop Construction");
 AnalysisID LoopInfo::ID(AnalysisID::create<LoopInfo>(), true);
 
 //===----------------------------------------------------------------------===//
index 777b3c4a9f0fa474882618b9b5e1a0670db13a8a..9b35d16b9047fc01938a36b23bd36992cc001fed 100644 (file)
@@ -18,6 +18,11 @@ using std::set;
 //  DominatorSet Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominatorSet>
+A("domset", "Dominator Set Construction");
+static RegisterAnalysis<PostDominatorSet>
+B("postdomset", "Post-Dominator Set Construction");
+
 AnalysisID DominatorSet::ID(AnalysisID::create<DominatorSet>(), true);
 AnalysisID PostDominatorSet::ID(AnalysisID::create<PostDominatorSet>(), true);
 
@@ -151,6 +156,11 @@ void PostDominatorSet::getAnalysisUsage(AnalysisUsage &AU) const {
 //  ImmediateDominators Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<ImmediateDominators>
+C("idom", "Immediate Dominators Construction");
+static RegisterAnalysis<ImmediatePostDominators>
+D("postidom", "Immediate Post-Dominators Construction");
+
 AnalysisID ImmediateDominators::ID(AnalysisID::create<ImmediateDominators>(), true);
 AnalysisID ImmediatePostDominators::ID(AnalysisID::create<ImmediatePostDominators>(), true);
 
@@ -195,6 +205,11 @@ void ImmediateDominatorsBase::calcIDoms(const DominatorSetBase &DS) {
 //  DominatorTree Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominatorTree>
+E("domtree", "Dominator Tree Construction");
+static RegisterAnalysis<PostDominatorTree>
+F("postdomtree", "Post-Dominator Tree Construction");
+
 AnalysisID DominatorTree::ID(AnalysisID::create<DominatorTree>(), true);
 AnalysisID PostDominatorTree::ID(AnalysisID::create<PostDominatorTree>(), true);
 
@@ -307,6 +322,11 @@ void PostDominatorTree::calculate(const PostDominatorSet &DS) {
 //  DominanceFrontier Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominanceFrontier>
+G("domfrontier", "Dominance Frontier Construction");
+static RegisterAnalysis<PostDominanceFrontier>
+H("postdomfrontier", "Post-Dominance Frontier Construction");
+
 AnalysisID DominanceFrontier::ID(AnalysisID::create<DominanceFrontier>(), true);
 AnalysisID PostDominanceFrontier::ID(AnalysisID::create<PostDominanceFrontier>(), true);
 
index b080ec2f3e2db69955ccf48e916dc9aab26dcc41..e730f49e692d3121711f0fe46002eb3108bb5dec 100644 (file)
@@ -15,6 +15,8 @@
 #include "Support/CommandLine.h"
 #include <iostream>
 
+static RegisterAnalysis<FunctionLiveVarInfo>
+X("livevar", "Live Variable Analysis");
 AnalysisID FunctionLiveVarInfo::ID(AnalysisID::create<FunctionLiveVarInfo>());
 
 LiveVarDebugLevel_t DEBUG_LV;
index 905c7a52eb9e3baea3d060f7bc3300477d72a504..b979104401c8bb04be1b2242a10f42e1ae5f106e 100644 (file)
@@ -31,8 +31,8 @@ namespace {
     }
   };
 
-Statistic<> NumMerged("constmerge\t\t- Number of global constants merged");
-RegisterPass<ConstantMerge> X("constmerge", "Merge Duplicate Global Constants");
+  Statistic<> NumMerged("constmerge\t\t- Number of global constants merged");
+  RegisterOpt<ConstantMerge> X("constmerge","Merge Duplicate Global Constants");
 }
 
 Pass *createConstantMergePass() { return new ConstantMerge(); }
index f276ca7c0005a5f582ca53847c6a03a2d1e72b5f..3473f526dcd84d36d8acf0bfa5fdbf24cfbabab4 100644 (file)
@@ -30,7 +30,7 @@ namespace {
       AU.addRequired(FindUsedTypes::ID);
     }
   };
-  RegisterPass<DTE> X("deadtypeelim", "Dead Type Elimination");
+  RegisterOpt<DTE> X("deadtypeelim", "Dead Type Elimination");
   Statistic<> NumKilled("deadtypeelim\t- Number of unused typenames removed from symtab");
 }
 
index 0d05611c9467a53f5415701975b7059dc7d8eb01..44f8485121188b2df1b76cdc5a9e1f2cf7c9f6de 100644 (file)
@@ -32,7 +32,7 @@ namespace {
   struct FunctionResolvingPass : public Pass {
     bool run(Module &M);
   };
-  RegisterPass<FunctionResolvingPass> X("funcresolve", "Resolve Functions");
+  RegisterOpt<FunctionResolvingPass> X("funcresolve", "Resolve Functions");
 }
 
 Pass *createFunctionResolvingPass() {
index a61b1ab592e104c1a3549d79ff2697ee618dc182..029456ef5e6f2da75b9cb30eba7ecddb98e0fcbb 100644 (file)
@@ -86,7 +86,7 @@ namespace {
       AU.addRequired(CallGraph::ID);
     }
   };
-  RegisterPass<GlobalDCE> X("globaldce", "Dead Global Elimination");
+  RegisterOpt<GlobalDCE> X("globaldce", "Dead Global Elimination");
 }
 
 Pass *createGlobalDCEPass() { return new GlobalDCE(); }
index b6a48b4e22d6a819587b4b3a515034174db3745a..7ea7a6fff848a353b816449bf77141315f2694df 100644 (file)
@@ -41,7 +41,7 @@ class InternalizePass : public Pass {
   }
 };
 
-RegisterPass<InternalizePass> X("internalize", "Internalize Functions");
+  RegisterOpt<InternalizePass> X("internalize", "Internalize Functions");
 } // end anonymous namespace
 
 Pass *createInternalizePass() {
index c22d53ef91767e8a0547fc9e3069921d238f3903..43fd162d8e61f6fa56728d4e561de64edc7005d0 100644 (file)
@@ -315,8 +315,8 @@ namespace {
 
   };
 
-  RegisterPass<PoolAllocate> X("poolalloc",
-                               "Pool allocate disjoint datastructures");
+  RegisterOpt<PoolAllocate> X("poolalloc",
+                              "Pool allocate disjoint datastructures");
 }
 
 // isNotPoolableAlloc - This is a predicate that returns true if the specified
index 464d628e10bb5439118cdb8ebc99193d1caf14c8..59871556aca3e594c5c797b7368cbe63f875f4c7 100644 (file)
@@ -189,10 +189,10 @@ Pass *createSortElementsPass(const TargetData &TD) {
 }
 
 namespace {
-  RegisterPass<SwapStructElements> X("swapstructs",
-                                     "Swap structure types around",
-                                     createSwapElementsPass);
-  RegisterPass<SortStructElements> Y("sortstructs",
-                                     "Sort structure elements by size",
-                                     createSortElementsPass);
+  RegisterOpt<SwapStructElements> X("swapstructs",
+                                    "Swap structure types around",
+                                    createSwapElementsPass);
+  RegisterOpt<SortStructElements> Y("sortstructs",
+                                    "Sort structure elements by size",
+                                    createSortElementsPass);
 }
index 95cd5bea9a90a182454b87b7205930ee8bd80148..98430f9c7a11d0ecc3f7d4acfc0088802cc3bfce 100644 (file)
@@ -47,7 +47,7 @@ struct ProfilePaths : public FunctionPass {
   }
 };
 
-static RegisterPass<ProfilePaths> X("paths", "Profile Paths");
+static RegisterOpt<ProfilePaths> X("paths", "Profile Paths");
 
 // createProfilePathsPass - Create a new pass to add path profiling
 //
index ef7d63e7cdbf14437e7fa71fdbbc320871310dd6..d3e20ac8353e26908c1dd17a4dfe9e13246dc57c 100644 (file)
@@ -17,7 +17,7 @@ using std::vector;
 
 AnalysisID UnifyFunctionExitNodes::ID(AnalysisID::create<UnifyFunctionExitNodes>());
 
-static RegisterPass<UnifyFunctionExitNodes>
+static RegisterOpt<UnifyFunctionExitNodes>
 X("mergereturn", "Unify function exit nodes");
 
 // UnifyAllExitNodes - Unify all exit nodes of the CFG by creating a new
index 777b3c4a9f0fa474882618b9b5e1a0670db13a8a..9b35d16b9047fc01938a36b23bd36992cc001fed 100644 (file)
@@ -18,6 +18,11 @@ using std::set;
 //  DominatorSet Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominatorSet>
+A("domset", "Dominator Set Construction");
+static RegisterAnalysis<PostDominatorSet>
+B("postdomset", "Post-Dominator Set Construction");
+
 AnalysisID DominatorSet::ID(AnalysisID::create<DominatorSet>(), true);
 AnalysisID PostDominatorSet::ID(AnalysisID::create<PostDominatorSet>(), true);
 
@@ -151,6 +156,11 @@ void PostDominatorSet::getAnalysisUsage(AnalysisUsage &AU) const {
 //  ImmediateDominators Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<ImmediateDominators>
+C("idom", "Immediate Dominators Construction");
+static RegisterAnalysis<ImmediatePostDominators>
+D("postidom", "Immediate Post-Dominators Construction");
+
 AnalysisID ImmediateDominators::ID(AnalysisID::create<ImmediateDominators>(), true);
 AnalysisID ImmediatePostDominators::ID(AnalysisID::create<ImmediatePostDominators>(), true);
 
@@ -195,6 +205,11 @@ void ImmediateDominatorsBase::calcIDoms(const DominatorSetBase &DS) {
 //  DominatorTree Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominatorTree>
+E("domtree", "Dominator Tree Construction");
+static RegisterAnalysis<PostDominatorTree>
+F("postdomtree", "Post-Dominator Tree Construction");
+
 AnalysisID DominatorTree::ID(AnalysisID::create<DominatorTree>(), true);
 AnalysisID PostDominatorTree::ID(AnalysisID::create<PostDominatorTree>(), true);
 
@@ -307,6 +322,11 @@ void PostDominatorTree::calculate(const PostDominatorSet &DS) {
 //  DominanceFrontier Implementation
 //===----------------------------------------------------------------------===//
 
+static RegisterAnalysis<DominanceFrontier>
+G("domfrontier", "Dominance Frontier Construction");
+static RegisterAnalysis<PostDominanceFrontier>
+H("postdomfrontier", "Post-Dominance Frontier Construction");
+
 AnalysisID DominanceFrontier::ID(AnalysisID::create<DominanceFrontier>(), true);
 AnalysisID PostDominanceFrontier::ID(AnalysisID::create<PostDominanceFrontier>(), true);