diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-07-17 18:09:39 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-17 18:09:39 +0000 |
commit | 41f9a3afdbed1bf9fb1bfd8acfad17768f341483 (patch) | |
tree | 71113872e182163430b6777c8814a4d49c3414cd /llvm/tools/opt/opt.cpp | |
parent | c8ce7b08bae8f86032dca601399fa1d4194db3d2 (diff) | |
download | bcm5719-llvm-41f9a3afdbed1bf9fb1bfd8acfad17768f341483.tar.gz bcm5719-llvm-41f9a3afdbed1bf9fb1bfd8acfad17768f341483.zip |
opt: Add -std-link-opts argument, matches llvm-ld's optimizations.
llvm-svn: 76199
Diffstat (limited to 'llvm/tools/opt/opt.cpp')
-rw-r--r-- | llvm/tools/opt/opt.cpp | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp index abfeace376b..b962ad95576 100644 --- a/llvm/tools/opt/opt.cpp +++ b/llvm/tools/opt/opt.cpp @@ -81,11 +81,19 @@ static cl::opt<bool> DisableOptimizations("disable-opt", cl::desc("Do not run any optimization passes")); +static cl::opt<bool> +DisableInternalize("disable-internalize", + cl::desc("Do not mark all symbols as internal")); + static cl::opt<bool> StandardCompileOpts("std-compile-opts", cl::desc("Include the standard compile time optimizations")); static cl::opt<bool> +StandardLinkOpts("std-link-opts", + cl::desc("Include the standard link time optimizations")); + +static cl::opt<bool> OptLevelO1("O1", cl::desc("Optimization level 1. Similar to llvm-gcc -O1")); @@ -311,6 +319,20 @@ void AddStandardCompilePasses(PassManager &PM) { InliningPass); } +void AddStandardLinkPasses(PassManager &PM) { + PM.add(createVerifierPass()); // Verify that input is correct + + // If the -strip-debug command line option was specified, do it. + if (StripDebug) + addPass(PM, createStripSymbolsPass(true)); + + if (DisableOptimizations) return; + + createStandardLTOPasses(&PM, /*Internalize=*/ !DisableInternalize, + /*RunInliner=*/ !DisableInline, + /*VerifyEach=*/ VerifyEach); +} + } // anonymous namespace @@ -404,6 +426,12 @@ int main(int argc, char **argv) { StandardCompileOpts = false; } + if (StandardLinkOpts && + StandardLinkOpts.getPosition() < PassList.getPosition(i)) { + AddStandardLinkPasses(Passes); + StandardLinkOpts = false; + } + if (OptLevelO1 && OptLevelO1.getPosition() < PassList.getPosition(i)) { AddOptimizationPasses(Passes, *FPasses, 1); OptLevelO1 = false; @@ -458,17 +486,22 @@ int main(int argc, char **argv) { StandardCompileOpts = false; } + if (StandardLinkOpts) { + AddStandardLinkPasses(Passes); + StandardLinkOpts = false; + } + if (OptLevelO1) { - AddOptimizationPasses(Passes, *FPasses, 1); - } + AddOptimizationPasses(Passes, *FPasses, 1); + } if (OptLevelO2) { - AddOptimizationPasses(Passes, *FPasses, 2); - } + AddOptimizationPasses(Passes, *FPasses, 2); + } if (OptLevelO3) { - AddOptimizationPasses(Passes, *FPasses, 3); - } + AddOptimizationPasses(Passes, *FPasses, 3); + } if (OptLevelO1 || OptLevelO2 || OptLevelO3) { for (Module::iterator I = M.get()->begin(), E = M.get()->end(); |