@@ -579,10 +579,12 @@ class TargetTransformInfoImplBase {
579579 return InstructionCost::getInvalid ();
580580 }
581581
582- InstructionCost
583- getShuffleCost (TTI::ShuffleKind Kind, VectorType *Ty, ArrayRef<int > Mask,
584- TTI::TargetCostKind CostKind, int Index, VectorType *SubTp,
585- ArrayRef<const Value *> Args = std::nullopt ) const {
582+ InstructionCost getShuffleCost (TTI::ShuffleKind Kind, VectorType *Ty,
583+ ArrayRef<int > Mask,
584+ TTI::TargetCostKind CostKind, int Index,
585+ VectorType *SubTp,
586+ ArrayRef<const Value *> Args = std::nullopt ,
587+ const Instruction *CxtI = nullptr ) const {
586588 return 1 ;
587589 }
588590
@@ -1341,13 +1343,13 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
13411343 if (Shuffle->isExtractSubvectorMask (SubIndex))
13421344 return TargetTTI->getShuffleCost (TTI::SK_ExtractSubvector, VecSrcTy,
13431345 Mask, CostKind, SubIndex, VecTy,
1344- Operands);
1346+ Operands, Shuffle );
13451347
13461348 if (Shuffle->isInsertSubvectorMask (NumSubElts, SubIndex))
13471349 return TargetTTI->getShuffleCost (
13481350 TTI::SK_InsertSubvector, VecTy, Mask, CostKind, SubIndex,
13491351 FixedVectorType::get (VecTy->getScalarType (), NumSubElts),
1350- Operands);
1352+ Operands, Shuffle );
13511353
13521354 int ReplicationFactor, VF;
13531355 if (Shuffle->isReplicationMask (ReplicationFactor, VF)) {
@@ -1374,7 +1376,7 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
13741376
13751377 return TargetTTI->getShuffleCost (
13761378 IsUnary ? TTI::SK_PermuteSingleSrc : TTI::SK_PermuteTwoSrc, VecTy,
1377- AdjustMask, CostKind, 0 , nullptr );
1379+ AdjustMask, CostKind, 0 , nullptr , {}, Shuffle );
13781380 }
13791381
13801382 // Narrowing shuffle - perform shuffle at original wider width and
@@ -1383,49 +1385,53 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
13831385
13841386 InstructionCost ShuffleCost = TargetTTI->getShuffleCost (
13851387 IsUnary ? TTI::SK_PermuteSingleSrc : TTI::SK_PermuteTwoSrc,
1386- VecSrcTy, AdjustMask, CostKind, 0 , nullptr );
1388+ VecSrcTy, AdjustMask, CostKind, 0 , nullptr , {}, Shuffle );
13871389
13881390 SmallVector<int , 16 > ExtractMask (Mask.size ());
13891391 std::iota (ExtractMask.begin (), ExtractMask.end (), 0 );
1390- return ShuffleCost + TargetTTI->getShuffleCost (TTI::SK_ExtractSubvector,
1391- VecSrcTy, ExtractMask ,
1392- CostKind, 0 , VecTy);
1392+ return ShuffleCost + TargetTTI->getShuffleCost (
1393+ TTI::SK_ExtractSubvector, VecSrcTy ,
1394+ ExtractMask, CostKind, 0 , VecTy, {}, Shuffle );
13931395 }
13941396
13951397 if (Shuffle->isIdentity ())
13961398 return 0 ;
13971399
13981400 if (Shuffle->isReverse ())
13991401 return TargetTTI->getShuffleCost (TTI::SK_Reverse, VecTy, Mask, CostKind,
1400- 0 , nullptr , Operands);
1402+ 0 , nullptr , Operands, Shuffle );
14011403
14021404 if (Shuffle->isSelect ())
14031405 return TargetTTI->getShuffleCost (TTI::SK_Select, VecTy, Mask, CostKind,
1404- 0 , nullptr , Operands);
1406+ 0 , nullptr , Operands, Shuffle );
14051407
14061408 if (Shuffle->isTranspose ())
14071409 return TargetTTI->getShuffleCost (TTI::SK_Transpose, VecTy, Mask,
1408- CostKind, 0 , nullptr , Operands);
1410+ CostKind, 0 , nullptr , Operands,
1411+ Shuffle);
14091412
14101413 if (Shuffle->isZeroEltSplat ())
14111414 return TargetTTI->getShuffleCost (TTI::SK_Broadcast, VecTy, Mask,
1412- CostKind, 0 , nullptr , Operands);
1415+ CostKind, 0 , nullptr , Operands,
1416+ Shuffle);
14131417
14141418 if (Shuffle->isSingleSource ())
14151419 return TargetTTI->getShuffleCost (TTI::SK_PermuteSingleSrc, VecTy, Mask,
1416- CostKind, 0 , nullptr , Operands);
1420+ CostKind, 0 , nullptr , Operands,
1421+ Shuffle);
14171422
14181423 if (Shuffle->isInsertSubvectorMask (NumSubElts, SubIndex))
14191424 return TargetTTI->getShuffleCost (
14201425 TTI::SK_InsertSubvector, VecTy, Mask, CostKind, SubIndex,
1421- FixedVectorType::get (VecTy->getScalarType (), NumSubElts), Operands);
1426+ FixedVectorType::get (VecTy->getScalarType (), NumSubElts), Operands,
1427+ Shuffle);
14221428
14231429 if (Shuffle->isSplice (SubIndex))
14241430 return TargetTTI->getShuffleCost (TTI::SK_Splice, VecTy, Mask, CostKind,
1425- SubIndex, nullptr , Operands);
1431+ SubIndex, nullptr , Operands, Shuffle );
14261432
14271433 return TargetTTI->getShuffleCost (TTI::SK_PermuteTwoSrc, VecTy, Mask,
1428- CostKind, 0 , nullptr , Operands);
1434+ CostKind, 0 , nullptr , Operands, Shuffle );
14291435 }
14301436 case Instruction::ExtractElement: {
14311437 auto *EEI = dyn_cast<ExtractElementInst>(U);
0 commit comments