xref: /llvm-project/llvm/test/CodeGen/DirectX/llc-vector-store-scalarize.ll (revision 5ac624c8234fe0a62cbf0447dbf7035ea29d062e)
1; RUN: opt -S -passes='dxil-data-scalarization,scalarizer<load-store>,dxil-op-lower' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s
2
3; Make sure we can store groupshared, static vectors and arrays of vectors
4
5@"arrayofVecData" = local_unnamed_addr addrspace(3) global [2 x <3 x float>] zeroinitializer, align 16
6@"vecData" = external addrspace(3) global <4 x i32>, align 4
7
8; CHECK: @arrayofVecData.scalarized = local_unnamed_addr addrspace(3) global [2 x [3 x float]] zeroinitializer, align 16
9; CHECK: @vecData.scalarized = external addrspace(3) global [4 x i32], align 4
10; CHECK-NOT: @arrayofVecData
11; CHECK-NOT: @vecData
12
13; CHECK-LABEL: store_array_vec_test
14define void @store_array_vec_test () local_unnamed_addr #0 {
15    ; CHECK-COUNT-6: store float {{1|2|3|4|6}}.000000e+00, ptr addrspace(3) {{(.*@arrayofVecData.scalarized.*|%.*)}}, align {{4|8|16}}
16    ; CHECK-NEXT: ret void
17    store <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, ptr addrspace(3) @"arrayofVecData", align 16
18    store <3 x float> <float 2.000000e+00, float 4.000000e+00, float 6.000000e+00>, ptr addrspace(3)   getelementptr inbounds (i8, ptr addrspace(3) @"arrayofVecData", i32 16), align 16
19    ret void
20 }
21
22; CHECK-LABEL: store_vec_test
23define void @store_vec_test(<4 x i32> %inputVec) #0 {
24  ; CHECK-COUNT-4: store i32 %inputVec.{{.*}}, ptr addrspace(3) {{(@vecData.scalarized|getelementptr \(i32, ptr addrspace\(3\) @vecData.scalarized, i32 .*\)|%.*)}}, align 4
25  ; CHECK-NEXT: ret void
26  store <4 x i32> %inputVec, <4 x i32> addrspace(3)* @"vecData", align 4
27  ret void
28}
29
30attributes #0 = { convergent norecurse nounwind "hlsl.export"}
31