forked from OSchip/llvm-project
Add an option to turn off the expensive GVN load PRE part of GVN.
llvm-svn: 153902
This commit is contained in:
parent
98f2c0c384
commit
932b992888
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue