Skip to content

Commit cae033d

Browse files
committed
Inlining: Run the legacy AlwaysInliner before the regular inliner.
We have several situations where it's beneficial for code size to ensure that every call to always-inline functions are inlined before normal inlining decisions are made. While the normal inliner runs in a "MandatoryOnly" mode to try to do this, it only does it on a per-SCC basis, rather than the whole module. Ensuring that all mandatory inlinings are done before any heuristic based decisions are made just makes sense. Despite being referred to the "legacy" AlwaysInliner pass, it's already necessary for -O0 because the CGSCC inliner is too expensive in compile time to run at -O0. This also fixes an exponential compile time blow up in #59126 Differential Revision: https://reviews.llvm.org/D143624
1 parent e6edc1b commit cae033d

14 files changed

+561
-397
lines changed

clang/test/CodeGen/code-coverage.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// RUN: %clang_cc1 -emit-llvm-bc -o /dev/null -fdebug-pass-manager -fprofile-arcs %s 2>&1 | FileCheck --check-prefix=NEWPM %s
1515
// RUN: %clang_cc1 -emit-llvm-bc -o /dev/null -fdebug-pass-manager -fprofile-arcs -O3 %s 2>&1 | FileCheck --check-prefix=NEWPM-O3 %s
1616

17-
// NEWPM-NOT: Running pass
1817
// NEWPM: Running pass: GCOVProfilerPass
1918

2019
// NEWPM-O3-NOT: Running pass

clang/test/Frontend/optimization-remark-with-hotness-new-pm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void bar(int x) {
7373
// THRESHOLD-NOT: hotness
7474
// NO_PGO: '-fdiagnostics-show-hotness' requires profile-guided optimization information
7575
// NO_PGO: '-fdiagnostics-hotness-threshold=' requires profile-guided optimization information
76-
// expected-remark@+1 {{'foo' inlined into 'bar': always inline attribute at callsite bar:8:10; (hotness:}}
76+
// expected-remark@+1 {{'foo' inlined into 'bar' with (cost=always): always inline attribute at callsite bar:8:10; (hotness:}}
7777
sum += foo(x, x - 2);
7878
}
7979

clang/test/Headers/__clang_hip_math.hip

Lines changed: 375 additions & 376 deletions
Large diffs are not rendered by default.

