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 different 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(Fn); -#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS TTI = &FAM.getResult(Fn); -#endif } void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) { @@ -578,9 +576,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) { SP = &MFP.getAnalysis().getLayoutInfo(); -#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS TTI = &MFP.getAnalysis().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);