|
5 | 5 | ; RUN: llvm-spirv -r %t.spv -o %t.bc
|
6 | 6 | ; RUN: llvm-dis %t.bc -o - | FileCheck %s
|
7 | 7 |
|
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. |
9 | 11 |
|
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 |
11 | 31 |
|
12 | 32 | OpCapability Addresses
|
13 | 33 | OpCapability Linkage
|
14 | 34 | OpCapability Kernel
|
15 | 35 | OpMemoryModel Physical32 OpenCL
|
16 | 36 | OpEntryPoint Kernel %15 "foo"
|
17 |
| - OpName %var "var" |
18 | 37 | 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 |
22 | 59 | %uint = OpTypeInt 32 0
|
| 60 | + %uint_0 = OpConstant %uint 0 |
23 | 61 | %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 |
26 | 84 | %void = OpTypeVoid
|
27 | 85 | %14 = OpTypeFunction %void
|
28 | 86 |
|
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 |
30 | 105 |
|
31 | 106 | %15 = OpFunction %void Pure %14
|
32 | 107 | %entry = OpLabel
|
|
0 commit comments