Skip to content

Commit 1a2e77c

Browse files
committed
Revert "Revert "Inlining: Run the legacy AlwaysInliner before the regular inliner.""
This reverts commit 86bfeb9. This is a long time coming re-application that was originally reverted due to regressions, unrelated to the actual inlining change. These regressions have since been fixed due to another long-in-the-making change of a66051c landing. Original commit message for reference: --- 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 ebc2c4b commit 1a2e77c

13 files changed

+692
-525
lines changed

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: 505 additions & 505 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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ static cl::opt<bool> EnableModuleInliner("enable-module-inliner",
164164
cl::desc("Enable module inliner"));
165165

166166
static cl::opt<bool> PerformMandatoryInliningsFirst(
167-
"mandatory-inlining-first", cl::init(true), cl::Hidden,
167+
"mandatory-inlining-first", cl::init(false), cl::Hidden,
168168
cl::desc("Perform mandatory inlinings module-wide, before performing "
169169
"inlining"));
170170

@@ -1127,6 +1127,8 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
11271127
if (EnableSyntheticCounts && !PGOOpt)
11281128
MPM.addPass(SyntheticCountsPropagation());
11291129

1130+
MPM.addPass(AlwaysInlinerPass(/*InsertLifetimeIntrinsics=*/true));
1131+
11301132
if (EnableModuleInliner)
11311133
MPM.addPass(buildModuleInlinerPipeline(Level, Phase));
11321134
else

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
122122
; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
123123
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
124+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
125+
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
124126
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
125127
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
126128
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -129,14 +131,12 @@
129131
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager
130132
; CHECK-O-NEXT: Invalidating analysis: AAManager
131133
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
132-
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
133134
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
134135
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
135136
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
136137
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph::SCC{{.*}}>
137138
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
138139
; CHECK-O-NEXT: Running pass: InlinerPass
139-
; CHECK-O-NEXT: Running pass: InlinerPass
140140
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
141141
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
142142
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)

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-postlink-defaults.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
; CHECK-O-NEXT: Running analysis: TypeBasedAA
6262
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
6363
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
64+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
65+
; CHECK-PRELINK-O-NEXT: Running analysis: ProfileSummaryAnalysis
6466
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
6567
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
6668
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -75,7 +77,6 @@
7577
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
7678
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
7779
; CHECK-O-NEXT: Running pass: InlinerPass
78-
; CHECK-O-NEXT: Running pass: InlinerPass
7980
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
8081
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
8182
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
; CHECK-O-NEXT: Running analysis: LoopAnalysis on foo
5151
; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
5252
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
53+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
5354
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
5455
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
5556
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -64,7 +65,6 @@
6465
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph::SCC{{.*}}>
6566
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
6667
; CHECK-O-NEXT: Running pass: InlinerPass
67-
; CHECK-O-NEXT: Running pass: InlinerPass
6868
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
6969
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
7070
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
; CHECK-O-NEXT: Running analysis: LoopAnalysis on foo
5959
; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
6060
; CHECK-O-NEXT: Running pass: SimplifyCFGPass on foo
61+
62+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
6163
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
6264
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
6365
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -71,7 +73,6 @@
7173
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
7274
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
7375
; CHECK-O-NEXT: Running pass: InlinerPass
74-
; CHECK-O-NEXT: Running pass: InlinerPass
7576
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
7677
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
7778
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
; CHECK-O-NEXT: Running analysis: TypeBasedAA
9393
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
9494
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
95+
; CHECK-O-NEXT: Running pass: AlwaysInlinerPass
96+
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
9597
; CHECK-O-NEXT: Running pass: ModuleInlinerWrapperPass
9698
; CHECK-O-NEXT: Running analysis: InlineAdvisorAnalysis
9799
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
@@ -100,14 +102,12 @@
100102
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}AAManager
101103
; CHECK-O-NEXT: Invalidating analysis: AAManager
102104
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
103-
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
104105
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
105106
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
106107
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
107108
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
108109
; CHECK-O-NEXT: Running pass: DevirtSCCRepeatedPass
109110
; CHECK-O-NEXT: Running pass: InlinerPass
110-
; CHECK-O-NEXT: Running pass: InlinerPass
111111
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
112112
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
113113
; CHECK-O2-NEXT: Running pass: OpenMPOptCGSCCPass on (foo)

0 commit comments

Comments
 (0)