Skip to content

Commit f964417

Browse files
committed
Revert "[Pipelines] Introduce DAE after ArgumentPromotion"
The commit breaks the compiler when a function is used as a function parameter (hm... for a function from the standard C library?): ``` static float strtof(char *, char *) {} void a() { strtof(a, 0); } ``` This reverts commit 879f511.
1 parent 6e81eae commit f964417

11 files changed

+29
-26
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
; CHECK-O: Running pass: CalledValuePropagationPass
3535
; CHECK-O: Running pass: GlobalOptPass
3636
; CHECK-O: Running pass: PromotePass
37+
; CHECK-O: Running pass: DeadArgumentEliminationPass
3738
; CHECK-O: Running pass: InstCombinePass on main
3839
; CHECK-O: Running pass: SimplifyCFGPass on main
3940
; CHECK-O: Running pass: InlinerPass on (main)
@@ -73,7 +74,6 @@
7374
; CHECK-O: Running pass: LCSSAPass on main
7475
; CHECK-O: Running pass: SimplifyCFGPass on main
7576
; 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: 16 additions & 13 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,9 +734,10 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
734734
if (PGOOpt)
735735
IP.EnableDeferral = EnablePGOInlineDeferral;
736736

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

741742
// Require the GlobalsAA analysis for the module so we can query it within
742743
// the CGSCC pipeline.
@@ -960,6 +961,10 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
960961
// constants.
961962
MPM.addPass(createModuleToFunctionPassAdaptor(PromotePass()));
962963

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

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

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

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

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

1632-
// Remove unused arguments from functions.
1633-
MPM.addPass(DeadArgumentEliminationPass());
1634-
16351636
FunctionPassManager FPM;
16361637
// The IPO Passes may leave cruft around. Clean up after them.
16371638
FPM.addPass(InstCombinePass());
@@ -1694,6 +1695,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
16941695
MainFPM.addPass(DSEPass());
16951696
MainFPM.addPass(MergedLoadStoreMotionPass());
16961697

1698+
16971699
if (EnableConstraintElimination)
16981700
MainFPM.addPass(ConstraintEliminationPass());
16991701

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

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

17231726
invokePeepholeEPCallbacks(MainFPM, Level);
17241727
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,6 +112,7 @@
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
115116
; CHECK-O-NEXT: Running pass: InstCombinePass
116117
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
117118
; CHECK-O-NEXT: Running analysis: AAManager
@@ -218,7 +219,6 @@
218219
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
219220
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
220221
; 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,6 +75,7 @@
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
7879
; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
7980
; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass
8081
; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
@@ -86,7 +87,6 @@
8687
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
8788
; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass
8889
; 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,6 +78,7 @@
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
8182
; CHECK-O-NEXT: Running pass: InstCombinePass
8283
; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
8384
; CHECK-O-NEXT: Running analysis: AAManager
@@ -187,7 +188,6 @@
187188
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
188189
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
189190
; 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,6 +48,7 @@
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
5152
; CHECK-O-NEXT: Running pass: InstCombinePass
5253
; CHECK-O-NEXT: Running analysis: AAManager
5354
; CHECK-O-NEXT: Running analysis: BasicAA
@@ -159,7 +160,6 @@
159160
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
160161
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
161162
; 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,6 +62,7 @@
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
6566
; CHECK-O-NEXT: Running pass: InstCombinePass
6667
; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
6768
; These next two can appear in any order since they are accessed as parameters
@@ -171,7 +172,6 @@
171172
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
172173
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
173174
; 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,6 +48,7 @@
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
5152
; CHECK-O-NEXT: Running pass: InstCombinePass
5253
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
5354
; CHECK-O-NEXT: Running analysis: AAManager
@@ -200,7 +201,6 @@
200201
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
201202
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
202203
; 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,6 +58,7 @@
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
6162
; CHECK-O-NEXT: Running pass: InstCombinePass
6263
; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
6364
; These next two can appear in any order since they are accessed as parameters
@@ -165,7 +166,6 @@
165166
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
166167
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
167168
; 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: 2 additions & 3 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 readonly [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
12+
; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readnone [[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,8 +37,7 @@ done:
3737

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

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

Lines changed: 3 additions & 2 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:%.*]]){{[^#]*}} #[[ATTR0:[0-9]+]] {
12+
; CHECK-SAME: (i32 [[B_0:%.*]], i32 [[X:%.*]]){{[^#]*}} #[[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,7 +28,8 @@ 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: tail call {{.*}}void @f(i32 1)
31+
; CHECK-NEXT: [[X_VAL:%.*]] = load i32, i32* [[X]], align 4
32+
; CHECK-NEXT: tail call {{.*}}void @f(i32 1, i32 [[X_VAL]])
3233
; CHECK-NEXT: ret i32 0
3334
;
3435
entry:

0 commit comments

Comments
 (0)