@@ -1571,10 +1571,15 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
15711571 }
15721572
15731573 InstructionCost
1574- getGatherScatterOpCost (unsigned Opcode, Type *DataTy, const Value *Ptr,
1575- bool VariableMask, Align Alignment,
1576- TTI::TargetCostKind CostKind,
1577- const Instruction *I = nullptr ) const override {
1574+ getGatherScatterOpCost (const MemIntrinsicCostAttributes &MICA,
1575+ TTI::TargetCostKind CostKind) const override {
1576+ unsigned Opcode = (MICA.getID () == Intrinsic::masked_gather ||
1577+ MICA.getID () == Intrinsic::vp_gather)
1578+ ? Instruction::Load
1579+ : Instruction::Store;
1580+ Type *DataTy = MICA.getDataType ();
1581+ bool VariableMask = MICA.getVariableMask ();
1582+ Align Alignment = MICA.getAlignment ();
15781583 return getCommonMaskedMemoryOpCost (Opcode, DataTy, Alignment, VariableMask,
15791584 true , CostKind);
15801585 }
@@ -1598,8 +1603,10 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
15981603 // For a target without strided memory operations (or for an illegal
15991604 // operation type on one which does), assume we lower to a gather/scatter
16001605 // operation. (Which may in turn be scalarized.)
1601- return thisT ()->getGatherScatterOpCost (Opcode, DataTy, Ptr, VariableMask,
1602- Alignment, CostKind, I);
1606+ unsigned IID = Opcode == Instruction::Load ? Intrinsic::masked_gather
1607+ : Intrinsic::masked_scatter;
1608+ return thisT ()->getGatherScatterOpCost (
1609+ {IID, DataTy, Ptr, VariableMask, Alignment, I}, CostKind);
16031610 }
16041611
16051612 InstructionCost getInterleavedMemoryOpCost (
@@ -1826,8 +1833,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
18261833 Alignment = VPI->getPointerAlignment ().valueOrOne ();
18271834 bool VarMask = isa<Constant>(ICA.getArgs ()[2 ]);
18281835 return thisT ()->getGatherScatterOpCost (
1829- Instruction::Store, ICA.getArgTypes ()[0 ], ICA.getArgs ()[1 ], VarMask,
1830- Alignment, CostKind, nullptr );
1836+ {ICA.getID (), ICA.getArgTypes ()[0 ], ICA.getArgs ()[1 ], VarMask,
1837+ Alignment, nullptr },
1838+ CostKind);
18311839 }
18321840 if (ICA.getID () == Intrinsic::vp_gather) {
18331841 if (ICA.isTypeBasedOnly ()) {
@@ -1842,8 +1850,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
18421850 Alignment = VPI->getPointerAlignment ().valueOrOne ();
18431851 bool VarMask = isa<Constant>(ICA.getArgs ()[1 ]);
18441852 return thisT ()->getGatherScatterOpCost (
1845- Instruction::Load, ICA.getReturnType (), ICA.getArgs ()[0 ], VarMask,
1846- Alignment, CostKind, nullptr );
1853+ {ICA.getID (), ICA.getReturnType (), ICA.getArgs ()[0 ], VarMask,
1854+ Alignment, nullptr },
1855+ CostKind);
18471856 }
18481857
18491858 if (ICA.getID () == Intrinsic::vp_select ||
@@ -1948,16 +1957,16 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19481957 const Value *Mask = Args[2 ];
19491958 bool VarMask = !isa<Constant>(Mask);
19501959 Align Alignment = I->getParamAlign (1 ).valueOrOne ();
1951- return thisT ()->getGatherScatterOpCost (Instruction::Store,
1952- ICA.getArgTypes ()[0 ], Args[1 ],
1953- VarMask, Alignment, CostKind, I );
1960+ return thisT ()->getGatherScatterOpCost (
1961+ {IID, ICA.getArgTypes ()[0 ], Args[1 ], VarMask, Alignment, I} ,
1962+ CostKind);
19541963 }
19551964 case Intrinsic::masked_gather: {
19561965 const Value *Mask = Args[1 ];
19571966 bool VarMask = !isa<Constant>(Mask);
19581967 Align Alignment = I->getParamAlign (0 ).valueOrOne ();
1959- return thisT ()->getGatherScatterOpCost (Instruction::Load, RetTy, Args[ 0 ],
1960- VarMask, Alignment, CostKind, I );
1968+ return thisT ()->getGatherScatterOpCost (
1969+ {IID, RetTy, Args[ 0 ], VarMask, Alignment, I}, CostKind );
19611970 }
19621971 case Intrinsic::masked_compressstore: {
19631972 const Value *Data = Args[0 ];
0 commit comments