[llvm] AMDGPU: Fix creating temporary TTI in AMDGPUCodeGenPrepare (PR #209976)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 23:04:22 PDT 2026
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/209976
This should always be queried from the pass manager
Co-authored-by: Claude (Claude Opus 4.8) <noreply at anthropic.com>
>From e0d65088e1a77bca3e0f8afb144ed396724132f5 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 16 Jul 2026 08:03:01 +0200
Subject: [PATCH] AMDGPU: Fix creating temporary TTI in AMDGPUCodeGenPrepare
This should always be queried from the pass manager
Co-authored-by: Claude (Claude Opus 4.8) <noreply at anthropic.com>
---
llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
index f6679fce1c4fa..fd0eb6d7a12e7 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
@@ -101,6 +101,7 @@ class AMDGPUCodeGenPrepareImpl
Function &F;
const GCNSubtarget &ST;
const AMDGPUTargetMachine &TM;
+ const TargetTransformInfo &TTI;
const TargetLibraryInfo *TLI;
const UniformityInfo &UA;
const DataLayout &DL;
@@ -114,10 +115,11 @@ class AMDGPUCodeGenPrepareImpl
DenseMap<const PHINode *, bool> BreakPhiNodesCache;
AMDGPUCodeGenPrepareImpl(Function &F, const AMDGPUTargetMachine &TM,
+ const TargetTransformInfo &TTI,
const TargetLibraryInfo *TLI, AssumptionCache *AC,
const DominatorTree *DT, const UniformityInfo &UA)
- : F(F), ST(TM.getSubtarget<GCNSubtarget>(F)), TM(TM), TLI(TLI), UA(UA),
- DL(F.getDataLayout()), SQ(DL, TLI, DT, AC),
+ : F(F), ST(TM.getSubtarget<GCNSubtarget>(F)), TM(TM), TTI(TTI), TLI(TLI),
+ UA(UA), DL(F.getDataLayout()), SQ(DL, TLI, DT, AC),
HasFP32DenormalFlush(SIModeRegisterDefaults(F, ST).FP32Denormals ==
DenormalMode::getPreserveSign()) {}
@@ -279,6 +281,7 @@ class AMDGPUCodeGenPrepare : public FunctionPass {
AU.addRequired<AssumptionCacheTracker>();
AU.addRequired<UniformityInfoWrapperPass>();
AU.addRequired<TargetLibraryInfoWrapperPass>();
+ AU.addRequired<TargetTransformInfoWrapperPass>();
// FIXME: Division expansion needs to preserve the dominator tree.
if (!ExpandDiv64InIR)
@@ -1406,7 +1409,6 @@ bool AMDGPUCodeGenPrepareImpl::tryNarrowMathIfNoOverflow(Instruction *I) {
NewType = I->getType()->getWithNewBitWidth(NewBit);
// Old cost
- const TargetTransformInfo &TTI = TM.getTargetTransformInfo(F);
InstructionCost OldCost =
TTI.getArithmeticInstrCost(Opc, OldType, TTI::TCK_RecipThroughput);
// New cost of new op
@@ -2254,6 +2256,8 @@ bool AMDGPUCodeGenPrepare::runOnFunction(Function &F) {
return false;
const AMDGPUTargetMachine &TM = TPC->getTM<AMDGPUTargetMachine>();
+ const TargetTransformInfo &TTI =
+ getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
const TargetLibraryInfo *TLI =
&getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(F);
AssumptionCache *AC =
@@ -2262,17 +2266,18 @@ bool AMDGPUCodeGenPrepare::runOnFunction(Function &F) {
const DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;
const UniformityInfo &UA =
getAnalysis<UniformityInfoWrapperPass>().getUniformityInfo();
- return AMDGPUCodeGenPrepareImpl(F, TM, TLI, AC, DT, UA).run();
+ return AMDGPUCodeGenPrepareImpl(F, TM, TTI, TLI, AC, DT, UA).run();
}
PreservedAnalyses AMDGPUCodeGenPreparePass::run(Function &F,
FunctionAnalysisManager &FAM) {
const AMDGPUTargetMachine &ATM = static_cast<const AMDGPUTargetMachine &>(TM);
+ const TargetTransformInfo &TTI = FAM.getResult<TargetIRAnalysis>(F);
const TargetLibraryInfo *TLI = &FAM.getResult<TargetLibraryAnalysis>(F);
AssumptionCache *AC = &FAM.getResult<AssumptionAnalysis>(F);
const DominatorTree *DT = FAM.getCachedResult<DominatorTreeAnalysis>(F);
const UniformityInfo &UA = FAM.getResult<UniformityInfoAnalysis>(F);
- AMDGPUCodeGenPrepareImpl Impl(F, ATM, TLI, AC, DT, UA);
+ AMDGPUCodeGenPrepareImpl Impl(F, ATM, TTI, TLI, AC, DT, UA);
if (!Impl.run())
return PreservedAnalyses::all();
PreservedAnalyses PA = PreservedAnalyses::none();
@@ -2285,6 +2290,7 @@ INITIALIZE_PASS_BEGIN(AMDGPUCodeGenPrepare, DEBUG_TYPE,
"AMDGPU IR optimizations", false, false)
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
+INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)
INITIALIZE_PASS_DEPENDENCY(UniformityInfoWrapperPass)
INITIALIZE_PASS_END(AMDGPUCodeGenPrepare, DEBUG_TYPE, "AMDGPU IR optimizations",
false, false)
More information about the llvm-commits
mailing list