clang/test/OpenMP/bug57757.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,23 @@ void foo() {
3232
// CHECK-NEXT: entry:
3333
// CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP1]], i64 0, i32 2
3434
// CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])
35-
// CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])
36-
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4, !tbaa [[TBAA18:![0-9]+]], !alias.scope !13, !noalias !16
35+
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4, !tbaa [[TBAA16:![0-9]+]], !alias.scope !13, !noalias !17
3736
// CHECK-NEXT: switch i32 [[TMP3]], label [[DOTOMP_OUTLINED__EXIT:%.*]] [
3837
// CHECK-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]
3938
// CHECK-NEXT: i32 1, label [[DOTUNTIED_NEXT__I:%.*]]
4039
// CHECK-NEXT: ]
4140
// CHECK: .untied.jmp..i:
42-
// CHECK-NEXT: store i32 1, ptr [[TMP2]], align 4, !tbaa [[TBAA18]], !alias.scope !13, !noalias !16
43-
// CHECK-NEXT: [[TMP4:%.*]] = tail call i32 @__kmpc_omp_task(ptr nonnull @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]]), !noalias !19
41+
// CHECK-NEXT: store i32 1, ptr [[TMP2]], align 4, !tbaa [[TBAA16]], !alias.scope !13, !noalias !17
42+
// CHECK-NEXT: [[TMP4:%.*]] = tail call i32 @__kmpc_omp_task(ptr nonnull @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]]), !noalias !13
4443
// CHECK-NEXT: br label [[DOTOMP_OUTLINED__EXIT]]
4544
// CHECK: .untied.next..i:
4645
// CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP1]], i64 0, i32 1
4746
// CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP1]], i64 0, i32 1, i32 2
4847
// CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP1]], i64 0, i32 1, i32 1
49-
// CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TMP5]], align 8, !tbaa [[TBAA20:![0-9]+]], !alias.scope !16, !noalias !13
50-
// CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP7]], align 4, !tbaa [[TBAA18]], !alias.scope !16, !noalias !13
51-
// CHECK-NEXT: [[TMP10:%.*]] = load float, ptr [[TMP6]], align 4, !tbaa [[TBAA21:![0-9]+]], !alias.scope !16, !noalias !13
52-
// CHECK-NEXT: tail call void [[TMP8]](i32 noundef [[TMP9]], float noundef [[TMP10]]) #[[ATTR2:[0-9]+]], !noalias !19
48+
// CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TMP5]], align 8, !tbaa [[TBAA19:![0-9]+]], !noalias !13
49+
// CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP7]], align 4, !tbaa [[TBAA16]], !noalias !13
50+
// CHECK-NEXT: [[TMP10:%.*]] = load float, ptr [[TMP6]], align 4, !tbaa [[TBAA20:![0-9]+]], !noalias !13
51+
// CHECK-NEXT: tail call void [[TMP8]](i32 noundef [[TMP9]], float noundef [[TMP10]]) #[[ATTR2:[0-9]+]], !noalias !13
5352
// CHECK-NEXT: br label [[DOTOMP_OUTLINED__EXIT]]
5453
// CHECK: .omp_outlined..exit:
5554
// CHECK-NEXT: ret i32 0

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ static cl::opt<bool> EnableModuleInliner("enable-module-inliner",
161161
cl::desc("Enable module inliner"));
162162

163163
static cl::opt<bool> PerformMandatoryInliningsFirst(
164-
"mandatory-inlining-first", cl::init(true), cl::Hidden,
164+
"mandatory-inlining-first", cl::init(false), cl::Hidden,
165165
cl::desc("Perform mandatory inlinings module-wide, before performing "
166166
"inlining"));
167167

@@ -1079,6 +1079,9 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
10791079
if (EnableSyntheticCounts && !PGOOpt)
10801080
MPM.addPass(SyntheticCountsPropagation());
10811081

1082+
MPM.addPass(AlwaysInlinerPass(
1083+
/*InsertLifetimeIntrinsics=*/Level != OptimizationLevel::O0));
1084+
10821085
if (EnableModuleInliner)
10831086
MPM.addPass(buildModuleInlinerPipeline(Level, Phase));
10841087
else

llvm/test/Other/new-pm-defaults.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@
122122
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
123123
; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
124124
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
125+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
126+
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
125127
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
126128
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
127129
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -130,14 +132,12 @@
130132
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager
131133
; CHECK-O-NEXT: Invalidating analysis: AAManager
132134
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
133-
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
134135
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
135136
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
136137
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
137138
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph::SCC{{.*}}>
138139
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
139140
; CHECK-O-NEXT: Running pass: InlinerPass
140-
; CHECK-O-NEXT: Running pass: InlinerPass
141141
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
142142
; CHECK-O-NEXT: Running analysis: AAManager
143143
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass

llvm/test/Other/new-pm-print-pipeline.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
; CHECK-20: cgscc(inline<only-mandatory>,inline),cgscc(inline)
6363

6464
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='scc-oz-module-inliner' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-21
65-
; CHECK-21: require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline<only-mandatory>,inline,{{.*}},instcombine{{.*}}))
65+
; CHECK-21: require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,{{.*}},instcombine{{.*}}))
6666

6767
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='cgscc(function<eager-inv>(no-op-function)),function<eager-inv>(no-op-function)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-22
6868
; CHECK-22: cgscc(function<eager-inv>(no-op-function)),function<eager-inv>(no-op-function)

llvm/test/Other/new-pm-thinlto-defaults.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@
9999
; CHECK-O-NEXT: Running analysis: TypeBasedAA
100100
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
101101
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
102+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
103+
; CHECK-PRELINK-O-NEXT: Running analysis: ProfileSummaryAnalysis
102104
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
103105
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
104106
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -107,14 +109,12 @@
107109
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager
108110
; CHECK-O-NEXT: Invalidating analysis: AAManager
109111
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
110-
; CHECK-PRELINK-O-NEXT: Running analysis: ProfileSummaryAnalysis
111112
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
112113
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
113114
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
114115
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
115116
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
116117
; CHECK-O-NEXT: Running pass: InlinerPass
117-
; CHECK-O-NEXT: Running pass: InlinerPass
118118
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
119119
; CHECK-O-NEXT: Running analysis: AAManager
120120
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass

llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
; CHECK-O123-NEXT: Running analysis: BranchProbabilityAnalysis on foo
6464
; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
6565
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
66+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
6667
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
6768
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
6869
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -77,7 +78,6 @@
7778
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph::SCC{{.*}}>
7879
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
7980
; CHECK-O-NEXT: Running pass: InlinerPass
80-
; CHECK-O-NEXT: Running pass: InlinerPass
8181
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
8282
; CHECK-O-NEXT: Running analysis: AAManager
8383
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass

llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
7474
; CHECK-O-NEXT: Running pass: SimplifyCFGPass on foo
7575

76+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
7677
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
7778
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
7879
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -86,7 +87,6 @@
8687
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
8788
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
8889
; CHECK-O-NEXT: Running pass: InlinerPass
89-
; CHECK-O-NEXT: Running pass: InlinerPass
9090
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
9191
; CHECK-O-NEXT: Running analysis: AAManager
9292
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass

0 commit comments

Comments
 (0)