diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -797,12 +797,7 @@ std::string ProfileFile, std::string ProfileRemappingFile) { assert(Level != OptimizationLevel::O0 && "Not expecting O0 here!"); - // Generally running simplification passes and the inliner with an high - // threshold results in smaller executables, but there may be cases where - // the size grows, so let's be conservative here and skip this simplification - // at -Os/Oz. We will not do this inline for context sensistive PGO (when - // IsCS is true). - if (!Level.isOptimizingForSize() && !IsCS && !DisablePreInliner) { + if (!IsCS && !DisablePreInliner) { InlineParams IP; IP.DefaultThreshold = PreInlineThreshold; @@ -810,7 +805,7 @@ // FIXME: The hint threshold has the same value used by the regular inliner. // This should probably be lowered after performance testing. // FIXME: this comment is cargo culted from the old pass manager, revisit). - IP.HintThreshold = 325; + IP.HintThreshold = Level.isOptimizingForSize() ? PreInlineThreshold : 325; ModuleInlinerWrapperPass MIWP(IP, DebugLogging); CGSCCPassManager &CGPipeline = MIWP.getPM(); diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -330,10 +330,8 @@ return; // Perform the preinline and cleanup passes for O1 and above. - // And avoid doing them if optimizing for size. // We will not do this inline for context sensitive PGO (when IsCS is true). - if (OptLevel > 0 && SizeLevel == 0 && !DisablePreInliner && - PGOSampleUse.empty() && !IsCS) { + if (OptLevel > 0 && !DisablePreInliner && PGOSampleUse.empty() && !IsCS) { // Create preinline pass. We construct an InlineParams object and specify // the threshold here to avoid the command line options of the regular // inliner to influence pre-inlining. The only fields of InlineParams we @@ -342,7 +340,7 @@ IP.DefaultThreshold = PreInlineThreshold; // FIXME: The hint threshold has the same value used by the regular inliner. // This should probably be lowered after performance testing. - IP.HintThreshold = 325; + IP.HintThreshold = SizeLevel > 0 ? PreInlineThreshold : 325; MPM.add(createFunctionInliningPass(IP)); MPM.add(createSROAPass());