[llvm] [SLP] Initial vectorization of non-power-of-2 ops. (PR #77790)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 13:26:51 PST 2024


================
@@ -10648,7 +10699,16 @@ Value *BoUpSLP::vectorizeOperand(TreeEntry *E, unsigned NodeIdx,
 template <typename BVTy, typename ResTy, typename... Args>
 ResTy BoUpSLP::processBuildVector(const TreeEntry *E, Args &...Params) {
   assert(E->State == TreeEntry::NeedToGather && "Expected gather node.");
+
   unsigned VF = E->getVectorFactor();
+  BVTy ShuffleBuilder(Params...);
+  if (E->isNonPowOf2Vec()) {
+    Value *BV = ShuffleBuilder.gather(E->Scalars);
+    SmallVector<int> Mask(VF, PoisonMaskElem);
+    std::iota(Mask.begin(), Mask.begin() + E->Scalars.size(), 0);
----------------
alexey-bataev wrote:

```suggestion
    std::iota(Mask.begin(), Mask.end(), 0);
```
This should work, I assume, since VF == E->Scalars.size()?

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


More information about the llvm-commits mailing list