Browse Source

Begin adding static dependence information to passes, which will allow us to
perform initialization without static constructors AND without explicit initialization
by the client. For the moment, passes are required to initialize both their
(potential) dependencies and any passes they preserve. I hope to be able to relax
the latter requirement in the future.


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

Owen Anderson 15 năm trước cách đây
mục cha
commit
2ab36d3502
61 tập tin đã thay đổi với 383 bổ sung64 xóa
  1. 37 1
      include/llvm/PassSupport.h
  2. 4 1
      lib/Analysis/AliasAnalysisEvaluator.cpp
  3. 4 1
      lib/Analysis/AliasSetTracker.cpp
  4. 5 1
      lib/Analysis/IPA/GlobalsModRef.cpp
  5. 7 1
      lib/Analysis/IVUsers.cpp
  6. 6 1
      lib/Analysis/Lint.cpp
  7. 5 1
      lib/Analysis/LiveValues.cpp
  8. 5 1
      lib/Analysis/LoopDependenceAnalysis.cpp
  9. 3 1
      lib/Analysis/LoopInfo.cpp
  10. 5 2
      lib/Analysis/MemDepPrinter.cpp
  11. 4 1
      lib/Analysis/MemoryDependenceAnalysis.cpp
  12. 4 1
      lib/Analysis/PostDominators.cpp
  13. 4 1
      lib/Analysis/ProfileEstimatorPass.cpp
  14. 4 1
      lib/Analysis/ProfileVerifierPass.cpp
  15. 6 1
      lib/Analysis/RegionInfo.cpp
  16. 5 1
      lib/Analysis/ScalarEvolution.cpp
  17. 4 1
      lib/Analysis/ScalarEvolutionAliasAnalysis.cpp
  18. 5 1
      lib/CodeGen/CalcSpillWeights.cpp
  19. 3 1
      lib/CodeGen/IfConversion.cpp
  20. 10 1
      lib/CodeGen/LiveIntervalAnalysis.cpp
  21. 4 1
      lib/CodeGen/LiveVariables.cpp
  22. 5 1
      lib/CodeGen/MachineCSE.cpp
  23. 6 1
      lib/CodeGen/MachineLICM.cpp
  24. 4 1
      lib/CodeGen/MachineLoopInfo.cpp
  25. 6 1
      lib/CodeGen/MachineSink.cpp
  26. 4 1
      lib/CodeGen/PeepholeOptimizer.cpp
  27. 10 1
      lib/CodeGen/PreAllocSplitting.cpp
  28. 4 1
      lib/CodeGen/ProcessImplicitDefs.cpp
  29. 5 1
      lib/CodeGen/PrologEpilogInserter.cpp
  30. 11 1
      lib/CodeGen/RegAllocLinearScan.cpp
  31. 6 1
      lib/CodeGen/RenderMachineFunction.cpp
  32. 11 1
      lib/CodeGen/SimpleRegisterCoalescing.cpp
  33. 7 1
      lib/CodeGen/Splitter.cpp
  34. 7 1
      lib/CodeGen/StackSlotColoring.cpp
  35. 6 1
      lib/CodeGen/StrongPHIElimination.cpp
  36. 4 1
      lib/CodeGen/TwoAddressInstructionPass.cpp
  37. 4 1
      lib/Transforms/IPO/ArgumentPromotion.cpp
  38. 4 1
      lib/Transforms/IPO/DeadTypeElimination.cpp
  39. 6 1
      lib/Transforms/IPO/LoopExtractor.cpp
  40. 6 1
      lib/Transforms/Instrumentation/OptimalEdgeProfiling.cpp
  41. 4 1
      lib/Transforms/Scalar/BasicBlockPlacement.cpp
  42. 4 1
      lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
  43. 5 1
      lib/Transforms/Scalar/DeadStoreElimination.cpp
  44. 5 1
      lib/Transforms/Scalar/GVN.cpp
  45. 9 1
      lib/Transforms/Scalar/IndVarSimplify.cpp
  46. 4 1
      lib/Transforms/Scalar/JumpThreading.cpp
  47. 7 1
      lib/Transforms/Scalar/LICM.cpp
  48. 9 1
      lib/Transforms/Scalar/LoopDeletion.cpp
  49. 8 1
      lib/Transforms/Scalar/LoopRotation.cpp
  50. 9 1
      lib/Transforms/Scalar/LoopStrengthReduce.cpp
  51. 7 1
      lib/Transforms/Scalar/LoopUnrollPass.cpp
  52. 8 1
      lib/Transforms/Scalar/LoopUnswitch.cpp
  53. 7 2
      lib/Transforms/Scalar/MemCpyOptimizer.cpp
  54. 4 2
      lib/Transforms/Scalar/Reg2Mem.cpp
  55. 5 1
      lib/Transforms/Scalar/ScalarReplAggregates.cpp
  56. 5 1
      lib/Transforms/Scalar/Sink.cpp
  57. 7 1
      lib/Transforms/Utils/LCSSA.cpp
  58. 10 1
      lib/Transforms/Utils/LoopSimplify.cpp
  59. 8 1
      lib/Transforms/Utils/Mem2Reg.cpp
  60. 4 1
      lib/VMCore/Dominators.cpp
  61. 4 1
      lib/VMCore/Verifier.cpp

+ 37 - 1
include/llvm/PassSupport.h

@@ -130,12 +130,32 @@ private:
 
 
 #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
 #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
   void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
   void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    static bool initialized = false; \
+    if (initialized) return; \
+    initialized = true; \
+    PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI); \
+  } \
+  static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis);
+
+#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis) \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    static bool initialized = false; \
+    if (initialized) return; \
+    initialized = true;
+
+#define INITIALIZE_PASS_DEPENDENCY(depName) \
+    initialize##depName##Pass(Registry);
+#define INITIALIZE_AG_DEPENDENCY(depName) \
+    initialize##depName##AnalysisGroup(Registry);
+
+#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \
     PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
     PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
       PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
       PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
     Registry.registerPass(*PI); \
     Registry.registerPass(*PI); \
   } \
   } \
   static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis);
   static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis);
-    
 
 
 template<typename PassName>
 template<typename PassName>
 Pass *callDefaultCtor() { return new PassName(); }
 Pass *callDefaultCtor() { return new PassName(); }
@@ -220,6 +240,7 @@ struct RegisterAnalysisGroup : public RegisterAGBase {
 
 
 #define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \
 #define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \
   void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
   void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    initialize##agName##AnalysisGroup(Registry); \
     PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
     PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
       PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
       PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
     Registry.registerPass(*PI); \
     Registry.registerPass(*PI); \
@@ -230,6 +251,21 @@ struct RegisterAnalysisGroup : public RegisterAGBase {
   static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis); \
   static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis); \
   static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info);
   static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info);
 
 
+#define INITIALIZE_AG_PASS_BEGIN(passName, agName, arg, n, cfg, analysis, def) \
+  void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
+    initialize##agName##AnalysisGroup(Registry);
+
+#define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \
+    PassInfo *PI = new PassInfo(n, arg, & passName ::ID, \
+      PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
+    Registry.registerPass(*PI); \
+    \
+    PassInfo *AI = new PassInfo(n, & agName :: ID); \
+    Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, *AI, def); \
+  } \
+  static RegisterPass<passName> passName ## _info(arg, n, cfg, analysis); \
+  static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info);
+
 //===---------------------------------------------------------------------------
 //===---------------------------------------------------------------------------
 /// PassRegistrationListener class - This class is meant to be derived from by
 /// PassRegistrationListener class - This class is meant to be derived from by
 /// clients that are interested in which passes get registered and unregistered
 /// clients that are interested in which passes get registered and unregistered

+ 4 - 1
lib/Analysis/AliasAnalysisEvaluator.cpp

@@ -74,7 +74,10 @@ namespace {
 }
 }
 
 
 char AAEval::ID = 0;
 char AAEval::ID = 0;
-INITIALIZE_PASS(AAEval, "aa-eval",
+INITIALIZE_PASS_BEGIN(AAEval, "aa-eval",
+                "Exhaustive Alias Analysis Precision Evaluator", false, true)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(AAEval, "aa-eval",
                 "Exhaustive Alias Analysis Precision Evaluator", false, true)
                 "Exhaustive Alias Analysis Precision Evaluator", false, true)
 
 
 FunctionPass *llvm::createAAEvalPass() { return new AAEval(); }
 FunctionPass *llvm::createAAEvalPass() { return new AAEval(); }

+ 4 - 1
lib/Analysis/AliasSetTracker.cpp

@@ -607,5 +607,8 @@ namespace {
 }
 }
 
 
 char AliasSetPrinter::ID = 0;
 char AliasSetPrinter::ID = 0;
-INITIALIZE_PASS(AliasSetPrinter, "print-alias-sets",
+INITIALIZE_PASS_BEGIN(AliasSetPrinter, "print-alias-sets",
+                "Alias Set Printer", false, true)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(AliasSetPrinter, "print-alias-sets",
                 "Alias Set Printer", false, true)
                 "Alias Set Printer", false, true)

+ 5 - 1
lib/Analysis/IPA/GlobalsModRef.cpp

@@ -176,7 +176,11 @@ namespace {
 }
 }
 
 
 char GlobalsModRef::ID = 0;
 char GlobalsModRef::ID = 0;
-INITIALIZE_AG_PASS(GlobalsModRef, AliasAnalysis,
+INITIALIZE_AG_PASS_BEGIN(GlobalsModRef, AliasAnalysis,
+                "globalsmodref-aa", "Simple mod/ref analysis for globals",    
+                false, true, false)
+INITIALIZE_AG_DEPENDENCY(CallGraph)
+INITIALIZE_AG_PASS_END(GlobalsModRef, AliasAnalysis,
                 "globalsmodref-aa", "Simple mod/ref analysis for globals",    
                 "globalsmodref-aa", "Simple mod/ref analysis for globals",    
                 false, true, false)
                 false, true, false)
 
 

+ 7 - 1
lib/Analysis/IVUsers.cpp

@@ -28,7 +28,13 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char IVUsers::ID = 0;
 char IVUsers::ID = 0;
-INITIALIZE_PASS(IVUsers, "iv-users", "Induction Variable Users", false, true)
+INITIALIZE_PASS_BEGIN(IVUsers, "iv-users",
+                      "Induction Variable Users", false, true)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_END(IVUsers, "iv-users",
+                      "Induction Variable Users", false, true)
 
 
 Pass *llvm::createIVUsersPass() {
 Pass *llvm::createIVUsersPass() {
   return new IVUsers();
   return new IVUsers();

+ 6 - 1
lib/Analysis/Lint.cpp

@@ -145,7 +145,12 @@ namespace {
 }
 }
 
 
 char Lint::ID = 0;
 char Lint::ID = 0;
-INITIALIZE_PASS(Lint, "lint", "Statically lint-checks LLVM IR", false, true)
+INITIALIZE_PASS_BEGIN(Lint, "lint", "Statically lint-checks LLVM IR",
+                      false, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(Lint, "lint", "Statically lint-checks LLVM IR",
+                    false, true)
 
 
 // Assert - We know that cond should be true, if not print an error message.
 // Assert - We know that cond should be true, if not print an error message.
 #define Assert(C, M) \
 #define Assert(C, M) \

+ 5 - 1
lib/Analysis/LiveValues.cpp

@@ -22,7 +22,11 @@ namespace llvm {
 }
 }
 
 
 char LiveValues::ID = 0;
 char LiveValues::ID = 0;
-INITIALIZE_PASS(LiveValues, "live-values",
+INITIALIZE_PASS_BEGIN(LiveValues, "live-values",
+                "Value Liveness Analysis", false, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_END(LiveValues, "live-values",
                 "Value Liveness Analysis", false, true)
                 "Value Liveness Analysis", false, true)
 
 
 LiveValues::LiveValues() : FunctionPass(ID) {}
 LiveValues::LiveValues() : FunctionPass(ID) {}

+ 5 - 1
lib/Analysis/LoopDependenceAnalysis.cpp

@@ -46,7 +46,11 @@ LoopPass *llvm::createLoopDependenceAnalysisPass() {
   return new LoopDependenceAnalysis();
   return new LoopDependenceAnalysis();
 }
 }
 
 
-INITIALIZE_PASS(LoopDependenceAnalysis, "lda",
+INITIALIZE_PASS_BEGIN(LoopDependenceAnalysis, "lda",
+                "Loop Dependence Analysis", false, true)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(LoopDependenceAnalysis, "lda",
                 "Loop Dependence Analysis", false, true)
                 "Loop Dependence Analysis", false, true)
 char LoopDependenceAnalysis::ID = 0;
 char LoopDependenceAnalysis::ID = 0;
 
 

+ 3 - 1
lib/Analysis/LoopInfo.cpp

@@ -38,7 +38,9 @@ VerifyLoopInfoX("verify-loop-info", cl::location(VerifyLoopInfo),
                 cl::desc("Verify loop info (time consuming)"));
                 cl::desc("Verify loop info (time consuming)"));
 
 
 char LoopInfo::ID = 0;
 char LoopInfo::ID = 0;
-INITIALIZE_PASS(LoopInfo, "loops", "Natural Loop Information", true, true)
+INITIALIZE_PASS_BEGIN(LoopInfo, "loops", "Natural Loop Information", true, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(LoopInfo, "loops", "Natural Loop Information", true, true)
 
 
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 // Loop implementation
 // Loop implementation

+ 5 - 2
lib/Analysis/MemDepPrinter.cpp

@@ -50,8 +50,11 @@ namespace {
 }
 }
 
 
 char MemDepPrinter::ID = 0;
 char MemDepPrinter::ID = 0;
