[llvm] db20a7f - DAG: Fix constructing a temporary TargetTransformInfo instance (#168480)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 19 22:19:27 PST 2025
Author: Matt Arsenault
Date: 2025-11-20T01:19:23-05:00
New Revision: db20a7f2bcec85490e6ff5c998a948ccbe88ae46
URL: https://github.com/llvm/llvm-project/commit/db20a7f2bcec85490e6ff5c998a948ccbe88ae46
DIFF: https://github.com/llvm/llvm-project/commit/db20a7f2bcec85490e6ff5c998a948ccbe88ae46.diff
LOG: DAG: Fix constructing a temporary TargetTransformInfo instance (#168480)
Added:
Modified:
llvm/include/llvm/CodeGen/SelectionDAGISel.h
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/SelectionDAGISel.h b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
index 27acc83369f02..c5cdf76f4777e 100644
--- a/llvm/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
@@ -58,9 +58,7 @@ class SelectionDAGISel {
AssumptionCache *AC = nullptr;
GCFunctionInfo *GFI = nullptr;
SSPLayoutInfo *SP = nullptr;
-#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
- TargetTransformInfo *TTI = nullptr;
-#endif
+ const TargetTransformInfo *TTI = nullptr;
CodeGenOptLevel OptLevel;
const TargetInstrInfo *TII;
const TargetLowering *TLI;
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 4f13f3b128ea4..985a54ca83256 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -1097,14 +1097,15 @@ RegsForValue::getRegsAndSizes() const {
}
void SelectionDAGBuilder::init(GCFunctionInfo *gfi, BatchAAResults *aa,
- AssumptionCache *ac,
- const TargetLibraryInfo *li) {
+ AssumptionCache *ac, const TargetLibraryInfo *li,
+ const TargetTransformInfo &TTI) {
BatchAA = aa;
AC = ac;
GFI = gfi;
LibInfo = li;
Context = DAG.getContext();
LPadToCallSiteMap.clear();
+ this->TTI = &TTI;
SL->init(DAG.getTargetLoweringInfo(), TM, DAG.getDataLayout());
AssignmentTrackingEnabled = isAssignmentTrackingEnabled(
*DAG.getMachineFunction().getFunction().getParent());
@@ -2589,10 +2590,6 @@ bool SelectionDAGBuilder::shouldKeepJumpConditionsTogether(
if (!LhsDeps.contains(RhsI))
RhsDeps.try_emplace(RhsI, false);
- const auto &TLI = DAG.getTargetLoweringInfo();
- const auto &TTI =
- TLI.getTargetMachine().getTargetTransformInfo(*I.getFunction());
-
InstructionCost CostOfIncluding = 0;
// See if this instruction will need to computed independently of whether RHS
// is.
@@ -2632,8 +2629,8 @@ bool SelectionDAGBuilder::shouldKeepJumpConditionsTogether(
// RHS condition. Use latency because we are essentially trying to calculate
// the cost of the dependency chain.
// Possible TODO: We could try to estimate ILP and make this more precise.
- CostOfIncluding +=
- TTI.getInstructionCost(InsPair.first, TargetTransformInfo::TCK_Latency);
+ CostOfIncluding += TTI->getInstructionCost(
+ InsPair.first, TargetTransformInfo::TCK_Latency);
if (CostOfIncluding > CostThresh)
return false;
@@ -4915,10 +4912,9 @@ void SelectionDAGBuilder::visitMaskedStore(const CallInst &I,
LocationSize::beforeOrAfterPointer(), Alignment, I.getAAMetadata());
const auto &TLI = DAG.getTargetLoweringInfo();
- const auto &TTI =
- TLI.getTargetMachine().getTargetTransformInfo(*I.getFunction());
+
SDValue StoreNode =
- !IsCompressing && TTI.hasConditionalLoadStoreForType(
+ !IsCompressing && TTI->hasConditionalLoadStoreForType(
I.getArgOperand(0)->getType(), /*IsStore=*/true)
? TLI.visitMaskedStore(DAG, sdl, getMemoryRoot(), MMO, Ptr, Src0,
Mask)
@@ -5073,14 +5069,14 @@ void SelectionDAGBuilder::visitMaskedLoad(const CallInst &I, bool IsExpanding) {
LocationSize::beforeOrAfterPointer(), Alignment, AAInfo, Ranges);
const auto &TLI = DAG.getTargetLoweringInfo();
- const auto &TTI =
- TLI.getTargetMachine().getTargetTransformInfo(*I.getFunction());
+
// The Load/Res may point to
diff erent values and both of them are output
// variables.
SDValue Load;
SDValue Res;
- if (!IsExpanding && TTI.hasConditionalLoadStoreForType(Src0Operand->getType(),
- /*IsStore=*/false))
+ if (!IsExpanding &&
+ TTI->hasConditionalLoadStoreForType(Src0Operand->getType(),
+ /*IsStore=*/false))
Res = TLI.visitMaskedLoad(DAG, sdl, InChain, MMO, Load, Ptr, Src0, Mask);
else
Res = Load =
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
index 13e2daa783147..d2f720df61e72 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
@@ -232,6 +232,7 @@ class SelectionDAGBuilder {
BatchAAResults *BatchAA = nullptr;
AssumptionCache *AC = nullptr;
const TargetLibraryInfo *LibInfo = nullptr;
+ const TargetTransformInfo *TTI = nullptr;
class SDAGSwitchLowering : public SwitchCG::SwitchLowering {
public:
@@ -285,7 +286,7 @@ class SelectionDAGBuilder {
FuncInfo(funcinfo), SwiftError(swifterror) {}
void init(GCFunctionInfo *gfi, BatchAAResults *BatchAA, AssumptionCache *AC,
- const TargetLibraryInfo *li);
+ const TargetLibraryInfo *li, const TargetTransformInfo &TTI);
/// Clear out the current SelectionDAG and the associated state and prepare
/// this SelectionDAGBuilder object to be used for a new block. This doesn't
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 5bed32db528d6..0fad4722b1871 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -519,9 +519,7 @@ void SelectionDAGISel::initializeAnalysisResults(
SP = &FAM.getResult<SSPLayoutAnalysis>(Fn);
-#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
TTI = &FAM.getResult<TargetIRAnalysis>(Fn);
-#endif
}
void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
@@ -578,9 +576,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
SP = &MFP.getAnalysis<StackProtector>().getLayoutInfo();
-#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
TTI = &MFP.getAnalysis<TargetTransformInfoWrapperPass>().getTTI(Fn);
-#endif
}
bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
@@ -593,7 +589,7 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
ISEL_DUMP(dbgs() << "\n\n\n=== " << FuncName << '\n');
- SDB->init(GFI, getBatchAA(), AC, LibInfo);
+ SDB->init(GFI, getBatchAA(), AC, LibInfo, *TTI);
MF->setHasInlineAsm(false);
More information about the llvm-commits
mailing list