DAG: Fix constructing a temporary TargetTransformInfo instance (#168480)
This commit is contained in:
parent
7f0dbf049a
commit
db20a7f2bc
@ -58,9 +58,7 @@ public:
|
||||
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;
|
||||
|
||||
@ -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 =
|
||||
|
||||
@ -232,6 +232,7 @@ public:
|
||||
BatchAAResults *BatchAA = nullptr;
|
||||
AssumptionCache *AC = nullptr;
|
||||
const TargetLibraryInfo *LibInfo = nullptr;
|
||||
const TargetTransformInfo *TTI = nullptr;
|
||||
|
||||
class SDAGSwitchLowering : public SwitchCG::SwitchLowering {
|
||||
public:
|
||||
@ -285,7 +286,7 @@ public:
|
||||
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
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user