@@ -1610,8 +1610,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
16101610 unsigned IID = Opcode == Instruction::Load ? Intrinsic::masked_load
16111611 : Intrinsic::masked_store;
16121612 Cost = thisT ()->getMemIntrinsicInstrCost (
1613- IID, VecTy, /* Ptr*/ nullptr , /* VariableMask*/ true , Alignment,
1614- CostKind, /* Instruction*/ nullptr );
1613+ {IID, VecTy, Alignment, AddressSpace}, CostKind);
16151614 } else
16161615 Cost = thisT ()->getMemoryOpCost (Opcode, VecTy, Alignment, AddressSpace,
16171616 CostKind);
@@ -1812,8 +1811,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
18121811 Alignment = VPI->getPointerAlignment ().valueOrOne ();
18131812 bool VarMask = isa<Constant>(ICA.getArgs ()[2 ]);
18141813 return thisT ()->getMemIntrinsicInstrCost (
1815- Intrinsic::vp_scatter, ICA.getArgTypes ()[0 ], ICA.getArgs ()[1 ],
1816- VarMask, Alignment, CostKind, nullptr );
1814+ {Intrinsic::vp_scatter, ICA.getArgTypes ()[0 ], ICA.getArgs ()[1 ],
1815+ VarMask, Alignment, nullptr },
1816+ CostKind);
18171817 }
18181818 if (ICA.getID () == Intrinsic::vp_gather) {
18191819 if (ICA.isTypeBasedOnly ()) {
@@ -1828,8 +1828,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
18281828 Alignment = VPI->getPointerAlignment ().valueOrOne ();
18291829 bool VarMask = isa<Constant>(ICA.getArgs ()[1 ]);
18301830 return thisT ()->getMemIntrinsicInstrCost (
1831- Intrinsic::vp_gather, ICA.getReturnType (), ICA.getArgs ()[0 ],
1832- VarMask, Alignment, CostKind, nullptr );
1831+ {Intrinsic::vp_gather, ICA.getReturnType (), ICA.getArgs ()[0 ],
1832+ VarMask, Alignment, nullptr },
1833+ CostKind);
18331834 }
18341835
18351836 if (ICA.getID () == Intrinsic::vp_select ||
@@ -1934,32 +1935,35 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19341935 const Value *Mask = Args[2 ];
19351936 bool VarMask = !isa<Constant>(Mask);
19361937 Align Alignment = I->getParamAlign (1 ).valueOrOne ();
1937- return thisT ()->getMemIntrinsicInstrCost (Intrinsic::masked_scatter,
1938- ICA.getArgTypes ()[0 ], Args[1 ],
1939- VarMask, Alignment, CostKind, I);
1938+ return thisT ()->getMemIntrinsicInstrCost ({Intrinsic::masked_scatter,
1939+ ICA.getArgTypes ()[0 ], Args[1 ],
1940+ VarMask, Alignment, I},
1941+ CostKind);
19401942 }
19411943 case Intrinsic::masked_gather: {
19421944 const Value *Mask = Args[1 ];
19431945 bool VarMask = !isa<Constant>(Mask);
19441946 Align Alignment = I->getParamAlign (0 ).valueOrOne ();
1945- return thisT ()->getMemIntrinsicInstrCost (Intrinsic::masked_gather, RetTy,
1946- Args[0 ], VarMask, Alignment,
1947- CostKind, I );
1947+ return thisT ()->getMemIntrinsicInstrCost (
1948+ {Intrinsic::masked_gather, RetTy, Args[0 ], VarMask, Alignment, I} ,
1949+ CostKind);
19481950 }
19491951 case Intrinsic::masked_compressstore: {
19501952 const Value *Data = Args[0 ];
19511953 const Value *Mask = Args[2 ];
19521954 Align Alignment = I->getParamAlign (1 ).valueOrOne ();
19531955 return thisT ()->getMemIntrinsicInstrCost (
1954- Intrinsic::masked_compressstore, Data->getType (), Args[1 ],
1955- !isa<Constant>(Mask), Alignment, CostKind, I);
1956+ {Intrinsic::masked_compressstore, Data->getType (),
1957+ !isa<Constant>(Mask), Alignment, I},
1958+ CostKind);
19561959 }
19571960 case Intrinsic::masked_expandload: {
19581961 const Value *Mask = Args[1 ];
19591962 Align Alignment = I->getParamAlign (0 ).valueOrOne ();
1960- return thisT ()->getMemIntrinsicInstrCost (
1961- Intrinsic::masked_expandload, RetTy, Args[0 ], !isa<Constant>(Mask),
1962- Alignment, CostKind, I);
1963+ return thisT ()->getMemIntrinsicInstrCost ({Intrinsic::masked_expandload,
1964+ RetTy, !isa<Constant>(Mask),
1965+ Alignment, I},
1966+ CostKind);
19631967 }
19641968 case Intrinsic::experimental_vp_strided_store: {
19651969 const Value *Data = Args[0 ];
@@ -1970,8 +1974,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19701974 Type *EltTy = cast<VectorType>(Data->getType ())->getElementType ();
19711975 Align Alignment =
19721976 I->getParamAlign (1 ).value_or (thisT ()->DL .getABITypeAlign (EltTy));
1973- return thisT ()->getMemIntrinsicInstrCost (IID, Data-> getType (), Ptr,
1974- VarMask, Alignment, CostKind, I );
1977+ return thisT ()->getMemIntrinsicInstrCost (
1978+ {IID, Data-> getType (), Ptr, VarMask, Alignment, I}, CostKind );
19751979 }
19761980 case Intrinsic::experimental_vp_strided_load: {
19771981 const Value *Ptr = Args[0 ];
@@ -1981,8 +1985,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19811985 Type *EltTy = cast<VectorType>(RetTy)->getElementType ();
19821986 Align Alignment =
19831987 I->getParamAlign (0 ).value_or (thisT ()->DL .getABITypeAlign (EltTy));
1984- return thisT ()->getMemIntrinsicInstrCost (IID, RetTy, Ptr, VarMask,
1985- Alignment, CostKind, I );
1988+ return thisT ()->getMemIntrinsicInstrCost (
1989+ {IID, RetTy, Ptr, VarMask, Alignment, I}, CostKind );
19861990 }
19871991 case Intrinsic::stepvector: {
19881992 if (isa<ScalableVectorType>(RetTy))
@@ -2412,29 +2416,29 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
24122416 Type *Ty = Tys[0 ];
24132417 Align TyAlign = thisT ()->DL .getABITypeAlign (Ty);
24142418 return thisT ()->getMemIntrinsicInstrCost (
2415- Intrinsic::masked_store, Ty,
2416- /* Ptr*/ nullptr , /* VariableMask*/ true , TyAlign, CostKind, nullptr );
2419+ {Intrinsic::masked_store, Ty, TyAlign, 0 }, CostKind);
24172420 }
24182421 case Intrinsic::masked_load: {
24192422 Type *Ty = RetTy;
24202423 Align TyAlign = thisT ()->DL .getABITypeAlign (Ty);
24212424 return thisT ()->getMemIntrinsicInstrCost (
2422- Intrinsic::masked_load, Ty,
2423- /* Ptr*/ nullptr , /* VariableMask*/ true , TyAlign, CostKind, nullptr );
2425+ {Intrinsic::masked_load, Ty, TyAlign, 0 }, CostKind);
24242426 }
24252427 case Intrinsic::experimental_vp_strided_store: {
24262428 auto *Ty = cast<VectorType>(ICA.getArgTypes ()[0 ]);
24272429 Align Alignment = thisT ()->DL .getABITypeAlign (Ty->getElementType ());
2428- return thisT ()->getMemIntrinsicInstrCost (IID, Ty, /* Ptr=*/ nullptr ,
2429- /* VariableMask=*/ true , Alignment,
2430- CostKind, ICA.getInst ());
2430+ return thisT ()->getMemIntrinsicInstrCost ({IID, Ty, /* Ptr=*/ nullptr ,
2431+ /* VariableMask=*/ true ,
2432+ Alignment, ICA.getInst ()},
2433+ CostKind);
24312434 }
24322435 case Intrinsic::experimental_vp_strided_load: {
24332436 auto *Ty = cast<VectorType>(ICA.getReturnType ());
24342437 Align Alignment = thisT ()->DL .getABITypeAlign (Ty->getElementType ());
2435- return thisT ()->getMemIntrinsicInstrCost (IID, Ty, /* Ptr=*/ nullptr ,
2436- /* VariableMask=*/ true , Alignment,
2437- CostKind, ICA.getInst ());
2438+ return thisT ()->getMemIntrinsicInstrCost ({IID, Ty, /* Ptr=*/ nullptr ,
2439+ /* VariableMask=*/ true ,
2440+ Alignment, ICA.getInst ()},
2441+ CostKind);
24382442 }
24392443 case Intrinsic::vector_reduce_add:
24402444 case Intrinsic::vector_reduce_mul:
@@ -3024,10 +3028,16 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
30243028
30253029 // / Get memory intrinsic cost based on arguments.
30263030 InstructionCost
3027- getMemIntrinsicInstrCost (Intrinsic::ID Id, Type *DataTy, const Value *Ptr,
3028- bool VariableMask, Align Alignment,
3029- TTI::TargetCostKind CostKind,
3030- const Instruction *I) const override {
3031+ getMemIntrinsicInstrCost (const MemIntrinsicCostAttributes &MICA,
3032+ TTI::TargetCostKind CostKind) const override {
3033+ unsigned Id = MICA.getID ();
3034+ Type *DataTy = MICA.getDataType ();
3035+ const Value *Ptr = MICA.getPointer ();
3036+ const Instruction *I = MICA.getInst ();
3037+ bool VariableMask = MICA.getVariableMask ();
3038+ unsigned AS = MICA.getAddressSpace ();
3039+ Align Alignment = MICA.getAlignment ();
3040+
30313041 switch (Id) {
30323042 case Intrinsic::experimental_vp_strided_load:
30333043 case Intrinsic::experimental_vp_strided_store: {
@@ -3052,7 +3062,6 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
30523062 case Intrinsic::masked_store: {
30533063 unsigned Opcode =
30543064 Id == Intrinsic::masked_load ? Instruction::Load : Instruction::Store;
3055- unsigned AS = Ptr ? Ptr->getType ()->getPointerAddressSpace () : 0 ;
30563065 return thisT ()->getMaskedMemoryOpCost (Opcode, DataTy, Alignment, AS,
30573066 CostKind);
30583067 }
0 commit comments