diff options
| author | Lang Hames <lhames@gmail.com> | 2013-03-13 21:18:46 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2013-03-13 21:18:46 +0000 |
| commit | dfa3f8f449b99dc12511288736845e5d23da01d0 (patch) | |
| tree | 6473b88ed24652c57cfa994a9b7845bb2c8a6e2e | |
| parent | b146baabadb7c721f3fe9a4f60a380ab0b0ce1c3 (diff) | |
| download | bcm5719-llvm-dfa3f8f449b99dc12511288736845e5d23da01d0.tar.gz bcm5719-llvm-dfa3f8f449b99dc12511288736845e5d23da01d0.zip | |
Make LTO codegen use a PassManager, rather than a FunctionPassManager, for the
codegen passes. This brings it in to line with clang and llc's codegen setup,
and tidies up the code.
If I understand correctly, adding ModulePasses to a FunctionPassManager is
bogus. It only seems to explode if an added ModulePass depends on a
FunctionPass though, which might be why this code has survived so long.
Fixes <rdar://problem/13386816>.
llvm-svn: 176977
| -rw-r--r-- | llvm/tools/lto/LTOCodeGenerator.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/llvm/tools/lto/LTOCodeGenerator.cpp b/llvm/tools/lto/LTOCodeGenerator.cpp index 75705154e45..cf7ffe28009 100644 --- a/llvm/tools/lto/LTOCodeGenerator.cpp +++ b/llvm/tools/lto/LTOCodeGenerator.cpp @@ -390,14 +390,14 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out, // Make sure everything is still good. passes.add(createVerifierPass()); - FunctionPassManager *codeGenPasses = new FunctionPassManager(mergedModule); + PassManager codeGenPasses; - codeGenPasses->add(new DataLayout(*_target->getDataLayout())); - _target->addAnalysisPasses(*codeGenPasses); + codeGenPasses.add(new DataLayout(*_target->getDataLayout())); + _target->addAnalysisPasses(codeGenPasses); formatted_raw_ostream Out(out); - if (_target->addPassesToEmitFile(*codeGenPasses, Out, + if (_target->addPassesToEmitFile(codeGenPasses, Out, TargetMachine::CGFT_ObjectFile)) { errMsg = "target file type not supported"; return true; @@ -407,15 +407,7 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out, passes.run(*mergedModule); // Run the code generator, and write assembly file - codeGenPasses->doInitialization(); - - for (Module::iterator - it = mergedModule->begin(), e = mergedModule->end(); it != e; ++it) - if (!it->isDeclaration()) - codeGenPasses->run(*it); - - codeGenPasses->doFinalization(); - delete codeGenPasses; + codeGenPasses.run(*mergedModule); return false; // success } |

