Skip to content

Commit e3f7b3d

Browse files
committed
[𝘀𝗽𝗿] initial version
Created using spr 1.3.4
2 parents 5deb2aa + 250d832 commit e3f7b3d

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -411,16 +411,25 @@ static bool isLTOPreLink(ThinOrFullLTOPhase Phase) {
411411
Phase == ThinOrFullLTOPhase::FullLTOPreLink;
412412
}
413413

414+
// Helper to check if the current compilation phase is LTO backend
415+
static bool isLTOPostLink(ThinOrFullLTOPhase Phase) {
416+
return Phase == ThinOrFullLTOPhase::ThinLTOPostLink ||
417+
Phase == ThinOrFullLTOPhase::FullLTOPostLink;
418+
}
419+
414420
// Helper to wrap conditionally Coro passes.
415421
static CoroConditionalWrapper buildCoroWrapper(ThinOrFullLTOPhase Phase) {
416422
// TODO: Skip passes according to Phase.
417423
ModulePassManager CoroPM;
418-
CoroPM.addPass(CoroEarlyPass());
419-
CGSCCPassManager CGPM;
420-
CGPM.addPass(CoroSplitPass());
421-
CoroPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM)));
422-
CoroPM.addPass(CoroCleanupPass());
423-
CoroPM.addPass(GlobalDCEPass());
424+
if (!isLTOPostLink(Phase))
425+
CoroPM.addPass(CoroEarlyPass());
426+
if (!isLTOPreLink(Phase)) {
427+
CGSCCPassManager CGPM;
428+
CGPM.addPass(CoroSplitPass());
429+
CoroPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM)));
430+
CoroPM.addPass(CoroCleanupPass());
431+
CoroPM.addPass(GlobalDCEPass());
432+
}
424433
return CoroConditionalWrapper(std::move(CoroPM));
425434
}
426435

@@ -1004,7 +1013,7 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
10041013
MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor(
10051014
RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function>()));
10061015

1007-
if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink) {
1016+
if (!isLTOPreLink(Phase)) {
10081017
MainCGPipeline.addPass(CoroSplitPass(Level != OptimizationLevel::O0));
10091018
MainCGPipeline.addPass(CoroAnnotationElidePass());
10101019
}
@@ -1054,7 +1063,7 @@ PassBuilder::buildModuleInlinerPipeline(OptimizationLevel Level,
10541063
buildFunctionSimplificationPipeline(Level, Phase),
10551064
PTO.EagerlyInvalidateAnalyses));
10561065

1057-
if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink) {
1066+
if (!isLTOPreLink(Phase)) {
10581067
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(
10591068
CoroSplitPass(Level != OptimizationLevel::O0)));
10601069
MPM.addPass(
@@ -1114,7 +1123,8 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
11141123
// Do basic inference of function attributes from known properties of system
11151124
// libraries and other oracles.
11161125
MPM.addPass(InferFunctionAttrsPass());
1117-
MPM.addPass(CoroEarlyPass());
1126+
if (!isLTOPostLink(Phase))
1127+
MPM.addPass(CoroEarlyPass());
11181128

11191129
FunctionPassManager EarlyFPM;
11201130
EarlyFPM.addPass(EntryExitInstrumenterPass(/*PostInlining=*/false));
@@ -1277,7 +1287,7 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
12771287
// and argument promotion.
12781288
MPM.addPass(DeadArgumentEliminationPass());
12791289

1280-
if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink)
1290+
if (!isLTOPreLink(Phase))
12811291
MPM.addPass(CoroCleanupPass());
12821292

12831293
// Optimize globals now that functions are fully simplified.
@@ -1613,8 +1623,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
16131623
MPM.addPass(MergeFunctionsPass());
16141624

16151625
if (PTO.CallGraphProfile && !LTOPreLink)
1616-
MPM.addPass(CGProfilePass(LTOPhase == ThinOrFullLTOPhase::FullLTOPostLink ||
1617-
LTOPhase == ThinOrFullLTOPhase::ThinLTOPostLink));
1626+
MPM.addPass(CGProfilePass(isLTOPostLink(LTOPhase)));
16181627

16191628
// RelLookupTableConverterPass runs later in LTO post-link pipeline.
16201629
if (!LTOPreLink)
@@ -1943,9 +1952,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
19431952
return MPM;
19441953
}
19451954

1946-
// TODO: Skip to match buildCoroWrapper.
1947-
MPM.addPass(CoroEarlyPass());
1948-
19491955
// Optimize globals to try and fold them into constants.
19501956
MPM.addPass(GlobalOptPass());
19511957

llvm/test/LTO/X86/coro.ll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
; RUN: llvm-as %s -o %t1.bc
1+
; RUN: opt %s -passes='lto-pre-link<O0>' -S -o %t1.ll
2+
; RUN: FileCheck %s --check-prefixes=CHECK,PRELINK --implicit-check-not="call void @llvm.coro" --input-file=%t1.ll
3+
; RUN: llvm-as %t1.ll -o %t1.bc
24
; RUN: llvm-lto2 run %t1.bc -o %t2.o -r=%t1.bc,test,plx -r=%t1.bc,extern_func,plx -save-temps
35
; RUN: llvm-dis %t2.o.0.5.precodegen.bc -o - | FileCheck %s --implicit-check-not="call void @llvm.coro"
46

@@ -7,7 +9,9 @@ target triple = "x86_64-unknown-fuchsia"
79

810
declare void @extern_func()
911

10-
; CHECK: define {{.*}} void @test(
12+
; CHECK: define{{.*}} void @test(
13+
; PRELINK: call ptr @llvm.coro.subfn.addr
14+
; PRELINK: call ptr @llvm.coro.subfn.addr
1115
define void @test(ptr %hdl) {
1216
call void @llvm.coro.resume(ptr %hdl)
1317
call void @llvm.coro.destroy(ptr %hdl)

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,13 @@
230230
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
231231
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
232232
; CHECK-O-NEXT: Running analysis: ShouldNotRunFunctionPassesAnalysis
233-
; CHECK-O-NEXT: Running pass: CoroSplitPass
234-
; CHECK-O-NEXT: Running pass: CoroAnnotationElidePass
233+
; CHECK-DEFAULT-NEXT: Running pass: CoroSplitPass
234+
; CHECK-DEFAULT-NEXT: Running pass: CoroAnnotationElidePass
235235
; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
236236
; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
237237
; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
238238
; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
239-
; CHECK-O-NEXT: Running pass: CoroCleanupPass
239+
; CHECK-DEFAULT-NEXT: Running pass: CoroCleanupPass
240240
; CHECK-O-NEXT: Running pass: GlobalOptPass
241241
; CHECK-O-NEXT: Running pass: GlobalDCEPass
242242
; CHECK-DEFAULT-NEXT: Running pass: EliminateAvailableExternallyPass

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis
6868
; CHECK-O-NEXT: Running pass: GlobalSplitPass
6969
; CHECK-O-NEXT: Running pass: WholeProgramDevirtPass
70-
; CHECK-O23SZ-NEXT: Running pass: CoroEarlyPass
7170
; CHECK-O1-NEXT: Running pass: LowerTypeTestsPass
7271
; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
7372
; CHECK-O23SZ-NEXT: Running pass: PromotePass

0 commit comments

Comments
 (0)