[llvm] [SLP] NFC. Add assert for ShuffleCostEstimator and ShuffleInstructionBuilder usage. (PR #123708)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 21 00:31:07 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Han-Kuan Chen (HanKuanChen)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/123708.diff


1 Files Affected:

- (modified) llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp (+19) 


``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index fc3afed391a06d..5140a8ec61654e 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -10932,6 +10932,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
            ArrayRef<std::pair<const TreeEntry *, unsigned>> SubVectors,
            ArrayRef<int> SubVectorsMask, unsigned VF = 0,
            function_ref<void(Value *&, SmallVectorImpl<int> &)> Action = {}) {
+    assert(!IsFinalized && "ShuffleCostEstimator is already finalized.");
     IsFinalized = true;
     if (Action) {
       const PointerUnion<Value *, const TreeEntry *> &Vec = InVectors.front();
@@ -14524,6 +14525,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
            ArrayRef<std::pair<const TreeEntry *, unsigned>> SubVectors,
            ArrayRef<int> SubVectorsMask, unsigned VF = 0,
            function_ref<void(Value *&, SmallVectorImpl<int> &)> Action = {}) {
+    assert(!IsFinalized && "ShuffleInstructionBuilder is already finalized.");
     IsFinalized = true;
     unsigned ScalarTyNumElements = getNumElements(ScalarTy);
     SmallVector<int> NewExtMask(ExtMask);
@@ -14696,6 +14698,8 @@ Value *BoUpSLP::vectorizeOperand(TreeEntry *E, unsigned NodeIdx,
           NumElements != 1 ? FixedVectorType::get(ScalarTy, NumElements)
                            : ScalarTy,
           Builder, *this);
+      assert(Mask.size() == VL.size() &&
+             "The mask is incompatible with the expected result.");
       ShuffleBuilder.add(V, Mask);
       SmallVector<std::pair<const TreeEntry *, unsigned>> SubVectors(
           E->CombinedEntriesWithIndices.size());
@@ -14912,6 +14916,8 @@ ResTy BoUpSLP::processBuildVector(const TreeEntry *E, Type *ScalarTy,
         // process to keep correct order.
         return *Delayed;
       }
+      assert(ExtractMask.size() == E->Scalars.size() &&
+             "The mask is incompatible with the expected result.");
       if (Value *VecBase = ShuffleBuilder.adjustExtracts(
               E, ExtractMask, ExtractShuffles, NumParts, UseVecBaseAsInput)) {
         ExtractVecBase = VecBase;
@@ -15229,6 +15235,9 @@ ResTy BoUpSLP::processBuildVector(const TreeEntry *E, Type *ScalarTy,
       SmallVector<int> BVMask(GatheredScalars.size(), PoisonMaskElem);
       TryPackScalars(GatheredScalars, BVMask, /*IsRootPoison=*/true);
       Value *BV = ShuffleBuilder.gather(GatheredScalars, BVMask.size());
+      assert((BVMask.size() == E->Scalars.size() ||
+              BVMask.size() == E->ReuseShuffleIndices.size()) &&
+             "The mask is incompatible with the expected result.");
       ShuffleBuilder.add(BV, BVMask);
     }
     if (all_of(NonConstants, [=](Value *V) {
@@ -15250,6 +15259,9 @@ ResTy BoUpSLP::processBuildVector(const TreeEntry *E, Type *ScalarTy,
     SmallVector<int> ReuseMask(GatheredScalars.size(), PoisonMaskElem);
     TryPackScalars(GatheredScalars, ReuseMask, /*IsRootPoison=*/true);
     Value *BV = ShuffleBuilder.gather(GatheredScalars, ReuseMask.size());
+    assert((ReuseMask.size() == E->Scalars.size() ||
+            ReuseMask.size() == E->ReuseShuffleIndices.size()) &&
+           "The mask is incompatible with the expected result.");
     ShuffleBuilder.add(BV, ReuseMask);
     Res = ShuffleBuilder.finalize(E->ReuseShuffleIndices, SubVectors,
                                   SubVectorsMask);
@@ -15261,6 +15273,8 @@ ResTy BoUpSLP::processBuildVector(const TreeEntry *E, Type *ScalarTy,
         Mask[I] = I;
     }
     Value *BV = ShuffleBuilder.gather(GatheredScalars);
+    assert(Mask.size() == E->Scalars.size() &&
+           "The mask is incompatible with the expected result.");
     ShuffleBuilder.add(BV, Mask);
     Res = ShuffleBuilder.finalize(E->ReuseShuffleIndices, SubVectors,
                                   SubVectorsMask);
@@ -15329,10 +15343,15 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
       ArrayRef<int> Mask =
           ArrayRef(reinterpret_cast<const int *>(E->ReorderIndices.begin()),
                    E->ReorderIndices.size());
+      assert((Mask.empty() || Mask.size() == E->Scalars.size()) &&
+             "The mask is incompatible with the expected result.");
       ShuffleBuilder.add(V, Mask);
     } else if (E->State == TreeEntry::StridedVectorize && IsReverseOrder) {
       ShuffleBuilder.addOrdered(V, {});
     } else {
+      assert((E->ReorderIndices.empty() ||
+              E->ReorderIndices.size() == E->Scalars.size()) &&
+             "The mask is incompatible with the expected result.");
       ShuffleBuilder.addOrdered(V, E->ReorderIndices);
     }
     SmallVector<std::pair<const TreeEntry *, unsigned>> SubVectors(

``````````

</details>


https://github.com/llvm/llvm-project/pull/123708


More information about the llvm-commits mailing list