Skip to content

Commit cb7a560

Browse files
committed
Extend OpSpecConstantOp testing for initializers
Co-authored-by: Stuart Brady
1 parent a775597 commit cb7a560

File tree

1 file changed

+84
-9
lines changed

1 file changed

+84
-9
lines changed

test/SpecConstants/specconstantop-init.spvasm

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,103 @@
55
; RUN: llvm-spirv -r %t.spv -o %t.bc
66
; RUN: llvm-dis %t.bc -o - | FileCheck %s
77

8-
; Verify that an OpVariable initializer containing an OpSpecConstantOp is supported.
8+
; Verify that OpVariable initializers containing various OpSpecConstantOp
9+
; operations are supported. Also verify that edge cases such as division
10+
; by zero are handled gracefully.
911

10-
; CHECK: @var = addrspace(2) constant i32 8, align 4
12+
; CHECK: @var_iadd = addrspace(1) global i32 49
13+
; CHECK: @var_isub = addrspace(1) global i32 57
14+
; CHECK: @var_imul = addrspace(1) global i32 -212
15+
; CHECK: @var_udiv = addrspace(1) global i32 81037118
16+
; CHECK: @var_udiv0 = addrspace(1) global i32 poison
17+
; CHECK: @var_sdiv = addrspace(1) global i32 -13
18+
; CHECK: @var_sdiv0 = addrspace(1) global i32 poison
19+
; CHECK: @var_umod = addrspace(1) global i32 1
20+
; CHECK: @var_srem = addrspace(1) global i32 1
21+
; TODO: smod
22+
; CHECK: @var_srl = addrspace(1) global i32 268435455
23+
; CHECK: @var_sra = addrspace(1) global i32 -1
24+
; CHECK: @var_sll = addrspace(1) global i32 848
25+
; CHECK: @var_sll_big = addrspace(1) global i32 poison
26+
; CHECK: @var_bitor = addrspace(1) global i32 -3
27+
; CHECK: @var_bitxor = addrspace(1) global i32 -55
28+
; CHECK: @var_bitand = addrspace(1) global i32 52
29+
; CHECK: @var_logor = addrspace(1) global i1 true
30+
; CHECK: @var_logand = addrspace(1) global i1 false
1131

