[llvm] 94fcaf5 - [LLVM][SandboxVec][LoadStoreVec] Add support for vector ConstantInt/FP. (#200437)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 2 05:50:17 PDT 2026


Author: Paul Walker
Date: 2026-06-02T13:50:12+01:00
New Revision: 94fcaf5110e21451fed27c61e1f1e0b5fb3bdb33

URL: https://github.com/llvm/llvm-project/commit/94fcaf5110e21451fed27c61e1f1e0b5fb3bdb33
DIFF: https://github.com/llvm/llvm-project/commit/94fcaf5110e21451fed27c61e1f1e0b5fb3bdb33.diff

LOG: [LLVM][SandboxVec][LoadStoreVec] Add support for vector ConstantInt/FP. (#200437)

The current implementation treats all ConstantInt/FP values as scalar,
leading to the wrong number of elements being used when combining them.

Added: 
    

Modified: 
    llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp
    llvm/test/Transforms/SandboxVectorizer/load_store_vec.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp
index a12f87fe7cded..1ce435cecdf5e 100644
--- a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp
+++ b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp
@@ -154,6 +154,20 @@ bool LoadStoreVec::runOnRegion(Region &Rgn, const Analyses &A) {
         for ([[maybe_unused]] auto Cnt :
              seq<unsigned>(Zero->getElementCount().getFixedValue()))
           Constants.push_back(ZeroElm);
+      } else if (isa<ConstantInt>(COp) && isa<VectorType>(COp->getType())) {
+        auto *Elm = ConstantInt::get(Ctx, cast<ConstantInt>(COp)->getValue());
+        for ([[maybe_unused]] auto Cnt :
+             seq<unsigned>(cast<VectorType>(COp->getType())
+                               ->getElementCount()
+                               .getFixedValue()))
+          Constants.push_back(Elm);
+      } else if (isa<ConstantFP>(COp) && isa<VectorType>(COp->getType())) {
+        auto *Elm = ConstantFP::get(cast<ConstantFP>(COp)->getValue(), Ctx);
+        for ([[maybe_unused]] auto Cnt :
+             seq<unsigned>(cast<VectorType>(COp->getType())
+                               ->getElementCount()
+                               .getFixedValue()))
+          Constants.push_back(Elm);
       } else {
         Constants.push_back(COp);
       }

diff  --git a/llvm/test/Transforms/SandboxVectorizer/load_store_vec.ll b/llvm/test/Transforms/SandboxVectorizer/load_store_vec.ll
index 425fcd9168e05..cebccdee6ec01 100644
--- a/llvm/test/Transforms/SandboxVectorizer/load_store_vec.ll
+++ b/llvm/test/Transforms/SandboxVectorizer/load_store_vec.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
 ; RUN: opt -passes=sandbox-vectorizer -sbvec-vec-reg-bits=1024 -sbvec-allow-non-pow2 -sbvec-passes="seed-collection(enable-
diff -types)<load-store-vec>" %s -S | FileCheck %s
+; RUN: opt -passes=sandbox-vectorizer -sbvec-vec-reg-bits=1024 -sbvec-allow-non-pow2 -sbvec-passes="seed-collection(enable-
diff -types)<load-store-vec>" -use-constant-int-for-fixed-length-splat %s -S | FileCheck %s
 
 define void @load_store_vec_basic(ptr %ptr) {
 ; CHECK-LABEL: define void @load_store_vec_basic(
@@ -346,6 +347,40 @@ define void @load_store_vec_constants_CDS_float(ptr %ptr) {
   ret void
 }
 
+; Same but with vector ConstantInt
+define void @load_store_vec_constants_CI_vector(ptr %ptr) {
+; CHECK-LABEL: define void @load_store_vec_constants_CI_vector(
+; CHECK-SAME: ptr [[PTR:%.*]]) {
+; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr i8, ptr [[PTR]], i32 0
+; CHECK-NEXT:    store <8 x i8> <i8 0, i8 1, i8 1, i8 2, i8 2, i8 2, i8 2, i8 2>, ptr [[PTR0]], align 1, !sandboxvec [[META18:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr0 = getelementptr i8, ptr %ptr, i32 0
+  %ptr1 = getelementptr i8, ptr %ptr, i32 1
+  %ptr2 = getelementptr i8, ptr %ptr, i32 3
+  store i8 0, ptr %ptr0
+  store <2 x i8> splat (i8 1), ptr %ptr1
+  store <5 x i8> splat (i8 2), ptr %ptr2
+  ret void
+}
+
+; Same but with vector ConstantFP
+define void @load_store_vec_constants_CFP_vector(ptr %ptr) {
+; CHECK-LABEL: define void @load_store_vec_constants_CFP_vector(
+; CHECK-SAME: ptr [[PTR:%.*]]) {
+; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
+; CHECK-NEXT:    store <8 x float> <float 1.000000e+00, float 2.000000e+00, float 2.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00>, ptr [[PTR0]], align 1, !sandboxvec [[META19:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr0 = getelementptr float, ptr %ptr, i32 0
+  %ptr1 = getelementptr float, ptr %ptr, i32 1
+  %ptr2 = getelementptr float, ptr %ptr, i32 3
+  store float 1.0, ptr %ptr0
+  store <2 x float> splat (float 2.0), ptr %ptr1
+  store <5 x float> splat (float 3.0), ptr %ptr2
+  ret void
+}
+
 ;.
 ; CHECK: [[META0]] = distinct !{!"sandboxregion"}
 ; CHECK: [[META1]] = distinct !{!"sandboxregion"}
@@ -365,4 +400,6 @@ define void @load_store_vec_constants_CDS_float(ptr %ptr) {
 ; CHECK: [[META15]] = distinct !{!"sandboxregion"}
 ; CHECK: [[META16]] = distinct !{!"sandboxregion"}
 ; CHECK: [[META17]] = distinct !{!"sandboxregion"}
+; CHECK: [[META18]] = distinct !{!"sandboxregion"}
+; CHECK: [[META19]] = distinct !{!"sandboxregion"}
 ;.


        


More information about the llvm-commits mailing list