[llvm] [SandboxVec][LoadStoreVec] Support constant vectors of mixed types (PR #224890)

Vasileios Porpodas via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 21 14:51:31 PDT 2026


================
@@ -383,6 +386,365 @@ define void @mixed_dboule_pointer_with_four_external_users(ptr %ptr, ptr %ptrExt
   ret void
 }
 
+; ===----------------------------------------------------------------------=== ;
+; ===            Constants: Same Width As The Vector Element               === ;
+; ===----------------------------------------------------------------------=== ;
+
+define void @constants_i32_f32(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_i32_f32(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x i32> <i32 456, i32 1065353216>, ptr [[PTR0]], align 1, !sandboxvec [[META18:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i32, ptr %ptr0, i32 1
+  store i32 456, ptr %ptr0
+  store float 1.0, ptr %ptr1
+  ret void
+}
+
+define void @constants_f32_i32(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f32_i32(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x float> <float 1.000000e+00, float 6.389920e-43>, ptr [[PTR0]], align 1, !sandboxvec [[META19:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 4
+  store float 1.0, ptr %ptr0
+  store i32 456, ptr %ptr1
+  ret void
+}
+
+ at g = external global i32
+
+define void @constants_i64_ptr(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_i64_ptr(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x i64> <i64 5, i64 ptrtoint (ptr @g to i64)>, ptr [[PTR0]], align 1, !sandboxvec [[META20:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store i64 5, ptr %ptr0
+  store ptr @g, ptr %ptr1
+  ret void
+}
+
+define void @constants_f64_ptr(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f64_ptr(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x double> <double 1.000000e+00, double bitcast (i64 ptrtoint (ptr @g to i64) to double)>, ptr [[PTR0]], align 1, !sandboxvec [[META21:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store double 1.0, ptr %ptr0
+  store ptr @g, ptr %ptr1
+  ret void
+}
+
+define void @constants_ptr_f64(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_ptr_f64(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x ptr> <ptr null, ptr inttoptr (i64 4607182418800017408 to ptr)>, ptr [[PTR0]], align 1, !sandboxvec [[META22:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store ptr null, ptr %ptr0
+  store double 1.0, ptr %ptr1
+  ret void
+}
+
+define void @constants_f64_ptrtoint(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f64_ptrtoint(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x double> <double 1.000000e+00, double bitcast (i64 ptrtoint (ptr @g to i64) to double)>, ptr [[PTR0]], align 1, !sandboxvec [[META23:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store double 1.0, ptr %ptr0
+  store i64 ptrtoint (ptr @g to i64), ptr %ptr1
+  ret void
+}
+
+ at arr = external global [4 x i32]
+
+define void @constants_f64_gep(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f64_gep(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x double> <double 1.000000e+00, double bitcast (i64 ptrtoint (ptr getelementptr (i32, ptr @arr, i64 2) to i64) to double)>, ptr [[PTR0]], align 1, !sandboxvec [[META24:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store double 1.0, ptr %ptr0
+  store ptr getelementptr (i32, ptr @arr, i64 2), ptr %ptr1
+  ret void
+}
+
+define void @constants_f32_poison(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f32_poison(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <2 x float> <float 1.000000e+00, float poison>, ptr [[PTR0]], align 1, !sandboxvec [[META25:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 4
+  store float 1.0, ptr %ptr0
+  store i32 poison, ptr %ptr1
+  ret void
+}
+
+; ===----------------------------------------------------------------------=== ;
+; ===              Constants: Wider Than The Vector Element                === ;
+; ===----------------------------------------------------------------------=== ;
+
+define void @constants_i8_i16(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_i8_i16(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <4 x i8> <i8 1, i8 2, i8 1, i8 1>, ptr [[PTR0]], align 1, !sandboxvec [[META26:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 2
+  store <2 x i8> <i8 1, i8 2>, ptr %ptr0
+  store i16 257, ptr %ptr1
+  ret void
+}
+
+define void @constants_i32_f64(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_i32_f64(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <4 x i32> <i32 1, i32 2, i32 0, i32 1072693248>, ptr [[PTR0]], align 1, !sandboxvec [[META27:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store <2 x i32> <i32 1, i32 2>, ptr %ptr0
+  store double 1.0, ptr %ptr1
+  ret void
+}
+
+define void @constants_i32_ptr(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_i32_ptr(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <4 x i32> <i32 1, i32 2, i32 0, i32 0>, ptr [[PTR0]], align 1, !sandboxvec [[META28:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 8
+  store <2 x i32> <i32 1, i32 2>, ptr %ptr0
+  store ptr null, ptr %ptr1
+  ret void
+}
+
+define void @constants_ptr_i128(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_ptr_i128(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    [[PTR1:%.*]] = getelementptr i8, ptr [[PTR0]], i64 16
+; CHECK-NEXT:    store <2 x ptr> splat (ptr null), ptr [[PTR0]], align 16, !sandboxvec [[META29:![0-9]+]]
+; CHECK-NEXT:    store i128 5, ptr [[PTR1]], align 4, !sandboxvec [[META29]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 16
+  store <2 x ptr> <ptr null, ptr null>, ptr %ptr0
+  store i128 5, ptr %ptr1
+  ret void
+}
+
+define void @constants_f16_i32(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_f16_i32(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <4 x half> <half 1.000000e+00, half 2.000000e+00, half 4.172330e-07, half 0.000000e+00>, ptr [[PTR0]], align 1, !sandboxvec [[META30:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 4
+  store <2 x half> <half 1.0, half 2.0>, ptr %ptr0
+  store i32 7, ptr %ptr1
+  ret void
+}
+
+define void @constants_bf16_f32(ptr %ptr0) {
+; CHECK-LABEL: define void @constants_bf16_f32(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT:    store <4 x bfloat> <bfloat 1.000000e+00, bfloat 2.000000e+00, bfloat 0.000000e+00, bfloat 3.000000e+00>, ptr [[PTR0]], align 1, !sandboxvec [[META31:![0-9]+]]
+; CHECK-NEXT:    ret void
+;
+  %ptr1 = getelementptr i8, ptr %ptr0, i64 4
+  store <2 x bfloat> <bfloat 1.0, bfloat 2.0>, ptr %ptr0
+  store float 3.0, ptr %ptr1
+  ret void
+}
+
+define void @constants_i64_v2f32(ptr %ptr0) {
----------------
vporpo wrote:

constants_i64_2xf32

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


More information about the llvm-commits mailing list