From 11177f6d26c580c1ccf542b0792ede5f3fce8eb8 Mon Sep 17 00:00:00 2001 From: NewSigma Date: Mon, 15 Sep 2025 16:54:21 +0800 Subject: [PATCH 1/2] [LTO][Pipeline][Coro] Add missing coroutine passes to O0 post-link ThinLTO pipeline --- llvm/lib/Passes/PassBuilderPipelines.cpp | 2 +- llvm/test/Other/new-pm-O0-defaults.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index 98821bb1408a7..fa818c2f80d2c 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -1820,7 +1820,7 @@ ModulePassManager PassBuilder::buildThinLTODefaultPipeline( // with ThinLTO in order to avoid leaving undefined references to dead // globals in the object file. MPM.addPass(EliminateAvailableExternallyPass()); - MPM.addPass(GlobalDCEPass()); + MPM.addPass(buildCoroWrapper(ThinOrFullLTOPhase::ThinLTOPostLink)); return MPM; } if (!UseCtxProfile.empty()) { diff --git a/llvm/test/Other/new-pm-O0-defaults.ll b/llvm/test/Other/new-pm-O0-defaults.ll index 81d1ee0df2c5b..f2ed83ccc79ca 100644 --- a/llvm/test/Other/new-pm-O0-defaults.ll +++ b/llvm/test/Other/new-pm-O0-defaults.ll @@ -45,7 +45,7 @@ ; CHECK-PRE-LINK-NEXT: Running pass: NameAnonGlobalPass ; CHECK-THINLTO: Running pass: LowerTypeTestsPass ; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass -; CHECK-THINLTO-NEXT: Running pass: GlobalDCEPass +; CHECK-THINLTO-NEXT: Running pass: CoroConditionalWrapper ; CHECK-LTO: Running pass: CrossDSOCFIPass on [module] ; CHECK-LTO-NEXT: Running pass: WholeProgramDevirtPass ; CHECK-LTO-NEXT: Running analysis: InnerAnalysisManagerProxy From 11d7c92e9dde2cae38958e3a093a88b766c27a9c Mon Sep 17 00:00:00 2001 From: NewSigma Date: Mon, 22 Sep 2025 13:44:08 +0800 Subject: [PATCH 2/2] Restore GlobalDCE --- llvm/lib/Passes/PassBuilderPipelines.cpp | 3 ++- llvm/test/Other/new-pm-O0-defaults.ll | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index fa818c2f80d2c..5202ada76eb5a 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -1816,11 +1816,12 @@ ModulePassManager PassBuilder::buildThinLTODefaultPipeline( // in ICP. MPM.addPass(LowerTypeTestsPass(nullptr, nullptr, lowertypetests::DropTestKind::Assume)); + MPM.addPass(buildCoroWrapper(ThinOrFullLTOPhase::ThinLTOPostLink)); // Drop available_externally and unreferenced globals. This is necessary // with ThinLTO in order to avoid leaving undefined references to dead // globals in the object file. MPM.addPass(EliminateAvailableExternallyPass()); - MPM.addPass(buildCoroWrapper(ThinOrFullLTOPhase::ThinLTOPostLink)); + MPM.addPass(GlobalDCEPass()); return MPM; } if (!UseCtxProfile.empty()) { diff --git a/llvm/test/Other/new-pm-O0-defaults.ll b/llvm/test/Other/new-pm-O0-defaults.ll index f2ed83ccc79ca..278a89261691a 100644 --- a/llvm/test/Other/new-pm-O0-defaults.ll +++ b/llvm/test/Other/new-pm-O0-defaults.ll @@ -44,8 +44,9 @@ ; CHECK-PRE-LINK: Running pass: CanonicalizeAliasesPass ; CHECK-PRE-LINK-NEXT: Running pass: NameAnonGlobalPass ; CHECK-THINLTO: Running pass: LowerTypeTestsPass -; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass ; CHECK-THINLTO-NEXT: Running pass: CoroConditionalWrapper +; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass +; CHECK-THINLTO-NEXT: Running pass: GlobalDCEPass ; CHECK-LTO: Running pass: CrossDSOCFIPass on [module] ; CHECK-LTO-NEXT: Running pass: WholeProgramDevirtPass ; CHECK-LTO-NEXT: Running analysis: InnerAnalysisManagerProxy