[llvm] [SLP]Improve costs in computeExtractCost() to avoid crash after D158449. (PR #67142)
Valery Dmitriev via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 25 17:41:05 PDT 2023
================
@@ -7067,30 +7067,53 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
/// extracted values from \p VL.
InstructionCost computeExtractCost(ArrayRef<Value *> VL, ArrayRef<int> Mask,
TTI::ShuffleKind ShuffleKind) {
- auto *VecTy = FixedVectorType::get(VL.front()->getType(), VL.size());
+ unsigned NumElts = 0;
+ for (Value *V : VL) {
+ auto *EE = dyn_cast<ExtractElementInst>(V);
+ if (!EE)
+ continue;
+ auto *VecTy = cast<FixedVectorType>(EE->getVectorOperandType());
+ NumElts = std::max(NumElts, VecTy->getNumElements());
+ }
+ auto *VecTy = FixedVectorType::get(VL.front()->getType(), NumElts);
unsigned NumOfParts = TTI.getNumberOfParts(VecTy);
-
- if (ShuffleKind != TargetTransformInfo::SK_PermuteSingleSrc ||
- !NumOfParts || VecTy->getNumElements() < NumOfParts)
+ if (!NumOfParts || NumElts < NumOfParts)
+ return TTI.getShuffleCost(ShuffleKind, VecTy, Mask);
+ unsigned EltsPerVector = PowerOf2Ceil(divideCeil(NumElts, NumOfParts));
+ int ValNum = -1;
+ int ValIdx = -1;
+ if (ShuffleKind != TargetTransformInfo::SK_PermuteSingleSrc &&
+ !all_of(enumerate(Mask), [&](auto &&Arg) {
----------------
valerydmit wrote:
Please add a comment explaining intent of the code. Is it to check that mask indices are within sub-registers [if not poison]?
https://github.com/llvm/llvm-project/pull/67142
More information about the llvm-commits
mailing list