Skip to content

Commit 879f511

Browse files
committed
[Pipelines] Introduce DAE after ArgumentPromotion
The ArgumentPromotion pass uses Mem2Reg promotion at the end to cutting down generated `alloca` instructions as well as meaningless `store`s and this behavior can leave unused (dead) arguments. To eliminate the dead arguments and therefore let the DeadCodeElimination remove becoming dead inserted `GEP`s as well as `load`s and `cast`s in the callers, the DeadArgumentElimination pass should be run after the ArgumentPromotion one. Differential Revision: https://reviews.llvm.org/D128830
1 parent 9427487 commit 879f511

11 files changed

+26
-29
lines changed

clang/test/CodeGen/thinlto-distributed-newpm.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
; CHECK-O: Running pass: CalledValuePropagationPass
3535
; CHECK-O: Running pass: GlobalOptPass
3636
; CHECK-O: Running pass: PromotePass
37-
; CHECK-O: Running pass: DeadArgumentEliminationPass
3837
; CHECK-O: Running pass: InstCombinePass on main
3938
; CHECK-O: Running pass: SimplifyCFGPass on main
4039
; CHECK-O: Running pass: InlinerPass on (main)
@@ -74,6 +73,7 @@
7473
; CHECK-O: Running pass: LCSSAPass on main
7574
; CHECK-O: Running pass: SimplifyCFGPass on main
7675
; CHECK-O: Running pass: InstCombinePass on main
76+
; CHECK-O: Running pass: DeadArgumentEliminationPass
7777
; CHECK-O: Running pass: GlobalOptPass
7878
; CHECK-O: Running pass: GlobalDCEPass
7979
; CHECK-O: Running pass: EliminateAvailableExternallyPass

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ void PassBuilder::addPGOInstrPasses(ModulePassManager &MPM,
639639

640640
FunctionPassManager FPM;
641641
FPM.addPass(SROAPass());
642-
FPM.addPass(EarlyCSEPass()); // Catch trivial redundancies.
642+
FPM.addPass(EarlyCSEPass()); // Catch trivial redundancies.
643643
FPM.addPass(SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
644644
true))); // Merge & remove basic blocks.
645645
FPM.addPass(InstCombinePass()); // Combine silly sequences.
@@ -734,10 +734,9 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
734734
if (PGOOpt)
735735
IP.EnableDeferral = EnablePGOInlineDeferral;
736736

737-
ModuleInlinerWrapperPass MIWP(
738-
IP, PerformMandatoryInliningsFirst,
739-
InlineContext{Phase, InlinePass::CGSCCInliner},
740-
UseInlineAdvisor, MaxDevirtIterations);
737+
ModuleInlinerWrapperPass MIWP(IP, PerformMandatoryInliningsFirst,
738+
InlineContext{Phase, InlinePass::CGSCCInliner},
739+
UseInlineAdvisor, MaxDevirtIterations);
741740

742741
// Require the GlobalsAA analysis for the module so we can query it within
743742
// the CGSCC pipeline.
@@ -961,10 +960,6 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
961960
// constants.
962961
MPM.addPass(createModuleToFunctionPassAdaptor(PromotePass()));
963962

964-
// Remove any dead arguments exposed by cleanups and constant folding
965-
// globals.
966-
MPM.addPass(DeadArgumentEliminationPass());
967-
968963
// Create a small function pass pipeline to cleanup after all the global
969964
// optimizations.
970965
FunctionPassManager GlobalCleanupPM;
@@ -999,6 +994,10 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
999994
else
1000995
MPM.addPass(buildInlinerPipeline(Level, Phase));
1001996

997+
// Remove any dead arguments exposed by cleanups, constant folding globals,
998+
// and argument promotion.
999+
MPM.addPass(DeadArgumentEliminationPass());
1000+
10021001
MPM.addPass(CoroCleanupPass());
10031002

