https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/165197
>From c4f4a6be5d21b8204e48fb5b8971dcac3d13d56f Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Sun, 26 Oct 2025 02:44:00 +0900 Subject: [PATCH] ExpandFp: Require RuntimeLibcallsInfo analysis Not sure I'm doing the new pass manager handling correctly. I do not like needing to manually check if the cached module pass is available and manually erroring in every pass. --- llvm/lib/CodeGen/ExpandFp.cpp | 14 ++++++++++++++ llvm/test/Transforms/ExpandFp/AMDGPU/frem-inf.ll | 4 ++-- llvm/test/Transforms/ExpandFp/AMDGPU/frem.ll | 2 +- .../Transforms/ExpandFp/AMDGPU/missing-analysis.ll | 6 ++++++ .../Transforms/ExpandFp/AMDGPU/pass-parameters.ll | 8 ++++---- 5 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 llvm/test/Transforms/ExpandFp/AMDGPU/missing-analysis.ll diff --git a/llvm/lib/CodeGen/ExpandFp.cpp b/llvm/lib/CodeGen/ExpandFp.cpp index f44eb227133ae..9386ffe7791a3 100644 --- a/llvm/lib/CodeGen/ExpandFp.cpp +++ b/llvm/lib/CodeGen/ExpandFp.cpp @@ -18,6 +18,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/Analysis/AssumptionCache.h" #include "llvm/Analysis/GlobalsModRef.h" +#include "llvm/Analysis/RuntimeLibcallInfo.h" #include "llvm/Analysis/SimplifyQuery.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/CodeGen/ISDOpcodes.h" @@ -1092,6 +1093,8 @@ class ExpandFpLegacyPass : public FunctionPass { auto *TM = &getAnalysis<TargetPassConfig>().getTM<TargetMachine>(); auto *TLI = TM->getSubtargetImpl(F)->getTargetLowering(); AssumptionCache *AC = nullptr; + const RTLIB::RuntimeLibcallsInfo *Libcalls = + &getAnalysis<RuntimeLibraryInfoWrapper>().getRTLCI(*F.getParent()); if (OptLevel != CodeGenOptLevel::None && !F.hasOptNone()) AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F); @@ -1104,6 +1107,7 @@ class ExpandFpLegacyPass : public FunctionPass { AU.addRequired<AssumptionCacheTracker>(); AU.addPreserved<AAResultsWrapperPass>(); AU.addPreserved<GlobalsAAWrapperPass>(); + AU.addRequired<RuntimeLibraryInfoWrapper>(); } }; } // namespace @@ -1126,6 +1130,15 @@ PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) { AssumptionCache *AC = nullptr; if (OptLevel != CodeGenOptLevel::None) AC = &FAM.getResult<AssumptionAnalysis>(F); + + auto &MAMProxy = FAM.getResult<ModuleAnalysisManagerFunctionProxy>(F); + const RTLIB::RuntimeLibcallsInfo *Libcalls = + MAMProxy.getCachedResult<RuntimeLibraryAnalysis>(*F.getParent()); + if (!Libcalls) { + F.getContext().emitError("'runtime-libcall-info' analysis required"); + return PreservedAnalyses::all(); + } + return runImpl(F, TLI, AC) ? PreservedAnalyses::none() : PreservedAnalyses::all(); } @@ -1133,6 +1146,7 @@ PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) { char ExpandFpLegacyPass::ID = 0; INITIALIZE_PASS_BEGIN(ExpandFpLegacyPass, "expand-fp", "Expand certain fp instructions", false, false) +INITIALIZE_PASS_DEPENDENCY(RuntimeLibraryInfoWrapper) INITIALIZE_PASS_END(ExpandFpLegacyPass, "expand-fp", "Expand fp", false, false) FunctionPass *llvm::createExpandFpPass(CodeGenOptLevel OptLevel) { diff --git a/llvm/test/Transforms/ExpandFp/AMDGPU/frem-inf.ll b/llvm/test/Transforms/ExpandFp/AMDGPU/frem-inf.ll index f70f0d25f172d..4d302f63e1f0b 100644 --- a/llvm/test/Transforms/ExpandFp/AMDGPU/frem-inf.ll +++ b/llvm/test/Transforms/ExpandFp/AMDGPU/frem-inf.ll @@ -1,5 +1,5 @@ -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O0>" %s -S -o - | FileCheck --check-prefixes CHECK %s -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O1>" %s -S -o - | FileCheck --check-prefixes CHECK,OPT1 %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O0>" %s -S -o - | FileCheck --check-prefixes CHECK %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O1>" %s -S -o - | FileCheck --check-prefixes CHECK,OPT1 %s ; Check the handling of potentially infinite numerators in the frem ; expansion at different optimization levels and with different diff --git a/llvm/test/Transforms/ExpandFp/AMDGPU/frem.ll b/llvm/test/Transforms/ExpandFp/AMDGPU/frem.ll index 4c0f9db147c96..56ccfb6bf454c 100644 --- a/llvm/test/Transforms/ExpandFp/AMDGPU/frem.ll +++ b/llvm/test/Transforms/ExpandFp/AMDGPU/frem.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O1>" %s -S -o - | FileCheck %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O1>" %s -S -o - | FileCheck %s define amdgpu_kernel void @frem_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ; CHECK-LABEL: define amdgpu_kernel void @frem_f16( diff --git a/llvm/test/Transforms/ExpandFp/AMDGPU/missing-analysis.ll b/llvm/test/Transforms/ExpandFp/AMDGPU/missing-analysis.ll new file mode 100644 index 0000000000000..5cad68e66d3ee --- /dev/null +++ b/llvm/test/Transforms/ExpandFp/AMDGPU/missing-analysis.ll @@ -0,0 +1,6 @@ +; RUN: not opt -mtriple=amdgcn -passes=expand-fp -disable-output %s 2>&1 | FileCheck %s + +; CHECK: 'runtime-libcall-info' analysis required +define void @empty() { + ret void +} diff --git a/llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll b/llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll index 03cafd4ff1160..b3ee0a94ed348 100644 --- a/llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll +++ b/llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll @@ -1,7 +1,7 @@ -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O0>" %s -S -o /dev/null -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O1>" %s -S -o /dev/null -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O2>" %s -S -o /dev/null -; RUN: opt -mtriple=amdgcn -passes="expand-fp<O3>" %s -S -o /dev/null +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O0>" -disable-output %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O1>" -disable-output %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O2>" -disable-output %s +; RUN: opt -mtriple=amdgcn -passes="require<runtime-libcall-info>,expand-fp<O3>" -disable-output %s ; RUN: not opt -mtriple=amdgcn -passes="expand-fp<O4>" %s -S -o /dev/null 2>&1 | FileCheck --check-prefix=TOO-LARGE %s ; TOO-LARGE: {{.*}}invalid optimization level for expand-fp pass: 4 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