-INITIALIZE_PASS(MemDepPrinter, "print-memdeps", "Print MemDeps of function", 
-                false, true)
+INITIALIZE_PASS_BEGIN(MemDepPrinter, "print-memdeps",
+                      "Print MemDeps of function", false, true)
+INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
+INITIALIZE_PASS_END(MemDepPrinter, "print-memdeps",
+                      "Print MemDeps of function", false, true)
 
 
 FunctionPass *llvm::createMemDepPrinter() {
 FunctionPass *llvm::createMemDepPrinter() {
   return new MemDepPrinter();
   return new MemDepPrinter();

+ 4 - 1
lib/Analysis/MemoryDependenceAnalysis.cpp

@@ -47,8 +47,11 @@ STATISTIC(NumCacheCompleteNonLocalPtr,
 char MemoryDependenceAnalysis::ID = 0;
 char MemoryDependenceAnalysis::ID = 0;
   
   
 // Register this pass...
 // Register this pass...
-INITIALIZE_PASS(MemoryDependenceAnalysis, "memdep",
+INITIALIZE_PASS_BEGIN(MemoryDependenceAnalysis, "memdep",
                 "Memory Dependence Analysis", false, true)
                 "Memory Dependence Analysis", false, true)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(MemoryDependenceAnalysis, "memdep",
+                      "Memory Dependence Analysis", false, true)
 
 
 MemoryDependenceAnalysis::MemoryDependenceAnalysis()
 MemoryDependenceAnalysis::MemoryDependenceAnalysis()
 : FunctionPass(ID), PredCache(0) {
 : FunctionPass(ID), PredCache(0) {

+ 4 - 1
lib/Analysis/PostDominators.cpp

@@ -53,7 +53,10 @@ FunctionPass* llvm::createPostDomTree() {
 //  PostDominanceFrontier Implementation
 //  PostDominanceFrontier Implementation
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
-INITIALIZE_PASS(PostDominanceFrontier, "postdomfrontier",
+INITIALIZE_PASS_BEGIN(PostDominanceFrontier, "postdomfrontier",
+                "Post-Dominance Frontier Construction", true, true)
+INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
+INITIALIZE_PASS_END(PostDominanceFrontier, "postdomfrontier",
                 "Post-Dominance Frontier Construction", true, true)
                 "Post-Dominance Frontier Construction", true, true)
 
 
 const DominanceFrontier::DomSetType &
 const DominanceFrontier::DomSetType &

+ 4 - 1
lib/Analysis/ProfileEstimatorPass.cpp

@@ -72,7 +72,10 @@ namespace {
 }  // End of anonymous namespace
 }  // End of anonymous namespace
 
 
 char ProfileEstimatorPass::ID = 0;
 char ProfileEstimatorPass::ID = 0;
-INITIALIZE_AG_PASS(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
+INITIALIZE_AG_PASS_BEGIN(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
+                "Estimate profiling information", false, true, false)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_AG_PASS_END(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
                 "Estimate profiling information", false, true, false)
                 "Estimate profiling information", false, true, false)
 
 
 namespace llvm {
 namespace llvm {

+ 4 - 1
lib/Analysis/ProfileVerifierPass.cpp

@@ -366,7 +366,10 @@ namespace llvm {
   char ProfileVerifierPassT<FType, BType>::ID = 0;
   char ProfileVerifierPassT<FType, BType>::ID = 0;
 }
 }
 
 
-INITIALIZE_PASS(ProfileVerifierPass, "profile-verifier",
+INITIALIZE_PASS_BEGIN(ProfileVerifierPass, "profile-verifier",
+                "Verify profiling information", false, true)
+INITIALIZE_AG_DEPENDENCY(ProfileInfo)
+INITIALIZE_PASS_END(ProfileVerifierPass, "profile-verifier",
                 "Verify profiling information", false, true)
                 "Verify profiling information", false, true)
 
 
 namespace llvm {
 namespace llvm {

+ 6 - 1
lib/Analysis/RegionInfo.cpp

@@ -734,7 +734,12 @@ RegionInfo::getCommonRegion(SmallVectorImpl<BasicBlock*> &BBs) const {
 }
 }
 
 
 char RegionInfo::ID = 0;
 char RegionInfo::ID = 0;
-INITIALIZE_PASS(RegionInfo, "regions",
+INITIALIZE_PASS_BEGIN(RegionInfo, "regions",
+                "Detect single entry single exit regions", true, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_END(RegionInfo, "regions",
                 "Detect single entry single exit regions", true, true)
                 "Detect single entry single exit regions", true, true)
 
 
 // Create methods available outside of this file, to use them
 // Create methods available outside of this file, to use them

+ 5 - 1
lib/Analysis/ScalarEvolution.cpp

@@ -103,7 +103,11 @@ MaxBruteForceIterations("scalar-evolution-max-iterations", cl::ReallyHidden,
                                  "derived loop"),
                                  "derived loop"),
                         cl::init(100));
                         cl::init(100));
 
 
-INITIALIZE_PASS(ScalarEvolution, "scalar-evolution",
+INITIALIZE_PASS_BEGIN(ScalarEvolution, "scalar-evolution",
+                "Scalar Evolution Analysis", false, true)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(ScalarEvolution, "scalar-evolution",
                 "Scalar Evolution Analysis", false, true)
                 "Scalar Evolution Analysis", false, true)
 char ScalarEvolution::ID = 0;
 char ScalarEvolution::ID = 0;
 
 

+ 4 - 1
lib/Analysis/ScalarEvolutionAliasAnalysis.cpp

@@ -57,8 +57,11 @@ namespace {
 
 
 // Register this pass...
 // Register this pass...
 char ScalarEvolutionAliasAnalysis::ID = 0;
 char ScalarEvolutionAliasAnalysis::ID = 0;
-INITIALIZE_AG_PASS(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
+INITIALIZE_AG_PASS_BEGIN(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
                    "ScalarEvolution-based Alias Analysis", false, true, false)
                    "ScalarEvolution-based Alias Analysis", false, true, false)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_AG_PASS_END(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
+                    "ScalarEvolution-based Alias Analysis", false, true, false)
 
 
 FunctionPass *llvm::createScalarEvolutionAliasAnalysisPass() {
 FunctionPass *llvm::createScalarEvolutionAliasAnalysisPass() {
   return new ScalarEvolutionAliasAnalysis();
   return new ScalarEvolutionAliasAnalysis();

+ 5 - 1
lib/CodeGen/CalcSpillWeights.cpp

@@ -25,7 +25,11 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char CalculateSpillWeights::ID = 0;
 char CalculateSpillWeights::ID = 0;
-INITIALIZE_PASS(CalculateSpillWeights, "calcspillweights",
+INITIALIZE_PASS_BEGIN(CalculateSpillWeights, "calcspillweights",
+                "Calculate spill weights", false, false)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_END(CalculateSpillWeights, "calcspillweights",
                 "Calculate spill weights", false, false)
                 "Calculate spill weights", false, false)
 
 
 void CalculateSpillWeights::getAnalysisUsage(AnalysisUsage &au) const {
 void CalculateSpillWeights::getAnalysisUsage(AnalysisUsage &au) const {

+ 3 - 1
lib/CodeGen/IfConversion.cpp

@@ -245,7 +245,9 @@ namespace {
   char IfConverter::ID = 0;
   char IfConverter::ID = 0;
 }
 }
 
 
-INITIALIZE_PASS(IfConverter, "if-converter", "If Converter", false, false)
+INITIALIZE_PASS_BEGIN(IfConverter, "if-converter", "If Converter", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_END(IfConverter, "if-converter", "If Converter", false, false)
 
 
 FunctionPass *llvm::createIfConverterPass() { return new IfConverter(); }
 FunctionPass *llvm::createIfConverterPass() { return new IfConverter(); }
 
 

+ 10 - 1
lib/CodeGen/LiveIntervalAnalysis.cpp

@@ -55,7 +55,16 @@ STATISTIC(numFolds     , "Number of loads/stores folded into instructions");
 STATISTIC(numSplits    , "Number of intervals split");
 STATISTIC(numSplits    , "Number of intervals split");
 
 
 char LiveIntervals::ID = 0;
 char LiveIntervals::ID = 0;
-INITIALIZE_PASS(LiveIntervals, "liveintervals",
+INITIALIZE_PASS_BEGIN(LiveIntervals, "liveintervals",
+                "Live Interval Analysis", false, false)
+INITIALIZE_PASS_DEPENDENCY(LiveVariables)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(PHIElimination)
+INITIALIZE_PASS_DEPENDENCY(TwoAddressInstructionPass)
+INITIALIZE_PASS_DEPENDENCY(ProcessImplicitDefs)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(LiveIntervals, "liveintervals",
                 "Live Interval Analysis", false, false)
                 "Live Interval Analysis", false, false)
 
 
 void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
 void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {

+ 4 - 1
lib/CodeGen/LiveVariables.cpp

@@ -42,7 +42,10 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char LiveVariables::ID = 0;
 char LiveVariables::ID = 0;
-INITIALIZE_PASS(LiveVariables, "livevars",
+INITIALIZE_PASS_BEGIN(LiveVariables, "livevars",
+                "Live Variable Analysis", false, false)
+INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
+INITIALIZE_PASS_END(LiveVariables, "livevars",
                 "Live Variable Analysis", false, false)
                 "Live Variable Analysis", false, false)
 
 
 
 

+ 5 - 1
lib/CodeGen/MachineCSE.cpp

@@ -91,7 +91,11 @@ namespace {
 } // end anonymous namespace
 } // end anonymous namespace
 
 
 char MachineCSE::ID = 0;
 char MachineCSE::ID = 0;
-INITIALIZE_PASS(MachineCSE, "machine-cse",
+INITIALIZE_PASS_BEGIN(MachineCSE, "machine-cse",
+                "Machine Common Subexpression Elimination", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(MachineCSE, "machine-cse",
                 "Machine Common Subexpression Elimination", false, false)
                 "Machine Common Subexpression Elimination", false, false)
 
 
 FunctionPass *llvm::createMachineCSEPass() { return new MachineCSE(); }
 FunctionPass *llvm::createMachineCSEPass() { return new MachineCSE(); }

+ 6 - 1
lib/CodeGen/MachineLICM.cpp

@@ -189,7 +189,12 @@ namespace {
 } // end anonymous namespace
 } // end anonymous namespace
 
 
 char MachineLICM::ID = 0;
 char MachineLICM::ID = 0;
-INITIALIZE_PASS(MachineLICM, "machinelicm",
+INITIALIZE_PASS_BEGIN(MachineLICM, "machinelicm",
+                "Machine Loop Invariant Code Motion", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(MachineLICM, "machinelicm",
                 "Machine Loop Invariant Code Motion", false, false)
                 "Machine Loop Invariant Code Motion", false, false)
 
 
 FunctionPass *llvm::createMachineLICMPass(bool PreRegAlloc) {
 FunctionPass *llvm::createMachineLICMPass(bool PreRegAlloc) {

+ 4 - 1
lib/CodeGen/MachineLoopInfo.cpp

@@ -30,7 +30,10 @@ TEMPLATE_INSTANTIATION(MLIB);
 }
 }
 
 
 char MachineLoopInfo::ID = 0;
 char MachineLoopInfo::ID = 0;
-INITIALIZE_PASS(MachineLoopInfo, "machine-loops",
+INITIALIZE_PASS_BEGIN(MachineLoopInfo, "machine-loops",
+                "Machine Natural Loop Construction", true, true)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_END(MachineLoopInfo, "machine-loops",
                 "Machine Natural Loop Construction", true, true)
                 "Machine Natural Loop Construction", true, true)
 
 
 char &llvm::MachineLoopInfoID = MachineLoopInfo::ID;
 char &llvm::MachineLoopInfoID = MachineLoopInfo::ID;

+ 6 - 1
lib/CodeGen/MachineSink.cpp

@@ -94,7 +94,12 @@ namespace {
 } // end anonymous namespace
 } // end anonymous namespace
 
 
 char MachineSinking::ID = 0;
 char MachineSinking::ID = 0;
-INITIALIZE_PASS(MachineSinking, "machine-sink",
+INITIALIZE_PASS_BEGIN(MachineSinking, "machine-sink",
+                "Machine code sinking", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(MachineSinking, "machine-sink",
                 "Machine code sinking", false, false)
                 "Machine code sinking", false, false)
 
 
 FunctionPass *llvm::createMachineSinkingPass() { return new MachineSinking(); }
 FunctionPass *llvm::createMachineSinkingPass() { return new MachineSinking(); }

+ 4 - 1
lib/CodeGen/PeepholeOptimizer.cpp

@@ -84,7 +84,10 @@ namespace {
 }
 }
 
 
 char PeepholeOptimizer::ID = 0;
 char PeepholeOptimizer::ID = 0;
-INITIALIZE_PASS(PeepholeOptimizer, "peephole-opts",
+INITIALIZE_PASS_BEGIN(PeepholeOptimizer, "peephole-opts",
+                "Peephole Optimizations", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_END(PeepholeOptimizer, "peephole-opts",
                 "Peephole Optimizations", false, false)
                 "Peephole Optimizations", false, false)
 
 
 FunctionPass *llvm::createPeepholeOptimizerPass() {
 FunctionPass *llvm::createPeepholeOptimizerPass() {

+ 10 - 1
lib/CodeGen/PreAllocSplitting.cpp

@@ -203,7 +203,16 @@ namespace {
 
 
 char PreAllocSplitting::ID = 0;
 char PreAllocSplitting::ID = 0;
 
 
-INITIALIZE_PASS(PreAllocSplitting, "pre-alloc-splitting",
+INITIALIZE_PASS_BEGIN(PreAllocSplitting, "pre-alloc-splitting",
+                "Pre-Register Allocation Live Interval Splitting",
+                false, false)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_DEPENDENCY(LiveStacks)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
+INITIALIZE_PASS_END(PreAllocSplitting, "pre-alloc-splitting",
                 "Pre-Register Allocation Live Interval Splitting",
                 "Pre-Register Allocation Live Interval Splitting",
                 false, false)
                 false, false)
 
 

+ 4 - 1
lib/CodeGen/ProcessImplicitDefs.cpp

@@ -26,7 +26,10 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char ProcessImplicitDefs::ID = 0;
 char ProcessImplicitDefs::ID = 0;
-INITIALIZE_PASS(ProcessImplicitDefs, "processimpdefs",
+INITIALIZE_PASS_BEGIN(ProcessImplicitDefs, "processimpdefs",
+                "Process Implicit Definitions.", false, false)
+INITIALIZE_PASS_DEPENDENCY(LiveVariables)
+INITIALIZE_PASS_END(ProcessImplicitDefs, "processimpdefs",
                 "Process Implicit Definitions.", false, false)
                 "Process Implicit Definitions.", false, false)
 
 
 void ProcessImplicitDefs::getAnalysisUsage(AnalysisUsage &AU) const {
 void ProcessImplicitDefs::getAnalysisUsage(AnalysisUsage &AU) const {

+ 5 - 1
lib/CodeGen/PrologEpilogInserter.cpp

@@ -44,7 +44,11 @@ using namespace llvm;
 
 
 char PEI::ID = 0;
 char PEI::ID = 0;
 
 
-INITIALIZE_PASS(PEI, "prologepilog",
+INITIALIZE_PASS_BEGIN(PEI, "prologepilog",
+                "Prologue/Epilogue Insertion", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_END(PEI, "prologepilog",
                 "Prologue/Epilogue Insertion", false, false)
                 "Prologue/Epilogue Insertion", false, false)
 
 
 STATISTIC(NumVirtualFrameRegs, "Number of virtual frame regs encountered");
 STATISTIC(NumVirtualFrameRegs, "Number of virtual frame regs encountered");

+ 11 - 1
lib/CodeGen/RegAllocLinearScan.cpp

@@ -370,7 +370,17 @@ namespace {
   char RALinScan::ID = 0;
   char RALinScan::ID = 0;
 }
 }
 
 
-INITIALIZE_PASS(RALinScan, "linearscan-regalloc",
+INITIALIZE_PASS_BEGIN(RALinScan, "linearscan-regalloc",
+                "Linear Scan Register Allocator", false, false)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination)
+INITIALIZE_PASS_DEPENDENCY(CalculateSpillWeights)
+INITIALIZE_PASS_DEPENDENCY(PreAllocSplitting)
+INITIALIZE_PASS_DEPENDENCY(LiveStacks)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
+INITIALIZE_AG_DEPENDENCY(RegisterCoalescer)
+INITIALIZE_PASS_END(RALinScan, "linearscan-regalloc",
                 "Linear Scan Register Allocator", false, false)
                 "Linear Scan Register Allocator", false, false)
 
 
 void RALinScan::ComputeRelatedRegClasses() {
 void RALinScan::ComputeRelatedRegClasses() {

+ 6 - 1
lib/CodeGen/RenderMachineFunction.cpp

@@ -30,7 +30,12 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char RenderMachineFunction::ID = 0;
 char RenderMachineFunction::ID = 0;
-INITIALIZE_PASS(RenderMachineFunction, "rendermf",
+INITIALIZE_PASS_BEGIN(RenderMachineFunction, "rendermf",
+                "Render machine functions (and related info) to HTML pages",
+                false, false)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_END(RenderMachineFunction, "rendermf",
                 "Render machine functions (and related info) to HTML pages",
                 "Render machine functions (and related info) to HTML pages",
                 false, false)
                 false, false)
 
 

+ 11 - 1
lib/CodeGen/SimpleRegisterCoalescing.cpp

@@ -64,7 +64,17 @@ DisablePhysicalJoin("disable-physical-join",
                cl::desc("Avoid coalescing physical register copies"),
                cl::desc("Avoid coalescing physical register copies"),
                cl::init(false), cl::Hidden);
                cl::init(false), cl::Hidden);
 
 
-INITIALIZE_AG_PASS(SimpleRegisterCoalescing, RegisterCoalescer,
+INITIALIZE_AG_PASS_BEGIN(SimpleRegisterCoalescing, RegisterCoalescer,
+                "simple-register-coalescing", "Simple Register Coalescing", 
+                false, false, true)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination)
+INITIALIZE_PASS_DEPENDENCY(PHIElimination)
+INITIALIZE_PASS_DEPENDENCY(TwoAddressInstructionPass)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_AG_PASS_END(SimpleRegisterCoalescing, RegisterCoalescer,
                 "simple-register-coalescing", "Simple Register Coalescing", 
                 "simple-register-coalescing", "Simple Register Coalescing", 
                 false, false, true)
                 false, false, true)
 
 

+ 7 - 1
lib/CodeGen/Splitter.cpp

@@ -29,7 +29,13 @@
 using namespace llvm;
 using namespace llvm;
 
 
 char LoopSplitter::ID = 0;
 char LoopSplitter::ID = 0;
-INITIALIZE_PASS(LoopSplitter, "loop-splitting",
+INITIALIZE_PASS_BEGIN(LoopSplitter, "loop-splitting",
+                "Split virtual regists across loop boundaries.", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_END(LoopSplitter, "loop-splitting",
                 "Split virtual regists across loop boundaries.", false, false)
                 "Split virtual regists across loop boundaries.", false, false)
 
 
 namespace llvm {
 namespace llvm {

+ 7 - 1
lib/CodeGen/StackSlotColoring.cpp

@@ -145,7 +145,13 @@ namespace {
 
 
 char StackSlotColoring::ID = 0;
 char StackSlotColoring::ID = 0;
 
 
-INITIALIZE_PASS(StackSlotColoring, "stack-slot-coloring",
+INITIALIZE_PASS_BEGIN(StackSlotColoring, "stack-slot-coloring",
+                "Stack Slot Coloring", false, false)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(LiveStacks)
+INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
+INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+INITIALIZE_PASS_END(StackSlotColoring, "stack-slot-coloring",
                 "Stack Slot Coloring", false, false)
                 "Stack Slot Coloring", false, false)
 
 
 FunctionPass *llvm::createStackSlotColoringPass(bool RegColor) {
 FunctionPass *llvm::createStackSlotColoringPass(bool RegColor) {

+ 6 - 1
lib/CodeGen/StrongPHIElimination.cpp

@@ -150,7 +150,12 @@ namespace {
 }
 }
 
 
 char StrongPHIElimination::ID = 0;
 char StrongPHIElimination::ID = 0;
-INITIALIZE_PASS(StrongPHIElimination, "strong-phi-node-elimination",
+INITIALIZE_PASS_BEGIN(StrongPHIElimination, "strong-phi-node-elimination",
+  "Eliminate PHI nodes for register allocation, intelligently", false, false)
+INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
+INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
+INITIALIZE_PASS_END(StrongPHIElimination, "strong-phi-node-elimination",
   "Eliminate PHI nodes for register allocation, intelligently", false, false)
   "Eliminate PHI nodes for register allocation, intelligently", false, false)
 
 
 char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;
 char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;

+ 4 - 1
lib/CodeGen/TwoAddressInstructionPass.cpp

@@ -159,7 +159,10 @@ namespace {
 }
 }
 
 
 char TwoAddressInstructionPass::ID = 0;
 char TwoAddressInstructionPass::ID = 0;
-INITIALIZE_PASS(TwoAddressInstructionPass, "twoaddressinstruction",
+INITIALIZE_PASS_BEGIN(TwoAddressInstructionPass, "twoaddressinstruction",
+                "Two-Address instruction pass", false, false)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(TwoAddressInstructionPass, "twoaddressinstruction",
                 "Two-Address instruction pass", false, false)
                 "Two-Address instruction pass", false, false)
 
 
 char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID;
 char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID;

+ 4 - 1
lib/Transforms/IPO/ArgumentPromotion.cpp

@@ -84,7 +84,10 @@ namespace {
 }
 }
 
 
 char ArgPromotion::ID = 0;
 char ArgPromotion::ID = 0;
-INITIALIZE_PASS(ArgPromotion, "argpromotion",
+INITIALIZE_PASS_BEGIN(ArgPromotion, "argpromotion",
+                "Promote 'by reference' arguments to scalars", false, false)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(ArgPromotion, "argpromotion",
                 "Promote 'by reference' arguments to scalars", false, false)
                 "Promote 'by reference' arguments to scalars", false, false)
 
 
 Pass *llvm::createArgumentPromotionPass(unsigned maxElements) {
 Pass *llvm::createArgumentPromotionPass(unsigned maxElements) {

+ 4 - 1
lib/Transforms/IPO/DeadTypeElimination.cpp

@@ -45,7 +45,10 @@ namespace {
 }
 }
 
 
 char DTE::ID = 0;
 char DTE::ID = 0;
-INITIALIZE_PASS(DTE, "deadtypeelim", "Dead Type Elimination", false, false)
+INITIALIZE_PASS_BEGIN(DTE, "deadtypeelim", "Dead Type Elimination",
+                      false, false)
+INITIALIZE_PASS_DEPENDENCY(FindUsedTypes)
+INITIALIZE_PASS_END(DTE, "deadtypeelim", "Dead Type Elimination", false, false)
 
 
 ModulePass *llvm::createDeadTypeEliminationPass() {
 ModulePass *llvm::createDeadTypeEliminationPass() {
   return new DTE();
   return new DTE();

+ 6 - 1
lib/Transforms/IPO/LoopExtractor.cpp

@@ -50,7 +50,12 @@ namespace {
 }
 }
 
 
 char LoopExtractor::ID = 0;
 char LoopExtractor::ID = 0;
-INITIALIZE_PASS(LoopExtractor, "loop-extract",
+INITIALIZE_PASS_BEGIN(LoopExtractor, "loop-extract",
+                "Extract loops into new functions", false, false)
+INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(LoopExtractor, "loop-extract",
                 "Extract loops into new functions", false, false)
                 "Extract loops into new functions", false, false)
 
 
 namespace {
 namespace {

+ 6 - 1
lib/Transforms/Instrumentation/OptimalEdgeProfiling.cpp

@@ -50,7 +50,12 @@ namespace {
 }
 }
 
 
 char OptimalEdgeProfiler::ID = 0;
 char OptimalEdgeProfiler::ID = 0;
-INITIALIZE_PASS(OptimalEdgeProfiler, "insert-optimal-edge-profiling", 
+INITIALIZE_PASS_BEGIN(OptimalEdgeProfiler, "insert-optimal-edge-profiling", 
+                "Insert optimal instrumentation for edge profiling",
+                false, false)
+INITIALIZE_PASS_DEPENDENCY(ProfileEstimatorPass)
+INITIALIZE_AG_DEPENDENCY(ProfileInfo)
+INITIALIZE_PASS_END(OptimalEdgeProfiler, "insert-optimal-edge-profiling", 
                 "Insert optimal instrumentation for edge profiling",
                 "Insert optimal instrumentation for edge profiling",
                 false, false)
                 false, false)
 
 

+ 4 - 1
lib/Transforms/Scalar/BasicBlockPlacement.cpp

@@ -74,7 +74,10 @@ namespace {
 }
 }
 
 
 char BlockPlacement::ID = 0;
 char BlockPlacement::ID = 0;
-INITIALIZE_PASS(BlockPlacement, "block-placement",
+INITIALIZE_PASS_BEGIN(BlockPlacement, "block-placement",
+                "Profile Guided Basic Block Placement", false, false)
+INITIALIZE_AG_DEPENDENCY(ProfileInfo)
+INITIALIZE_PASS_END(BlockPlacement, "block-placement",
                 "Profile Guided Basic Block Placement", false, false)
                 "Profile Guided Basic Block Placement", false, false)
 
 
 FunctionPass *llvm::createBlockPlacementPass() { return new BlockPlacement(); }
 FunctionPass *llvm::createBlockPlacementPass() { return new BlockPlacement(); }

+ 4 - 1
lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

@@ -50,7 +50,10 @@ namespace {
 }
 }
 
 
 char CorrelatedValuePropagation::ID = 0;
 char CorrelatedValuePropagation::ID = 0;
-INITIALIZE_PASS(CorrelatedValuePropagation, "correlated-propagation",
+INITIALIZE_PASS_BEGIN(CorrelatedValuePropagation, "correlated-propagation",
+                "Value Propagation", false, false)
+INITIALIZE_PASS_DEPENDENCY(LazyValueInfo)
+INITIALIZE_PASS_END(CorrelatedValuePropagation, "correlated-propagation",
                 "Value Propagation", false, false)
                 "Value Propagation", false, false)
 
 
 // Public interface to the Value Propagation pass
 // Public interface to the Value Propagation pass

+ 5 - 1
lib/Transforms/Scalar/DeadStoreElimination.cpp

@@ -82,7 +82,11 @@ namespace {
 }
 }
 
 
 char DSE::ID = 0;
 char DSE::ID = 0;
-INITIALIZE_PASS(DSE, "dse", "Dead Store Elimination", false, false)
+INITIALIZE_PASS_BEGIN(DSE, "dse", "Dead Store Elimination", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(DSE, "dse", "Dead Store Elimination", false, false)
 
 
 FunctionPass *llvm::createDeadStoreEliminationPass() { return new DSE(); }
 FunctionPass *llvm::createDeadStoreEliminationPass() { return new DSE(); }
 
 

+ 5 - 1
lib/Transforms/Scalar/GVN.cpp

@@ -713,7 +713,11 @@ FunctionPass *llvm::createGVNPass(bool NoLoads) {
   return new GVN(NoLoads);
   return new GVN(NoLoads);
 }
 }
 
 
-INITIALIZE_PASS(GVN, "gvn", "Global Value Numbering", false, false)
+INITIALIZE_PASS_BEGIN(GVN, "gvn", "Global Value Numbering", false, false)
+INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(GVN, "gvn", "Global Value Numbering", false, false)
 
 
 void GVN::dump(DenseMap<uint32_t, Value*>& d) {
 void GVN::dump(DenseMap<uint32_t, Value*>& d) {
   errs() << "{\n";
   errs() << "{\n";

+ 9 - 1
lib/Transforms/Scalar/IndVarSimplify.cpp

@@ -117,7 +117,15 @@ namespace {
 }
 }
 
 
 char IndVarSimplify::ID = 0;
 char IndVarSimplify::ID = 0;
-INITIALIZE_PASS(IndVarSimplify, "indvars",
+INITIALIZE_PASS_BEGIN(IndVarSimplify, "indvars",
+                "Canonicalize Induction Variables", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_PASS_DEPENDENCY(IVUsers)
+INITIALIZE_PASS_END(IndVarSimplify, "indvars",
                 "Canonicalize Induction Variables", false, false)
                 "Canonicalize Induction Variables", false, false)
 
 
 Pass *llvm::createIndVarSimplifyPass() {
 Pass *llvm::createIndVarSimplifyPass() {

+ 4 - 1
lib/Transforms/Scalar/JumpThreading.cpp

@@ -121,7 +121,10 @@ namespace {
 }
 }
 
 
 char JumpThreading::ID = 0;
 char JumpThreading::ID = 0;
-INITIALIZE_PASS(JumpThreading, "jump-threading",
+INITIALIZE_PASS_BEGIN(JumpThreading, "jump-threading",
+                "Jump Threading", false, false)
+INITIALIZE_PASS_DEPENDENCY(LazyValueInfo)
+INITIALIZE_PASS_END(JumpThreading, "jump-threading",
                 "Jump Threading", false, false)
                 "Jump Threading", false, false)
 
 
 // Public interface to the Jump Threading pass
 // Public interface to the Jump Threading pass

+ 7 - 1
lib/Transforms/Scalar/LICM.cpp

@@ -200,7 +200,13 @@ namespace {
 }
 }
 
 
 char LICM::ID = 0;
 char LICM::ID = 0;
-INITIALIZE_PASS(LICM, "licm", "Loop Invariant Code Motion", false, false)
+INITIALIZE_PASS_BEGIN(LICM, "licm", "Loop Invariant Code Motion", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(LICM, "licm", "Loop Invariant Code Motion", false, false)
 
 
 Pass *llvm::createLICMPass() { return new LICM(); }
 Pass *llvm::createLICMPass() { return new LICM(); }
 
 

+ 9 - 1
lib/Transforms/Scalar/LoopDeletion.cpp

@@ -55,7 +55,15 @@ namespace {
 }
 }
   
   
 char LoopDeletion::ID = 0;
 char LoopDeletion::ID = 0;
-INITIALIZE_PASS(LoopDeletion, "loop-deletion",
+INITIALIZE_PASS_BEGIN(LoopDeletion, "loop-deletion",
+                "Delete dead loops", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_END(LoopDeletion, "loop-deletion",
                 "Delete dead loops", false, false)
                 "Delete dead loops", false, false)
 
 
 Pass* llvm::createLoopDeletionPass() {
 Pass* llvm::createLoopDeletionPass() {

+ 8 - 1
lib/Transforms/Scalar/LoopRotation.cpp

@@ -79,7 +79,14 @@ namespace {
 }
 }
   
   
 char LoopRotate::ID = 0;
 char LoopRotate::ID = 0;
-INITIALIZE_PASS(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
+INITIALIZE_PASS_BEGIN(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_END(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
 
 
 Pass *llvm::createLoopRotatePass() { return new LoopRotate(); }
 Pass *llvm::createLoopRotatePass() { return new LoopRotate(); }
 
 

+ 9 - 1
lib/Transforms/Scalar/LoopStrengthReduce.cpp

@@ -3791,8 +3791,16 @@ private:
 }
 }
 
 
 char LoopStrengthReduce::ID = 0;
 char LoopStrengthReduce::ID = 0;
-INITIALIZE_PASS(LoopStrengthReduce, "loop-reduce",
+INITIALIZE_PASS_BEGIN(LoopStrengthReduce, "loop-reduce",
                 "Loop Strength Reduction", false, false)
                 "Loop Strength Reduction", false, false)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(IVUsers)
+INITIALIZE_PASS_END(LoopStrengthReduce, "loop-reduce",
+                "Loop Strength Reduction", false, false)
+
 
 
 Pass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {
 Pass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {
   return new LoopStrengthReduce(TLI);
   return new LoopStrengthReduce(TLI);

+ 7 - 1
lib/Transforms/Scalar/LoopUnrollPass.cpp

@@ -79,7 +79,13 @@ namespace {
 }
 }
 
 
 char LoopUnroll::ID = 0;
 char LoopUnroll::ID = 0;
-INITIALIZE_PASS(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
+INITIALIZE_PASS_BEGIN(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
 
 
 Pass *llvm::createLoopUnrollPass() { return new LoopUnroll(); }
 Pass *llvm::createLoopUnrollPass() { return new LoopUnroll(); }
 
 

+ 8 - 1
lib/Transforms/Scalar/LoopUnswitch.cpp

@@ -158,7 +158,14 @@ namespace {
   };
   };
 }
 }
 char LoopUnswitch::ID = 0;
 char LoopUnswitch::ID = 0;
-INITIALIZE_PASS(LoopUnswitch, "loop-unswitch", "Unswitch loops", false, false)
+INITIALIZE_PASS_BEGIN(LoopUnswitch, "loop-unswitch", "Unswitch loops",
+                      false, false)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(LoopUnswitch, "loop-unswitch", "Unswitch loops",
+                      false, false)
 
 
 Pass *llvm::createLoopUnswitchPass(bool Os) { 
 Pass *llvm::createLoopUnswitchPass(bool Os) { 
   return new LoopUnswitch(Os); 
   return new LoopUnswitch(Os); 

+ 7 - 2
lib/Transforms/Scalar/MemCpyOptimizer.cpp

@@ -331,8 +331,13 @@ namespace {
 // createMemCpyOptPass - The public interface to this file...
 // createMemCpyOptPass - The public interface to this file...
 FunctionPass *llvm::createMemCpyOptPass() { return new MemCpyOpt(); }
 FunctionPass *llvm::createMemCpyOptPass() { return new MemCpyOpt(); }
 
 
-INITIALIZE_PASS(MemCpyOpt, "memcpyopt", "MemCpy Optimization", false, false)
-
+INITIALIZE_PASS_BEGIN(MemCpyOpt, "memcpyopt", "MemCpy Optimization",
+                      false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(MemCpyOpt, "memcpyopt", "MemCpy Optimization",
+                    false, false)
 
 
 
 
 /// processStore - When GVN is scanning forward over instructions, we look for
 /// processStore - When GVN is scanning forward over instructions, we look for

+ 4 - 2
lib/Transforms/Scalar/Reg2Mem.cpp

@@ -59,9 +59,11 @@ namespace {
 }
 }
   
   
 char RegToMem::ID = 0;
 char RegToMem::ID = 0;
-INITIALIZE_PASS(RegToMem, "reg2mem", "Demote all values to stack slots",
+INITIALIZE_PASS_BEGIN(RegToMem, "reg2mem", "Demote all values to stack slots",
+                false, false)
+INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
+INITIALIZE_PASS_END(RegToMem, "reg2mem", "Demote all values to stack slots",
                 false, false)
                 false, false)
-
 
 
 bool RegToMem::runOnFunction(Function &F) {
 bool RegToMem::runOnFunction(Function &F) {
   if (F.isDeclaration()) 
   if (F.isDeclaration()) 

+ 5 - 1
lib/Transforms/Scalar/ScalarReplAggregates.cpp

@@ -135,7 +135,11 @@ namespace {
 }
 }
 
 
 char SROA::ID = 0;
 char SROA::ID = 0;
-INITIALIZE_PASS(SROA, "scalarrepl",
+INITIALIZE_PASS_BEGIN(SROA, "scalarrepl",
+                "Scalar Replacement of Aggregates", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_END(SROA, "scalarrepl",
                 "Scalar Replacement of Aggregates", false, false)
                 "Scalar Replacement of Aggregates", false, false)
 
 
 // Public interface to the ScalarReplAggregates pass
 // Public interface to the ScalarReplAggregates pass

+ 5 - 1
lib/Transforms/Scalar/Sink.cpp

@@ -56,7 +56,11 @@ namespace {
 } // end anonymous namespace
 } // end anonymous namespace
   
   
 char Sinking::ID = 0;
 char Sinking::ID = 0;
-INITIALIZE_PASS(Sinking, "sink", "Code sinking", false, false)
+INITIALIZE_PASS_BEGIN(Sinking, "sink", "Code sinking", false, false)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(Sinking, "sink", "Code sinking", false, false)
 
 
 FunctionPass *llvm::createSinkingPass() { return new Sinking(); }
 FunctionPass *llvm::createSinkingPass() { return new Sinking(); }
 
 

+ 7 - 1
lib/Transforms/Utils/LCSSA.cpp

@@ -90,7 +90,13 @@ namespace {
 }
 }
   
   
 char LCSSA::ID = 0;
 char LCSSA::ID = 0;
-INITIALIZE_PASS(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
+INITIALIZE_PASS_BEGIN(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_END(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
 
 
 Pass *llvm::createLCSSAPass() { return new LCSSA(); }
 Pass *llvm::createLCSSAPass() { return new LCSSA(); }
 char &llvm::LCSSAID = LCSSA::ID;
 char &llvm::LCSSAID = LCSSA::ID;

+ 10 - 1
lib/Transforms/Utils/LoopSimplify.cpp

@@ -107,7 +107,16 @@ namespace {
 }
 }
 
 
 char LoopSimplify::ID = 0;
 char LoopSimplify::ID = 0;
-INITIALIZE_PASS(LoopSimplify, "loopsimplify",
+INITIALIZE_PASS_BEGIN(LoopSimplify, "loopsimplify",
+                "Canonicalize natural loops", true, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(LoopInfo)
+INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
+INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(LCSSA)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
+INITIALIZE_PASS_END(LoopSimplify, "loopsimplify",
                 "Canonicalize natural loops", true, false)
                 "Canonicalize natural loops", true, false)
 
 
 // Publically exposed interface to pass...
 // Publically exposed interface to pass...

+ 8 - 1
lib/Transforms/Utils/Mem2Reg.cpp

@@ -49,7 +49,14 @@ namespace {
 }  // end of anonymous namespace
 }  // end of anonymous namespace
 
 
 char PromotePass::ID = 0;
 char PromotePass::ID = 0;
-INITIALIZE_PASS(PromotePass, "mem2reg", "Promote Memory to Register",
+INITIALIZE_PASS_BEGIN(PromotePass, "mem2reg", "Promote Memory to Register",
+                false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
+INITIALIZE_PASS_DEPENDENCY(UnifyFunctionExitNodes)
+INITIALIZE_PASS_DEPENDENCY(LowerSwitch)
+INITIALIZE_PASS_DEPENDENCY(LowerInvoke)
+INITIALIZE_PASS_END(PromotePass, "mem2reg", "Promote Memory to Register",
                 false, false)
                 false, false)
 
 
 bool PromotePass::runOnFunction(Function &F) {
 bool PromotePass::runOnFunction(Function &F) {

+ 4 - 1
lib/VMCore/Dominators.cpp

@@ -106,7 +106,10 @@ bool DominatorTree::dominates(const Instruction *A, const Instruction *B) const{
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//
 
 
 char DominanceFrontier::ID = 0;
 char DominanceFrontier::ID = 0;
-INITIALIZE_PASS(DominanceFrontier, "domfrontier",
+INITIALIZE_PASS_BEGIN(DominanceFrontier, "domfrontier",
+                "Dominance Frontier Construction", true, true)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(DominanceFrontier, "domfrontier",
                 "Dominance Frontier Construction", true, true)
                 "Dominance Frontier Construction", true, true)
 
 
 void DominanceFrontier::verifyAnalysis() const {
 void DominanceFrontier::verifyAnalysis() const {

+ 4 - 1
lib/VMCore/Verifier.cpp

@@ -393,7 +393,10 @@ namespace {
 } // End anonymous namespace
 } // End anonymous namespace
 
 
 char Verifier::ID = 0;
 char Verifier::ID = 0;
-INITIALIZE_PASS(Verifier, "verify", "Module Verifier", false, false)
+INITIALIZE_PASS_BEGIN(Verifier, "verify", "Module Verifier", false, false)
+INITIALIZE_PASS_DEPENDENCY(PreVerifier)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(Verifier, "verify", "Module Verifier", false, false)
 
 
 // Assert - We know that cond should be true, if not print an error message.
 // Assert - We know that cond should be true, if not print an error message.
 #define Assert(C, M) \
 #define Assert(C, M) \