From 73aa22554d1108f9bee25c6f5d5371ce01369eef Mon Sep 17 00:00:00 2001 From: Gulfem Savrun Yeniceri Date: Wed, 22 Jan 2025 18:49:30 -0800 Subject: [PATCH] [PassBuilder] Add RelLookupTableConverterPass to LTO This patch adds RelLookupTableConverterPass into the LTO post-link optimization pass pipeline. This optimization converts lookup tables to relative lookup tables to make them PIC-friendly, which is already included in the non-LTO pass pipeline. This patch adds this optimization to the post-link optimization pipeline to discover more opportunities in the LTO context. --- llvm/docs/ReleaseNotes.md | 2 ++ llvm/lib/Passes/PassBuilderPipelines.cpp | 6 +++--- llvm/test/Other/new-pm-lto-defaults.ll | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index 48f962d212e86..d69ca9ff64360 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -127,6 +127,8 @@ Changes to TableGen Changes to Interprocedural Optimizations ---------------------------------------- +* Added RelLookupTableConverterPass to LTO post-link pass pipeline. + Changes to the AArch64 Backend ------------------------------ diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index 4ec0fb8fc81ea..17ff3bd37884b 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -1594,9 +1594,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level, MPM.addPass(CGProfilePass(LTOPhase == ThinOrFullLTOPhase::FullLTOPostLink || LTOPhase == ThinOrFullLTOPhase::ThinLTOPostLink)); - // TODO: Relative look table converter pass caused an issue when full lto is - // enabled. See https://reviews.llvm.org/D94355 for more details. - // Until the issue fixed, disable this pass during pre-linking phase. + // RelLookupTableConverterPass runs later in LTO post-link pipeline. if (!LTOPreLink) MPM.addPass(RelLookupTableConverterPass()); @@ -2121,6 +2119,8 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, if (PTO.MergeFunctions) MPM.addPass(MergeFunctionsPass()); + MPM.addPass(RelLookupTableConverterPass()); + if (PTO.CallGraphProfile) MPM.addPass(CGProfilePass(/*InLTOPostLink=*/true)); diff --git a/llvm/test/Other/new-pm-lto-defaults.ll b/llvm/test/Other/new-pm-lto-defaults.ll index f788db1e338a1..59d9ee24527b6 100644 --- a/llvm/test/Other/new-pm-lto-defaults.ll +++ b/llvm/test/Other/new-pm-lto-defaults.ll @@ -146,6 +146,7 @@ ; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass ; CHECK-O23SZ-NEXT: Running pass: EliminateAvailableExternallyPass ; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass +; CHECK-O23SZ-NEXT: Running pass: RelLookupTableConverterPass ; CHECK-O23SZ-NEXT: Running pass: CGProfilePass ; CHECK-EP-NEXT: Running pass: NoOpModulePass ; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo