diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-21 20:03:44 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-21 20:03:44 +0000 |
commit | 7cebf36a9586f11a02077059c37701f7c020f573 (patch) | |
tree | d14f5ce12832e4a03f75ffa28714cfbd2c7693c7 /llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | |
parent | b245ecac79459de6db2d1443190a1e67eac56fff (diff) | |
download | bcm5719-llvm-7cebf36a9586f11a02077059c37701f7c020f573.tar.gz bcm5719-llvm-7cebf36a9586f11a02077059c37701f7c020f573.zip |
Move some logic to populateLTOPassManager.
This will avoid code duplication in the next commit which calls it directly
from the gold plugin.
llvm-svn: 216211
Diffstat (limited to 'llvm/lib/Transforms/IPO/PassManagerBuilder.cpp')
-rw-r--r-- | llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index b76f3486e5f..f5c5b065f11 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -17,11 +17,14 @@ #include "llvm-c/Transforms/PassManagerBuilder.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Analysis/Passes.h" +#include "llvm/IR/DataLayout.h" #include "llvm/IR/Verifier.h" #include "llvm/PassManager.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Target/TargetLibraryInfo.h" +#include "llvm/Target/TargetMachine.h" +#include "llvm/Target/TargetSubtargetInfo.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Vectorize.h" @@ -78,6 +81,9 @@ PassManagerBuilder::PassManagerBuilder() { RerollLoops = RunLoopRerolling; LoadCombine = RunLoadCombine; DisableGVNLoadPRE = false; + VerifyInput = false; + VerifyOutput = false; + StripDebug = false; } PassManagerBuilder::~PassManagerBuilder() { @@ -313,11 +319,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) { addExtensionsToPM(EP_OptimizerLast, MPM); } -void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM) { - // Add LibraryInfo if we have some. - if (LibraryInfo) - PM.add(new TargetLibraryInfo(*LibraryInfo)); - +void PassManagerBuilder::addLTOOptimizationPasses(PassManagerBase &PM) { // Provide AliasAnalysis services for optimizations. addInitialAliasAnalysisPasses(PM); @@ -408,6 +410,35 @@ void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM) { PM.add(createGlobalDCEPass()); } +void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM, + TargetMachine *TM) { + if (TM) { + const DataLayout *DL = TM->getSubtargetImpl()->getDataLayout(); + PM.add(new DataLayoutPass(*DL)); + TM->addAnalysisPasses(PM); + } + + if (LibraryInfo) + PM.add(new TargetLibraryInfo(*LibraryInfo)); + + if (VerifyInput) + PM.add(createVerifierPass()); + + if (StripDebug) + PM.add(createStripSymbolsPass(true)); + + if (VerifyInput) + PM.add(createDebugInfoVerifierPass()); + + if (OptLevel != 0) + addLTOOptimizationPasses(PM); + + if (VerifyOutput) { + PM.add(createVerifierPass()); + PM.add(createDebugInfoVerifierPass()); + } +} + inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) { return reinterpret_cast<PassManagerBuilder*>(P); } |