Add doInitialization and doFinalization methods to ModulePass's, to allow them to be re-initialized and reused on multiple Module's.

Patch by Pedro Artigas.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168008 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp
index aed16f4..8836eed 100644
--- a/tools/bugpoint/CrashDebugger.cpp
+++ b/tools/bugpoint/CrashDebugger.cpp
@@ -412,7 +412,9 @@
   // Verify that this is still valid.
   PassManager Passes;
   Passes.add(createVerifierPass());
+  Passes.doInitialization();
   Passes.run(*M);
+  Passes.doFinalization();
 
   // Try running on the hacked up program...
   if (TestFn(BD, M)) {
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index 4d4a74c..f3e5c20 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -359,7 +359,9 @@
     // Before executing passes, print the final values of the LLVM options.
     cl::PrintOptionValues();
 
+    PM.doInitialization();
     PM.run(*mod);
+    PM.doFinalization();
   }
 
   // Declare success.
diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp
index ac82d98..d2caabd 100644
--- a/tools/llvm-extract/llvm-extract.cpp
+++ b/tools/llvm-extract/llvm-extract.cpp
@@ -276,7 +276,9 @@
   else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
     Passes.add(createBitcodeWriterPass(Out.os()));
 
+  Passes.doInitialization();
   Passes.run(*M.get());
+  Passes.doFinalization();
 
   // Declare success.
   Out.keep();
diff --git a/tools/llvm-prof/llvm-prof.cpp b/tools/llvm-prof/llvm-prof.cpp
index 81e9503..940ac34 100644
--- a/tools/llvm-prof/llvm-prof.cpp
+++ b/tools/llvm-prof/llvm-prof.cpp
@@ -287,7 +287,9 @@
   PassManager PassMgr;
   PassMgr.add(createProfileLoaderPass(ProfileDataFile));
   PassMgr.add(new ProfileInfoPrinterPass(PIL));
+  PassMgr.doInitialization();
   PassMgr.run(*M);
+  PassMgr.doFinalization();
 
   return 0;
 }
diff --git a/tools/llvm-stress/llvm-stress.cpp b/tools/llvm-stress/llvm-stress.cpp
index 8473d94..72fdac8 100644
--- a/tools/llvm-stress/llvm-stress.cpp
+++ b/tools/llvm-stress/llvm-stress.cpp
@@ -713,7 +713,9 @@
   PassManager Passes;
   Passes.add(createVerifierPass());
   Passes.add(createPrintModulePass(&Out->os()));
+  Passes.doInitialization();
   Passes.run(*M.get());
+  Passes.doFinalization();
   Out->keep();
 
   return 0;
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index b1c4f43..d9fa218 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -342,7 +342,9 @@
   passes.add(createInternalizePass(mustPreserveList));
 
   // apply scope restrictions
+  passes.doInitialization();
   passes.run(*mergedModule);
+  passes.doFinalization();
 
   _scopeRestrictionsDone = true;
 }
@@ -397,7 +399,9 @@
   }
 
   // Run our queue of passes all at once now, efficiently.
+  passes.doInitialization();
   passes.run(*mergedModule);
+  passes.doFinalization();
 
   // Run the code generator, and write assembly file
   codeGenPasses->doInitialization();
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index bac0d46..7cced98 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -820,7 +820,9 @@
   cl::PrintOptionValues();
 
   // Now that we have all of the passes ready, run them.
+  Passes.doInitialization();
   Passes.run(*M.get());
+  Passes.doFinalization();
 
   // Declare success.
   if (!NoOutput || PrintBreakpoints)