aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-06-03 21:51:32 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-06-03 21:51:32 +0000
commitf4a9bb177c7a8d6f32bf0c7aa5b3e0a58c40ca06 (patch)
tree7cddfb427529cb31be6167b88a76846e707d0651
parent3b65ccd1d2bf966a9e1a828eb8cf168260bdf651 (diff)
downloadexternal_llvm-f4a9bb177c7a8d6f32bf0c7aa5b3e0a58c40ca06.zip
external_llvm-f4a9bb177c7a8d6f32bf0c7aa5b3e0a58c40ca06.tar.gz
external_llvm-f4a9bb177c7a8d6f32bf0c7aa5b3e0a58c40ca06.tar.bz2
Change LTO to run the global opt pass twice.
- This matches llvm-ld. It took a bit of archeology to figure out what the right thing to do was (whether this was intentionally added or intentionally removed). My final conclusion is that Chris added this intentionally here: http://llvm.org/viewvc/llvm-project?view=rev&revision=16913 but the changes weren't propogated to llvm-ld until here: http://llvm.org/viewvc/llvm-project?view=rev&revision=34058 which was after lto.cpp had been cloned off (of llvm-ld), here: http://llvm.org/viewvc/llvm-project?view=rev&revision=29494 From the commit message, it looks like the motivation for running global opt again is because we ran it prior to inlining. Based on that I updated the comment and also only run the pass if we actually ran the inliner. Chris, please review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72811 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Support/StandardPasses.h10
-rw-r--r--tools/llvm-ld/Optimize.cpp2
-rw-r--r--tools/lto/LTOCodeGenerator.cpp1
3 files changed, 3 insertions, 10 deletions
diff --git a/include/llvm/Support/StandardPasses.h b/include/llvm/Support/StandardPasses.h
index 024c019..5c63034 100644
--- a/include/llvm/Support/StandardPasses.h
+++ b/include/llvm/Support/StandardPasses.h
@@ -60,15 +60,10 @@ namespace llvm {
///
/// Internalize - Run the internalize pass.
/// RunInliner - Use a function inlining pass.
- /// RunSecondGlobalOpt - Run the global optimizer pass twice.
/// VerifyEach - Run the verifier after each pass.
- //
- // FIXME: RunSecondGlobalOpt should go away once we resolve which of LTO or
- // llvm-ld is better.
static inline void createStandardLTOPasses(PassManager *PM,
bool Internalize,
bool RunInliner,
- bool RunSecondGlobalOpt,
bool VerifyEach);
// Implementations
@@ -173,7 +168,6 @@ namespace llvm {
static inline void createStandardLTOPasses(PassManager *PM,
bool Internalize,
bool RunInliner,
- bool RunSecondGlobalOpt,
bool VerifyEach) {
// Now that composite has been compiled, scan through the module, looking
// for a main function. If main is defined, mark all other functions
@@ -207,8 +201,8 @@ namespace llvm {
addOnePass(PM, createFunctionInliningPass(), VerifyEach);
addOnePass(PM, createPruneEHPass(), VerifyEach); // Remove dead EH info.
- // Optimize globals again.
- if (RunSecondGlobalOpt)
+ // Optimize globals again if we ran the inliner.
+ if (RunInliner)
addOnePass(PM, createGlobalOptimizerPass(), VerifyEach);
addOnePass(PM, createGlobalDCEPass(), VerifyEach); // Remove dead functions.
diff --git a/tools/llvm-ld/Optimize.cpp b/tools/llvm-ld/Optimize.cpp
index a4ca951..e466895 100644
--- a/tools/llvm-ld/Optimize.cpp
+++ b/tools/llvm-ld/Optimize.cpp
@@ -94,7 +94,7 @@ void Optimize(Module* M) {
if (!DisableOptimizations)
createStandardLTOPasses(&Passes, !DisableInternalize, !DisableInline,
- /*RunSecondGlobalOpt=*/true, VerifyEach);
+ VerifyEach);
// If the -s or -S command line options were specified, strip the symbols out
// of the resulting program to make it smaller. -s and -S are GNU ld options
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index 03a11b6..dcbae95 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -391,7 +391,6 @@ bool LTOCodeGenerator::generateAssemblyCode(raw_ostream& out,
passes.add(new TargetData(*_target->getTargetData()));
createStandardLTOPasses(&passes, /*Internalize=*/ false, !DisableInline,
- /*RunSecondGlobalOpt=*/ false,
/*VerifyEach=*/ false);
// Make sure everything is still good.