[PATCH] D91673: [PGO] Enable preinline and cleanup when optimize for size
Zequan Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 1 16:18:15 PST 2020
zequanwu updated this revision to Diff 308810.
zequanwu added a comment.
- sync NPM with LPM.
- use PreInlineThreshold flag value instead of hardcode number.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91673/new/
https://reviews.llvm.org/D91673
Files:
llvm/lib/Passes/PassBuilder.cpp
llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
Index: llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
===================================================================
--- llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
+++ 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());
Index: llvm/lib/Passes/PassBuilder.cpp
===================================================================
--- llvm/lib/Passes/PassBuilder.cpp
+++ 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();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91673.308810.patch
Type: text/x-patch
Size: 2643 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201202/c90c1c9b/attachment.bin>
More information about the cfe-commits
mailing list