[llvm] Re-land [Transform][LoadStoreVectorizer] allow redundant in Chain (PR #168135)

Drew Kersnar via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 19 08:48:23 PST 2025


================
@@ -964,22 +996,25 @@ bool Vectorizer::vectorizeChain(Chain &C) {
 
     // Build the vector to store.
     Value *Vec = PoisonValue::get(VecTy);
-    unsigned VecIdx = 0;
-    auto InsertElem = [&](Value *V) {
+    auto InsertElem = [&](Value *V, unsigned VecIdx) {
       if (V->getType() != VecElemTy)
         V = Builder.CreateBitOrPointerCast(V, VecElemTy);
-      Vec = Builder.CreateInsertElement(Vec, V, Builder.getInt32(VecIdx++));
+      Vec = Builder.CreateInsertElement(Vec, V, Builder.getInt32(VecIdx));
     };
     for (const ChainElem &E : C) {
       auto *I = cast<StoreInst>(E.Inst);
+      unsigned EOffset =
+          (E.OffsetFromLeader - C[0].OffsetFromLeader).getSExtValue();
+      unsigned VecIdx = 8 * EOffset / DL.getTypeSizeInBits(VecElemTy);
----------------
dakersnar wrote:

```suggestion
      unsigned EOffset =
          (E.OffsetFromLeader - C[0].OffsetFromLeader).getZExtValue();
      unsigned VecIdx = 8 * EOffset / DL.getTypeSizeInBits(VecElemTy);
```

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


More information about the llvm-commits mailing list