10041003
if (EnableMemProfiler && Phase != ThinOrFullLTOPhase::ThinLTOPreLink) {
@@ -1596,9 +1595,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
15961595
// keep one copy of each constant.
15971596
MPM.addPass(ConstantMergePass());
15981597

1599-
// Remove unused arguments from functions.
1600-
MPM.addPass(DeadArgumentEliminationPass());
1601-
16021598
// Reduce the code after globalopt and ipsccp. Both can open up significant
16031599
// simplification opportunities, and both can propagate functions through
16041600
// function pointers. When this happens, we often have to resolve varargs
@@ -1621,7 +1617,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
16211617
getInlineParamsFromOptLevel(Level),
16221618
/* MandatoryFirst */ true,
16231619
InlineContext{ThinOrFullLTOPhase::FullLTOPostLink,
1624-
InlinePass::CGSCCInliner}));
1620+
InlinePass::CGSCCInliner}));
16251621

16261622
// Optimize globals again after we ran the inliner.
16271623
MPM.addPass(GlobalOptPass());
@@ -1633,6 +1629,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
16331629
// transform it to pass arguments by value instead of by reference.
16341630
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(ArgumentPromotionPass()));
16351631

1632+
// Remove unused arguments from functions.
1633+
MPM.addPass(DeadArgumentEliminationPass());
1634+
16361635
FunctionPassManager FPM;
16371636
// The IPO Passes may leave cruft around. Clean up after them.
16381637
FPM.addPass(InstCombinePass());
@@ -1695,7 +1694,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
16951694
MainFPM.addPass(DSEPass());
16961695
MainFPM.addPass(MergedLoadStoreMotionPass());
16971696

1698-
16991697
if (EnableConstraintElimination)
17001698
MainFPM.addPass(ConstraintEliminationPass());
17011699

@@ -1720,8 +1718,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
17201718
addVectorPasses(Level, MainFPM, /* IsFullLTO */ true);
17211719

17221720
// Run the OpenMPOpt CGSCC pass again late.
1723-
MPM.addPass(
1724-
createModuleToPostOrderCGSCCPassAdaptor(OpenMPOptCGSCCPass()));
1721+
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(OpenMPOptCGSCCPass()));
17251722

17261723
invokePeepholeEPCallbacks(MainFPM, Level);
17271724
MainFPM.addPass(JumpThreadingPass());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@
112112
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
113113
; CHECK-O-NEXT: Running pass: GlobalOptPass
114114
; CHECK-O-NEXT: Running pass: PromotePass
115-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
116115
; CHECK-O-NEXT: Running pass: InstCombinePass
117116
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
118117
; CHECK-O-NEXT: Running analysis: AAManager
@@ -219,6 +218,7 @@
219218
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
220219
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
221220
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
221+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
222222
; CHECK-O-NEXT: Running pass: CoroCleanupPass
223223
; CHECK-O-NEXT: Running pass: GlobalOptPass
224224
; CHECK-O-NEXT: Running pass: GlobalDCEPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
7676
; CHECK-O23SZ-NEXT: Running pass: PromotePass
7777
; CHECK-O23SZ-NEXT: Running pass: ConstantMergePass
78-
; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass
7978
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
8079
; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass
8180
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
@@ -87,6 +86,7 @@
8786
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
8887
; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass
8988
; CHECK-O23SZ-NEXT: Running pass: ArgumentPromotionPass
89+
; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass
9090
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
9191
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
9292
; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
7979
; CHECK-O-NEXT: Running pass: GlobalOptPass
8080
; CHECK-O-NEXT: Running pass: PromotePass
81-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
8281
; CHECK-O-NEXT: Running pass: InstCombinePass
8382
; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
8483
; CHECK-O-NEXT: Running analysis: AAManager
@@ -188,6 +187,7 @@
188187
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
189188
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
190189
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
190+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
191191
; CHECK-O-NEXT: Running pass: CoroCleanupPass
192192
; CHECK-PRELINK-O-NEXT: Running pass: GlobalOptPass
193193
; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
4949
; CHECK-O-NEXT: Running pass: GlobalOptPass
5050
; CHECK-O-NEXT: Running pass: PromotePass
51-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
5251
; CHECK-O-NEXT: Running pass: InstCombinePass
5352
; CHECK-O-NEXT: Running analysis: AAManager
5453
; CHECK-O-NEXT: Running analysis: BasicAA
@@ -160,6 +159,7 @@
160159
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
161160
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
162161
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
162+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
163163
; CHECK-O-NEXT: Running pass: CoroCleanupPass
164164
; CHECK-O-NEXT: Running pass: GlobalOptPass
165165
; CHECK-O-NEXT: Running pass: GlobalDCEPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
6363
; CHECK-O-NEXT: Running pass: GlobalOptPass
6464
; CHECK-O-NEXT: Running pass: PromotePass
65-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
6665
; CHECK-O-NEXT: Running pass: InstCombinePass
6766
; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
6867
; These next two can appear in any order since they are accessed as parameters
@@ -172,6 +171,7 @@
172171
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
173172
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
174173
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
174+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
175175
; CHECK-O-NEXT: Running pass: CoroCleanupPass
176176
; CHECK-O-NEXT: Running pass: GlobalOptPass
177177
; CHECK-O-NEXT: Running pass: GlobalDCEPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
4949
; CHECK-O-NEXT: Running pass: GlobalOptPass
5050
; CHECK-O-NEXT: Running pass: PromotePass
51-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
5251
; CHECK-O-NEXT: Running pass: InstCombinePass
5352
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
5453
; CHECK-O-NEXT: Running analysis: AAManager
@@ -201,6 +200,7 @@
201200
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
202201
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
203202
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
203+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
204204
; CHECK-O-NEXT: Running pass: CoroCleanupPass
205205
; CHECK-O-NEXT: Running pass: GlobalOptPass
206206
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis on bar

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
5959
; CHECK-O-NEXT: Running pass: GlobalOptPass
6060
; CHECK-O-NEXT: Running pass: PromotePass
61-
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
6261
; CHECK-O-NEXT: Running pass: InstCombinePass
6362
; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
6463
; These next two can appear in any order since they are accessed as parameters
@@ -166,6 +165,7 @@
166165
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
167166
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
168167
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
168+
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
169169
; CHECK-O-NEXT: Running pass: CoroCleanupPass
170170
; CHECK-O-NEXT: Running pass: GlobalOptPass
171171
; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo

