2
2
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan %s -o - -filetype=obj | spirv-val %}
3
3
4
4
@.str = private unnamed_addr constant [4 x i8 ] c "In3\00 " , align 1
5
- @.str.2 = private unnamed_addr constant [5 x i8 ] c "Out3\00 " , align 1
5
+ @.str.2 = private unnamed_addr constant [5 x i8 ] c "Out4\00 " , align 1
6
+ @.str.3 = private unnamed_addr constant [5 x i8 ] c "Out3\00 " , align 1
6
7
7
- ; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, inaccessiblemem: none)
8
- define void @main () local_unnamed_addr #0 {
9
- ; CHECK: %[[#INT32:]] = OpTypeInt 32 0
10
- ; CHECK: %[[#INT4:]] = OpTypeVector %[[#INT32]] 4
11
- ; CHECK: %[[#FLOAT:]] = OpTypeFloat 32
12
- ; CHECK: %[[#FLOAT4:]] = OpTypeVector %[[#FLOAT]] 4
8
+
9
+ ; CHECK-DAG: %[[#INT32:]] = OpTypeInt 32 0
10
+ ; CHECK-DAG: %[[#INT4:]] = OpTypeVector %[[#INT32]] 4
11
+ ; CHECK-DAG: %[[#FLOAT:]] = OpTypeFloat 32
12
+ ; CHECK-DAG: %[[#FLOAT4:]] = OpTypeVector %[[#FLOAT]] 4
13
+ ; CHECK-DAG: %[[#INT3:]] = OpTypeVector %[[#INT32]] 3
14
+ ; CHECK-DAG: %[[#UNDEF_INT4:]] = OpUndef %[[#INT4]]
15
+
16
+ define void @case1 () local_unnamed_addr {
13
17
; CHECK: %[[#BUFFER_LOAD:]] = OpLoad %[[#FLOAT4]] %{{[0-9]+}} Aligned 16
14
18
; CHECK: %[[#CAST_LOAD:]] = OpBitcast %[[#INT4]] %[[#BUFFER_LOAD]]
15
19
; CHECK: %[[#VEC_SHUFFLE:]] = OpVectorShuffle %[[#INT4]] %[[#CAST_LOAD]] %[[#CAST_LOAD]] 0 1 2 3
@@ -22,4 +26,17 @@ define void @main() local_unnamed_addr #0 {
22
26
ret void
23
27
}
24
28
25
- attributes #0 = { mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, inaccessiblemem: none) "approx-func-fp-math" ="true" "frame-pointer" ="all" "hlsl.numthreads" ="1,1,1" "hlsl.shader" ="compute" "no-infs-fp-math" ="true" "no-nans-fp-math" ="true" "no-signed-zeros-fp-math" ="true" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" }
29
+ define void @case2 () local_unnamed_addr {
30
+ ; CHECK: %[[#BUFFER_LOAD:]] = OpLoad %[[#FLOAT4]] %{{[0-9]+}} Aligned 16
31
+ ; CHECK: %[[#CAST_LOAD:]] = OpBitcast %[[#INT4]] %[[#BUFFER_LOAD]]
32
+ ; CHECK: %[[#VEC_SHUFFLE:]] = OpVectorShuffle %[[#INT4]] %[[#CAST_LOAD]] %[[#CAST_LOAD]] 0 1 2 3
33
+ ; CHECK: %[[#VEC_TRUNCATE:]] = OpVectorShuffle %[[#INT3]] %[[#VEC_SHUFFLE]] %[[#UNDEF_INT4]] 0 1 2
34
+ %1 = tail call target ("spirv.VulkanBuffer" , [0 x <4 x float >], 12 , 0 ) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4f32_12_0t (i32 0 , i32 2 , i32 1 , i32 0 , i1 false , ptr nonnull @.str )
35
+ %2 = tail call target ("spirv.VulkanBuffer" , [0 x <3 x i32 >], 12 , 1 ) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v3i32_12_1t (i32 0 , i32 5 , i32 1 , i32 0 , i1 false , ptr nonnull @.str.3 )
36
+ %3 = tail call noundef align 16 dereferenceable (16 ) ptr addrspace (11 ) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4f32_12_0t (target ("spirv.VulkanBuffer" , [0 x <4 x float >], 12 , 0 ) %1 , i32 0 )
37
+ %4 = load <4 x i32 >, ptr addrspace (11 ) %3 , align 16
38
+ %5 = shufflevector <4 x i32 > %4 , <4 x i32 > poison, <3 x i32 > <i32 0 , i32 1 , i32 2 >
39
+ %6 = tail call noundef align 16 dereferenceable (16 ) ptr addrspace (11 ) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v3i32_12_1t (target ("spirv.VulkanBuffer" , [0 x <3 x i32 >], 12 , 1 ) %2 , i32 0 )
40
+ store <3 x i32 > %5 , ptr addrspace (11 ) %6 , align 16
41
+ ret void
42
+ }
0 commit comments