Add an option to turn off the expensive GVN load PRE part of GVN.

llvm-svn: 153902
This commit is contained in:
Bill Wendling 2012-04-02 22:16:50 +00:00
parent 98f2c0c384
commit 932b992888
3 changed files with 13 additions and 6 deletions

View File

@ -131,8 +131,9 @@ public:
/// populateModulePassManager - This sets up the primary pass manager.
void populateModulePassManager(PassManagerBase &MPM);
void populateLTOPassManager(PassManagerBase &PM, bool Internalize,
bool RunInliner);
bool RunInliner, bool DisableGVNLoadPRE = false);
};
/// Registers a function for adding a standard set of passes. This should be
/// used by optimizer plugins to allow all front ends to transparently use
/// them. Create a static instance of this class in your plugin, providing a
@ -143,5 +144,6 @@ struct RegisterStandardPasses {
PassManagerBuilder::addGlobalExtension(Ty, Fn);
}
};
} // end namespace llvm
#endif

View File

@ -207,7 +207,8 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM,
bool Internalize,
bool RunInliner) {
bool RunInliner,
bool DisableGVNLoadPRE) {
// Provide AliasAnalysis services for optimizations.
addInitialAliasAnalysisPasses(PM);
@ -263,9 +264,9 @@ void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM,
PM.add(createFunctionAttrsPass()); // Add nocapture.
PM.add(createGlobalsModRefPass()); // IP alias analysis.
PM.add(createLICMPass()); // Hoist loop invariants.
PM.add(createGVNPass()); // Remove redundancies.
PM.add(createMemCpyOptPass()); // Remove dead memcpys.
PM.add(createLICMPass()); // Hoist loop invariants.
PM.add(createGVNPass(DisableGVNLoadPRE)); // Remove redundancies.
PM.add(createMemCpyOptPass()); // Remove dead memcpys.
// Nuke dead stores.
PM.add(createDeadStoreEliminationPass());

View File

@ -49,6 +49,9 @@ using namespace llvm;
static cl::opt<bool> DisableInline("disable-inlining",
cl::desc("Do not run the inliner pass"));
static cl::opt<bool> DisableGVNLoadPRE("disable-gvn-loadpre",
cl::desc("Do not run the GVN load PRE pass"));
const char* LTOCodeGenerator::getVersionString() {
#ifdef LLVM_VERSION_INFO
return PACKAGE_NAME " version " PACKAGE_VERSION ", " LLVM_VERSION_INFO;
@ -353,7 +356,8 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out,
passes.add(new TargetData(*_target->getTargetData()));
PassManagerBuilder().populateLTOPassManager(passes, /*Internalize=*/ false,
!DisableInline);
!DisableInline,
DisableGVNLoadPRE);
// Make sure everything is still good.
passes.add(createVerifierPass());