Using addPassesToEmitWholeFile is not a good idea here.
authorDevang Patel <dpatel@apple.com>
Thu, 7 Sep 2006 21:41:11 +0000 (21:41 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 7 Sep 2006 21:41:11 +0000 (21:41 +0000)
Use FunctionPassManager to do the job.

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

tools/lto/lto.cpp

index fedd4aef712d29816fe8c91ca7a2c589732859fe..05114b7f329c47ea7e8236185fcab72d78d2833b 100644 (file)
@@ -282,11 +282,24 @@ static enum LTOStatus lto_optimize(Module *M, std::ostream &Out,
   // Make sure everything is still good.
   Passes.add(createVerifierPass());
 
-  Target.addPassesToEmitWholeFile(Passes, Out, TargetMachine::AssemblyFile, true);
+  FunctionPassManager *CodeGenPasses =
+    new FunctionPassManager(new ExistingModuleProvider(M));
+
+  CodeGenPasses->add(new TargetData(*Target.getTargetData()));
+  Target.addPassesToEmitFile(*CodeGenPasses, Out, TargetMachine::AssemblyFile, 
+                            true);
 
   // Run our queue of passes all at once now, efficiently.
   Passes.run(*M);
 
+  // Run the code generator, if present.
+  CodeGenPasses->doInitialization();
+  for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I) {
+    if (!I->isExternal())
+      CodeGenPasses->run(*I);
+  }
+  CodeGenPasses->doFinalization();
+
   return LTO_OPT_SUCCESS;
 }