Index: include/llvm/Transforms/IPO/PassManagerBuilder.h =================================================================== --- include/llvm/Transforms/IPO/PassManagerBuilder.h +++ include/llvm/Transforms/IPO/PassManagerBuilder.h @@ -122,6 +122,7 @@ /// The module summary index to use for function importing. const ModuleSummaryIndex *ModuleSummary; + bool DisableGVNHoistPass; bool DisableTailCalls; bool DisableUnitAtATime; bool DisableUnrollLoops; Index: lib/Transforms/IPO/PassManagerBuilder.cpp =================================================================== --- lib/Transforms/IPO/PassManagerBuilder.cpp +++ lib/Transforms/IPO/PassManagerBuilder.cpp @@ -125,6 +125,9 @@ "enable-loop-versioning-licm", cl::init(false), cl::Hidden, cl::desc("Enable the experimental Loop Versioning LICM pass")); +static cl::opt DisableGVNHoist("disable-gvn-hoist", cl::init(false), + cl::Hidden, + cl::desc("Disable GVN Hoist pass")); static cl::opt DisablePreInliner("disable-preinline", cl::init(false), cl::Hidden, cl::desc("Disable pre-instrumentation inliner")); @@ -140,6 +143,7 @@ LibraryInfo = nullptr; Inliner = nullptr; ModuleSummary = nullptr; + DisableGVNHoistPass = DisableGVNHoist; DisableUnitAtATime = false; DisableUnrollLoops = false; BBVectorize = RunBBVectorization; @@ -232,7 +236,8 @@ FPM.add(createCFGSimplificationPass()); FPM.add(createSROAPass()); FPM.add(createEarlyCSEPass()); - FPM.add(createGVNHoistPass()); + if(!DisableGVNHoist) + FPM.add(createGVNHoistPass()); FPM.add(createLowerExpectIntrinsicPass()); }