1
+ ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv1.6-unknown-vulkan1.3-compute %s -o - | FileCheck %s
2
+ ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv1.6-unknown-vulkan1.3-compute %s -o - -filetype=obj | spirv-val --target-env vulkan1.3 %}
3
+
4
+ ; CHECK-DAG: OpDecorate [[bool_const:%[0-9]+]] SpecId 1
5
+ ; CHECK-DAG: OpDecorate [[short_const:%[0-9]+]] SpecId 2
6
+ ; CHECK-DAG: OpDecorate [[int_const:%[0-9]+]] SpecId 3
7
+ ; CHECK-DAG: OpDecorate [[long_const:%[0-9]+]] SpecId 4
8
+ ; CHECK-DAG: OpDecorate [[float_const:%[0-9]+]] SpecId 8
9
+ ; CHECK-DAG: OpDecorate [[double_const:%[0-9]+]] SpecId 9
10
+ ; CHECK-DAG: OpDecorate [[enum_const:%[0-9]+]] SpecId 10
11
+
12
+ ; CHECK-DAG: [[bool_const]] = OpSpecConstantTrue {{%[0-9]+}}
13
+ ; CHECK-DAG: [[short_const]] = OpSpecConstant {{%[0-9]+}} 4
14
+ ; CHECK-DAG: [[int_const]] = OpSpecConstant {{%[0-9]+}} 5
15
+ ; CHECK-DAG: [[long_const]] = OpSpecConstant {{%[0-9]+}} 8
16
+ ; CHECK-DAG: [[float_const]] = OpSpecConstant {{%[0-9]+}} 1112014848
17
+ ; CHECK-DAG: [[double_const]] = OpSpecConstant {{%[0-9]+}} 0 1079574528
18
+ ; CHECK-DAG: [[enum_const]] = OpSpecConstant {{%[0-9]+}} 30
19
+
20
+ @_ZL10bool_const = internal addrspace (10 ) global i32 0 , align 4
21
+ @_ZL11short_const = internal addrspace (10 ) global i16 0 , align 2
22
+ @_ZL9int_const = internal addrspace (10 ) global i32 0 , align 4
23
+ @_ZL10long_const = internal addrspace (10 ) global i64 0 , align 8
24
+ @_ZL11float_const = internal addrspace (10 ) global float 0 .000000e+00 , align 4
25
+ @_ZL12double_const = internal addrspace (10 ) global double 0 .000000e+00 , align 8
26
+ @_ZL10enum_const = internal addrspace (10 ) global i32 0 , align 4
27
+
28
+ ; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none)
29
+ define void @main () local_unnamed_addr #0 {
30
+ entry:
31
+ ; CHECK: [[b:%[0-9]+]] = OpSelect {{%[0-9]+}} [[bool_const]]
32
+ ; CHECK: OpStore {{%[0-9]+}} [[b]]
33
+ %0 = tail call spir_func i1 @_Z20__spirv_SpecConstantib (i32 1 , i1 true )
34
+ %storedv.i.i = zext i1 %0 to i32
35
+ store i32 %storedv.i.i , ptr addrspace (10 ) @_ZL10bool_const , align 4
36
+
37
+ ; CHECK: OpStore {{%[0-9]+}} [[short_const]]
38
+ %2 = tail call spir_func i16 @_Z20__spirv_SpecConstantis (i32 2 , i16 4 )
39
+ store i16 %2 , ptr addrspace (10 ) @_ZL11short_const , align 2
40
+
41
+ ; CHECK: OpStore {{%[0-9]+}} [[int_const]]
42
+ %4 = tail call spir_func i32 @_Z20__spirv_SpecConstantii (i32 3 , i32 5 )
43
+ store i32 %4 , ptr addrspace (10 ) @_ZL9int_const , align 4
44
+
45
+
46
+ ; CHECK: OpStore {{%[0-9]+}} [[long_const]]
47
+ %6 = tail call spir_func i64 @_Z20__spirv_SpecConstantix (i32 4 , i64 8 )
48
+ store i64 %6 , ptr addrspace (10 ) @_ZL10long_const , align 8
49
+
50
+ ; CHECK: OpStore {{%[0-9]+}} [[float_const]]
51
+ %14 = tail call reassoc nnan ninf nsz arcp afn spir_func float @_Z20__spirv_SpecConstantif (i32 8 , float 5 .000000e+01 )
52
+ store float %14 , ptr addrspace (10 ) @_ZL11float_const , align 4
53
+
54
+ ; CHECK: OpStore {{%[0-9]+}} [[double_const]]
55
+ %16 = tail call reassoc nnan ninf nsz arcp afn spir_func double @_Z20__spirv_SpecConstantid (i32 9 , double 1 .000000e+02 )
56
+ store double %16 , ptr addrspace (10 ) @_ZL12double_const , align 8
57
+
58
+ ; CHECK: OpStore {{%[0-9]+}} [[enum_const]]
59
+ %18 = tail call spir_func i32 @_Z20__spirv_SpecConstantii (i32 10 , i32 30 )
60
+ store i32 %18 , ptr addrspace (10 ) @_ZL10enum_const , align 4
61
+ ret void
62
+ }
63
+
64
+
65
+ declare i1 @_Z20__spirv_SpecConstantib (i32 , i1 )
66
+ declare i8 @_Z20__spirv_SpecConstantia (i32 , i8 )
67
+ declare i16 @_Z20__spirv_SpecConstantis (i32 , i16 )
68
+ declare i32 @_Z20__spirv_SpecConstantii (i32 , i32 )
69
+ declare i64 @_Z20__spirv_SpecConstantix (i32 , i64 )
70
+ declare float @_Z20__spirv_SpecConstantif (i32 , float )
71
+ declare double @_Z20__spirv_SpecConstantid (i32 , double )
72
+
73
+ attributes #0 = { "hlsl.numthreads" ="1,1,1" "hlsl.shader" ="compute" }
0 commit comments