llvm/test/Transforms/InstCombine/unused-nonnull.ll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ target triple = "x86_64-unknown-linux-gnu"
99

1010
define i32 @main(i32 %argc, i8** %argv) #0 {
1111
; CHECK-LABEL: define {{[^@]+}}@main
12-
; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readnone [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
12+
; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readonly [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
1313
; CHECK-NEXT: entry:
1414
; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i32 [[ARGC]], 2
1515
; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[TMP0]], i32 0, i32 [[ARGC]]
@@ -37,7 +37,8 @@ done:
3737

3838
define i32 @compute(i8* noundef nonnull %ptr, i32 %x) #1 {
3939
; CHECK-LABEL: define {{[^@]+}}@compute
40-
; CHECK-SAME: (i8* nocapture nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
40+
; CHECK-SAME: (i8* nocapture noundef nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]])
41+
; CHECK-SAME: local_unnamed_addr #[[ATTR1:[0-9]+]] {
4142
; CHECK-NEXT: ret i32 [[X]]
4243
;
4344
ret i32 %x

llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
define internal void @f(%struct.ss* byval(%struct.ss) align 8 %b, i32* byval(i32) align 4 %X) noinline nounwind {
1111
; CHECK-LABEL: define {{[^@]+}}@f
12-
; CHECK-SAME: (i32 [[B_0:%.*]], i32 [[X:%.*]]){{[^#]*}} #[[ATTR0:[0-9]+]] {
12+
; CHECK-SAME: (i32 [[B_0:%.*]]){{[^#]*}} #[[ATTR0:[0-9]+]] {
1313
; CHECK-NEXT: entry:
1414
; CHECK-NEXT: [[TEMP:%.*]] = add i32 [[B_0]], 1
1515
; CHECK-NEXT: store i32 [[TEMP]], i32* [[DUMMY]], align 4
@@ -28,8 +28,7 @@ define i32 @test(i32* %X) {
2828
; CHECK-LABEL: define {{[^@]+}}@test
2929
; CHECK-SAME: (i32* {{[^%]*}} [[X:%.*]]){{[^#]*}} #[[ATTR1:[0-9]+]] {
3030
; CHECK-NEXT: entry:
31-
; CHECK-NEXT: [[X_VAL:%.*]] = load i32, i32* [[X]], align 4
32-
; CHECK-NEXT: tail call {{.*}}void @f(i32 1, i32 [[X_VAL]])
31+
; CHECK-NEXT: tail call {{.*}}void @f(i32 1)
3332
; CHECK-NEXT: ret i32 0
3433
;
3534
entry:

0 commit comments

Comments
 (0)