1232
OpCapability Addresses
1333
OpCapability Linkage
1434
OpCapability Kernel
1535
OpMemoryModel Physical32 OpenCL
1636
OpEntryPoint Kernel %15 "foo"
17-
OpName %var "var"
1837
OpName %entry "entry"
19-
OpDecorate %var Constant
20-
OpDecorate %var LinkageAttributes "var" Export
21-
OpDecorate %var Alignment 4
38+
OpDecorate %var_iadd LinkageAttributes "var_iadd" Export
39+
OpDecorate %var_isub LinkageAttributes "var_isub" Export
40+
OpDecorate %var_imul LinkageAttributes "var_imul" Export
41+
OpDecorate %var_udiv LinkageAttributes "var_udiv" Export
42+
OpDecorate %var_udiv0 LinkageAttributes "var_udiv0" Export
43+
OpDecorate %var_sdiv LinkageAttributes "var_sdiv" Export
44+
OpDecorate %var_sdiv0 LinkageAttributes "var_sdiv0" Export
45+
OpDecorate %var_umod LinkageAttributes "var_umod" Export
46+
OpDecorate %var_srem LinkageAttributes "var_srem" Export
47+
OpDecorate %var_srl LinkageAttributes "var_srl" Export
48+
OpDecorate %var_sra LinkageAttributes "var_sra" Export
49+
OpDecorate %var_sll LinkageAttributes "var_sll" Export
50+
OpDecorate %var_sll_big LinkageAttributes "var_sll_big" Export
51+
OpDecorate %var_bitor LinkageAttributes "var_bitor" Export
52+
OpDecorate %var_bitxor LinkageAttributes "var_bitxor" Export
53+
OpDecorate %var_bitand LinkageAttributes "var_bitand" Export
54+
OpDecorate %var_logor LinkageAttributes "var_logor" Export
55+
OpDecorate %var_logand LinkageAttributes "var_logand" Export
56+
%bool = OpTypeBool
57+
%true = OpConstantTrue %bool
58+
%false = OpConstantFalse %bool
2259
%uint = OpTypeInt 32 0
60+
%uint_0 = OpConstant %uint 0
2361
%uint_4 = OpConstant %uint 4
24-
%uint_8 = OpSpecConstantOp %uint IAdd %uint_4 %uint_4
25-
%_ptr_uint = OpTypePointer UniformConstant %uint
62+
%uint_53 = OpConstant %uint 53
63+
%uint_min4 = OpConstant %uint 0xfffffffc
64+
%iadd = OpSpecConstantOp %uint IAdd %uint_53 %uint_min4
65+
%isub = OpSpecConstantOp %uint ISub %uint_53 %uint_min4
66+
%imul = OpSpecConstantOp %uint IMul %uint_53 %uint_min4
67+
%udiv = OpSpecConstantOp %uint UDiv %uint_min4 %uint_53
68+
%udiv0 = OpSpecConstantOp %uint UDiv %uint_min4 %uint_0
69+
%sdiv = OpSpecConstantOp %uint SDiv %uint_53 %uint_min4
70+
%sdiv0 = OpSpecConstantOp %uint SDiv %uint_53 %uint_0
71+
%umod = OpSpecConstantOp %uint UMod %uint_53 %uint_4
72+
%srem = OpSpecConstantOp %uint SRem %uint_53 %uint_min4
73+
%srl = OpSpecConstantOp %uint ShiftRightLogical %uint_min4 %uint_4
74+
%sra = OpSpecConstantOp %uint ShiftRightArithmetic %uint_min4 %uint_4
75+
%sll = OpSpecConstantOp %uint ShiftLeftLogical %uint_53 %uint_4
76+
%sll_big = OpSpecConstantOp %uint ShiftLeftLogical %uint_4 %uint_53
77+
%bitor = OpSpecConstantOp %uint BitwiseOr %uint_53 %uint_min4
78+
%bitxor = OpSpecConstantOp %uint BitwiseXor %uint_53 %uint_min4
79+
%bitand = OpSpecConstantOp %uint BitwiseAnd %uint_53 %uint_min4
80+
%logor = OpSpecConstantOp %bool LogicalOr %true %false
81+
%logand = OpSpecConstantOp %bool LogicalAnd %true %false
82+
%_ptr_uint = OpTypePointer CrossWorkgroup %uint
83+
%_ptr_bool = OpTypePointer CrossWorkgroup %bool
2684
%void = OpTypeVoid
2785
%14 = OpTypeFunction %void
2886

29-
%var = OpVariable %_ptr_uint UniformConstant %uint_8
87+
%var_iadd = OpVariable %_ptr_uint CrossWorkgroup %iadd
88+
%var_isub = OpVariable %_ptr_uint CrossWorkgroup %isub
89+
%var_imul = OpVariable %_ptr_uint CrossWorkgroup %imul
90+
%var_udiv = OpVariable %_ptr_uint CrossWorkgroup %udiv
91+
%var_udiv0 = OpVariable %_ptr_uint CrossWorkgroup %udiv0
92+
%var_sdiv = OpVariable %_ptr_uint CrossWorkgroup %sdiv
93+
%var_sdiv0 = OpVariable %_ptr_uint CrossWorkgroup %sdiv0
94+
%var_umod = OpVariable %_ptr_uint CrossWorkgroup %umod
95+
%var_srem = OpVariable %_ptr_uint CrossWorkgroup %srem
96+
%var_srl = OpVariable %_ptr_uint CrossWorkgroup %srl
97+
%var_sra = OpVariable %_ptr_uint CrossWorkgroup %sra
98+
%var_sll = OpVariable %_ptr_uint CrossWorkgroup %sll
99+
%var_sll_big = OpVariable %_ptr_uint CrossWorkgroup %sll_big
100+
%var_bitor = OpVariable %_ptr_uint CrossWorkgroup %bitor
101+
%var_bitxor = OpVariable %_ptr_uint CrossWorkgroup %bitxor
102+
%var_bitand = OpVariable %_ptr_uint CrossWorkgroup %bitand
103+
%var_logor = OpVariable %_ptr_bool CrossWorkgroup %logor
104+
%var_logand = OpVariable %_ptr_bool CrossWorkgroup %logand
30105

31106
%15 = OpFunction %void Pure %14
32107
%entry = OpLabel

0 commit comments

Comments
 (0)