@@ -329,11 +329,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
329329 // Cost the call + mask.
330330 auto Cost =
331331 thisT ()->getCallInstrCost (nullptr , RetTy, ICA.getArgTypes (), CostKind);
332- if (VD->isMasked ())
333- Cost += thisT ()-> getShuffleCost (
334- TargetTransformInfo::SK_Broadcast,
335- VectorType::get ( IntegerType::getInt1Ty (Ctx), VF) , {}, CostKind, 0 ,
336- nullptr , {});
332+ if (VD->isMasked ()) {
333+ auto VecTy = VectorType::get ( IntegerType::getInt1Ty (Ctx), VF);
334+ Cost += thisT ()-> getShuffleCost ( TargetTransformInfo::SK_Broadcast, VecTy ,
335+ VecTy , {}, CostKind, 0 , nullptr , {});
336+ }
337337
338338 // Lowering to a library call (with output pointers) may require us to emit
339339 // reloads for the results.
@@ -1101,11 +1101,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
11011101
11021102 TTI::ShuffleKind improveShuffleKindFromMask (TTI::ShuffleKind Kind,
11031103 ArrayRef<int > Mask,
1104- VectorType *Ty , int &Index,
1104+ VectorType *SrcTy , int &Index,
11051105 VectorType *&SubTy) const {
11061106 if (Mask.empty ())
11071107 return Kind;
1108- int NumSrcElts = Ty ->getElementCount ().getKnownMinValue ();
1108+ int NumSrcElts = SrcTy ->getElementCount ().getKnownMinValue ();
11091109 switch (Kind) {
11101110 case TTI::SK_PermuteSingleSrc: {
11111111 if (ShuffleVectorInst::isReverseMask (Mask, NumSrcElts))
@@ -1116,7 +1116,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
11161116 return TTI::SK_Broadcast;
11171117 if (ShuffleVectorInst::isExtractSubvectorMask (Mask, NumSrcElts, Index) &&
11181118 (Index + Mask.size ()) <= (size_t )NumSrcElts) {
1119- SubTy = FixedVectorType::get (Ty ->getElementType (), Mask.size ());
1119+ SubTy = FixedVectorType::get (SrcTy ->getElementType (), Mask.size ());
11201120 return TTI::SK_ExtractSubvector;
11211121 }
11221122 break ;
@@ -1127,7 +1127,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
11271127 Mask, NumSrcElts, NumSubElts, Index)) {
11281128 if (Index + NumSubElts > NumSrcElts)
11291129 return Kind;
1130- SubTy = FixedVectorType::get (Ty ->getElementType (), NumSubElts);
1130+ SubTy = FixedVectorType::get (SrcTy ->getElementType (), NumSubElts);
11311131 return TTI::SK_InsertSubvector;
11321132 }
11331133 if (ShuffleVectorInst::isSelectMask (Mask, NumSrcElts))
@@ -1151,13 +1151,13 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
11511151 }
11521152
11531153 InstructionCost
1154- getShuffleCost (TTI::ShuffleKind Kind, VectorType *Tp, ArrayRef< int > Mask ,
1155- TTI::TargetCostKind CostKind, int Index, VectorType *SubTp ,
1156- ArrayRef<const Value *> Args = {},
1154+ getShuffleCost (TTI::ShuffleKind Kind, VectorType *DstTy, VectorType *SrcTy ,
1155+ ArrayRef< int > Mask, TTI::TargetCostKind CostKind, int Index,
1156+ VectorType *SubTp, ArrayRef<const Value *> Args = {},
11571157 const Instruction *CxtI = nullptr ) const override {
1158- switch (improveShuffleKindFromMask (Kind, Mask, Tp , Index, SubTp)) {
1158+ switch (improveShuffleKindFromMask (Kind, Mask, SrcTy , Index, SubTp)) {
11591159 case TTI::SK_Broadcast:
1160- if (auto *FVT = dyn_cast<FixedVectorType>(Tp ))
1160+ if (auto *FVT = dyn_cast<FixedVectorType>(SrcTy ))
11611161 return getBroadcastShuffleOverhead (FVT, CostKind);
11621162 return InstructionCost::getInvalid ();
11631163 case TTI::SK_Select:
@@ -1166,14 +1166,14 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
11661166 case TTI::SK_Transpose:
11671167 case TTI::SK_PermuteSingleSrc:
11681168 case TTI::SK_PermuteTwoSrc:
1169- if (auto *FVT = dyn_cast<FixedVectorType>(Tp ))
1169+ if (auto *FVT = dyn_cast<FixedVectorType>(SrcTy ))
11701170 return getPermuteShuffleOverhead (FVT, CostKind);
11711171 return InstructionCost::getInvalid ();
11721172 case TTI::SK_ExtractSubvector:
1173- return getExtractSubvectorOverhead (Tp , CostKind, Index,
1173+ return getExtractSubvectorOverhead (SrcTy , CostKind, Index,
11741174 cast<FixedVectorType>(SubTp));
11751175 case TTI::SK_InsertSubvector:
1176- return getInsertSubvectorOverhead (Tp , CostKind, Index,
1176+ return getInsertSubvectorOverhead (DstTy , CostKind, Index,
11771177 cast<FixedVectorType>(SubTp));
11781178 }
11791179 llvm_unreachable (" Unknown TTI::ShuffleKind" );
@@ -1910,6 +1910,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19101910 return BaseT::getIntrinsicInstrCost (ICA, CostKind);
19111911 unsigned Index = cast<ConstantInt>(Args[1 ])->getZExtValue ();
19121912 return thisT ()->getShuffleCost (TTI::SK_ExtractSubvector,
1913+ cast<VectorType>(RetTy),
19131914 cast<VectorType>(Args[0 ]->getType ()), {},
19141915 CostKind, Index, cast<VectorType>(RetTy));
19151916 }
@@ -1920,17 +1921,18 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
19201921 return BaseT::getIntrinsicInstrCost (ICA, CostKind);
19211922 unsigned Index = cast<ConstantInt>(Args[2 ])->getZExtValue ();
19221923 return thisT ()->getShuffleCost (
1923- TTI::SK_InsertSubvector, cast<VectorType>(Args[0 ]->getType ()), {},
1924- CostKind, Index, cast<VectorType>(Args[1 ]->getType ()));
1924+ TTI::SK_InsertSubvector, cast<VectorType>(RetTy),
1925+ cast<VectorType>(Args[0 ]->getType ()), {}, CostKind, Index,
1926+ cast<VectorType>(Args[1 ]->getType ()));
19251927 }
19261928 case Intrinsic::vector_reverse: {
1927- return thisT ()->getShuffleCost (TTI::SK_Reverse,
1929+ return thisT ()->getShuffleCost (TTI::SK_Reverse, cast<VectorType>(RetTy),
19281930 cast<VectorType>(Args[0 ]->getType ()), {},
19291931 CostKind, 0 , cast<VectorType>(RetTy));
19301932 }
19311933 case Intrinsic::vector_splice: {
19321934 unsigned Index = cast<ConstantInt>(Args[2 ])->getZExtValue ();
1933- return thisT ()->getShuffleCost (TTI::SK_Splice,
1935+ return thisT ()->getShuffleCost (TTI::SK_Splice, cast<VectorType>(RetTy),
19341936 cast<VectorType>(Args[0 ]->getType ()), {},
19351937 CostKind, Index, cast<VectorType>(RetTy));
19361938 }
@@ -2376,8 +2378,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
23762378 CostKind, 1 , nullptr , nullptr );
23772379 Cost += thisT ()->getVectorInstrCost (Instruction::InsertElement, SearchTy,
23782380 CostKind, 0 , nullptr , nullptr );
2379- Cost += thisT ()->getShuffleCost (TTI::SK_Broadcast, SearchTy, {}, CostKind ,
2380- 0 , nullptr );
2381+ Cost += thisT ()->getShuffleCost (TTI::SK_Broadcast, SearchTy, SearchTy, {} ,
2382+ CostKind, 0 , nullptr );
23812383 Cost += thisT ()->getCmpSelInstrCost (BinaryOperator::ICmp, SearchTy, RetTy,
23822384 CmpInst::ICMP_EQ, CostKind);
23832385 Cost +=
@@ -2961,8 +2963,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
29612963 while (NumVecElts > MVTLen) {
29622964 NumVecElts /= 2 ;
29632965 VectorType *SubTy = FixedVectorType::get (ScalarTy, NumVecElts);
2964- ShuffleCost += thisT ()->getShuffleCost (TTI::SK_ExtractSubvector, Ty, {},
2965- CostKind, NumVecElts, SubTy);
2966+ ShuffleCost += thisT ()->getShuffleCost (
2967+ TTI::SK_ExtractSubvector, SubTy, Ty, {}, CostKind, NumVecElts, SubTy);
29662968 ArithCost += thisT ()->getArithmeticInstrCost (Opcode, SubTy, CostKind);
29672969 Ty = SubTy;
29682970 ++LongVectorCount;
@@ -2978,7 +2980,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
29782980 // By default reductions need one shuffle per reduction level.
29792981 ShuffleCost +=
29802982 NumReduxLevels * thisT ()->getShuffleCost (TTI::SK_PermuteSingleSrc, Ty,
2981- {}, CostKind, 0 , Ty);
2983+ Ty, {}, CostKind, 0 , Ty);
29822984 ArithCost +=
29832985 NumReduxLevels * thisT ()->getArithmeticInstrCost (Opcode, Ty, CostKind);
29842986 return ShuffleCost + ArithCost +
@@ -3052,8 +3054,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
30523054 NumVecElts /= 2 ;
30533055 auto *SubTy = FixedVectorType::get (ScalarTy, NumVecElts);
30543056
3055- ShuffleCost += thisT ()->getShuffleCost (TTI::SK_ExtractSubvector, Ty, {},
3056- CostKind, NumVecElts, SubTy);
3057+ ShuffleCost += thisT ()->getShuffleCost (
3058+ TTI::SK_ExtractSubvector, SubTy, Ty, {}, CostKind, NumVecElts, SubTy);
30573059
30583060 IntrinsicCostAttributes Attrs (IID, SubTy, {SubTy, SubTy}, FMF);
30593061 MinMaxCost += getIntrinsicInstrCost (Attrs, CostKind);
@@ -3069,7 +3071,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
30693071 // architecture-dependent length.
30703072 ShuffleCost +=
30713073 NumReduxLevels * thisT ()->getShuffleCost (TTI::SK_PermuteSingleSrc, Ty,
3072- {}, CostKind, 0 , Ty);
3074+ Ty, {}, CostKind, 0 , Ty);
30733075 IntrinsicCostAttributes Attrs (IID, Ty, {Ty, Ty}, FMF);
30743076 MinMaxCost += NumReduxLevels * getIntrinsicInstrCost (Attrs, CostKind);
30753077 // The last min/max should be in vector registers and we counted it above.
0 commit comments