Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 1 | // RUN: mlir-opt -split-input-file -convert-std-to-spirv -verify-diagnostics %s | FileCheck %s |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 2 | |
| 3 | //===----------------------------------------------------------------------===// |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 4 | // std.select |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 5 | //===----------------------------------------------------------------------===// |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 6 | |
Lei Zhang | 67e8690 | 2020-03-18 13:55:27 | [diff] [blame] | 7 | module attributes { |
| 8 | spv.target_env = #spv.target_env< |
Butygin | 75a1bee | 2021-10-28 16:04:35 | [diff] [blame^] | 9 | #spv.vce<v1.0, [Int8, Int16, Int64, Float16, Float64, Shader], []>, {}> |
Lei Zhang | 67e8690 | 2020-03-18 13:55:27 | [diff] [blame] | 10 | } { |
| 11 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 12 | // Check integer operation conversions. |
| 13 | // CHECK-LABEL: @int32_scalar |
| 14 | func @int32_scalar(%lhs: i32, %rhs: i32) { |
| 15 | // CHECK: spv.IAdd %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 16 | %0 = arith.addi %lhs, %rhs: i32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 17 | // CHECK: spv.ISub %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 18 | %1 = arith.subi %lhs, %rhs: i32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 19 | // CHECK: spv.IMul %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 20 | %2 = arith.muli %lhs, %rhs: i32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 21 | // CHECK: spv.SDiv %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 22 | %3 = arith.divsi %lhs, %rhs: i32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 23 | // CHECK: spv.UDiv %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 24 | %4 = arith.divui %lhs, %rhs: i32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 25 | // CHECK: spv.UMod %{{.*}}, %{{.*}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 26 | %5 = arith.remui %lhs, %rhs: i32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 27 | // CHECK: spv.GLSL.SMax %{{.*}}, %{{.*}}: i32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 28 | %6 = arith.maxsi %lhs, %rhs : i32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 29 | // CHECK: spv.GLSL.UMax %{{.*}}, %{{.*}}: i32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 30 | %7 = arith.maxui %lhs, %rhs : i32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 31 | // CHECK: spv.GLSL.SMin %{{.*}}, %{{.*}}: i32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 32 | %8 = arith.minsi %lhs, %rhs : i32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 33 | // CHECK: spv.GLSL.UMin %{{.*}}, %{{.*}}: i32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 34 | %9 = arith.minui %lhs, %rhs : i32 |
Lei Zhang | 4ba45a7 | 2020-07-12 17:03:23 | [diff] [blame] | 35 | return |
| 36 | } |
| 37 | |
| 38 | // CHECK-LABEL: @scalar_srem |
| 39 | // CHECK-SAME: (%[[LHS:.+]]: i32, %[[RHS:.+]]: i32) |
| 40 | func @scalar_srem(%lhs: i32, %rhs: i32) { |
| 41 | // CHECK: %[[LABS:.+]] = spv.GLSL.SAbs %[[LHS]] : i32 |
| 42 | // CHECK: %[[RABS:.+]] = spv.GLSL.SAbs %[[RHS]] : i32 |
| 43 | // CHECK: %[[ABS:.+]] = spv.UMod %[[LABS]], %[[RABS]] : i32 |
| 44 | // CHECK: %[[POS:.+]] = spv.IEqual %[[LHS]], %[[LABS]] : i32 |
| 45 | // CHECK: %[[NEG:.+]] = spv.SNegate %[[ABS]] : i32 |
| 46 | // CHECK: %{{.+}} = spv.Select %[[POS]], %[[ABS]], %[[NEG]] : i1, i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 47 | %0 = arith.remsi %lhs, %rhs: i32 |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 48 | return |
| 49 | } |
| 50 | |
Hanhan Wang | 58cdb8b | 2020-03-24 13:15:54 | [diff] [blame] | 51 | // Check float unary operation conversions. |
| 52 | // CHECK-LABEL: @float32_unary_scalar |
| 53 | func @float32_unary_scalar(%arg0: f32) { |
| 54 | // CHECK: spv.GLSL.FAbs %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 55 | %0 = math.abs %arg0 : f32 |
Hanhan Wang | 58cdb8b | 2020-03-24 13:15:54 | [diff] [blame] | 56 | // CHECK: spv.GLSL.Ceil %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 57 | %1 = math.ceil %arg0 : f32 |
Hanhan Wang | 58cdb8b | 2020-03-24 13:15:54 | [diff] [blame] | 58 | // CHECK: spv.FNegate %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 59 | %5 = arith.negf %arg0 : f32 |
Rob Suderman | 5556575 | 2020-08-13 21:59:58 | [diff] [blame] | 60 | // CHECK: spv.GLSL.Floor %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 61 | %10 = math.floor %arg0 : f32 |
Hanhan Wang | 58cdb8b | 2020-03-24 13:15:54 | [diff] [blame] | 62 | return |
| 63 | } |
| 64 | |
| 65 | // Check float binary operation conversions. |
| 66 | // CHECK-LABEL: @float32_binary_scalar |
| 67 | func @float32_binary_scalar(%lhs: f32, %rhs: f32) { |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 68 | // CHECK: spv.FAdd %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 69 | %0 = arith.addf %lhs, %rhs: f32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 70 | // CHECK: spv.FSub %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 71 | %1 = arith.subf %lhs, %rhs: f32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 72 | // CHECK: spv.FMul %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 73 | %2 = arith.mulf %lhs, %rhs: f32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 74 | // CHECK: spv.FDiv %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 75 | %3 = arith.divf %lhs, %rhs: f32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 76 | // CHECK: spv.FRem %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 77 | %4 = arith.remf %lhs, %rhs: f32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 78 | // CHECK: spv.GLSL.FMax %{{.*}}, %{{.*}}: f32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 79 | %5 = arith.maxf %lhs, %rhs: f32 |
Lei Zhang | 7a89444 | 2021-10-05 17:56:20 | [diff] [blame] | 80 | // CHECK: spv.GLSL.FMin %{{.*}}, %{{.*}}: f32 |
Alexander Belyaev | 9b1d90e | 2021-11-15 11:52:37 | [diff] [blame] | 81 | %6 = arith.minf %lhs, %rhs: f32 |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 82 | return |
Denis Khalikov | d968f96 | 2019-12-11 19:17:03 | [diff] [blame] | 83 | } |
| 84 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 85 | // Check int vector types. |
| 86 | // CHECK-LABEL: @int_vector234 |
Lei Zhang | 4ba45a7 | 2020-07-12 17:03:23 | [diff] [blame] | 87 | func @int_vector234(%arg0: vector<2xi8>, %arg1: vector<4xi64>) { |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 88 | // CHECK: spv.SDiv %{{.*}}, %{{.*}}: vector<2xi8> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 89 | %0 = arith.divsi %arg0, %arg0: vector<2xi8> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 90 | // CHECK: spv.UDiv %{{.*}}, %{{.*}}: vector<4xi64> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 91 | %1 = arith.divui %arg1, %arg1: vector<4xi64> |
Lei Zhang | 4ba45a7 | 2020-07-12 17:03:23 | [diff] [blame] | 92 | return |
| 93 | } |
| 94 | |
| 95 | // CHECK-LABEL: @vector_srem |
| 96 | // CHECK-SAME: (%[[LHS:.+]]: vector<3xi16>, %[[RHS:.+]]: vector<3xi16>) |
| 97 | func @vector_srem(%arg0: vector<3xi16>, %arg1: vector<3xi16>) { |
| 98 | // CHECK: %[[LABS:.+]] = spv.GLSL.SAbs %[[LHS]] : vector<3xi16> |
| 99 | // CHECK: %[[RABS:.+]] = spv.GLSL.SAbs %[[RHS]] : vector<3xi16> |
| 100 | // CHECK: %[[ABS:.+]] = spv.UMod %[[LABS]], %[[RABS]] : vector<3xi16> |
| 101 | // CHECK: %[[POS:.+]] = spv.IEqual %[[LHS]], %[[LABS]] : vector<3xi16> |
| 102 | // CHECK: %[[NEG:.+]] = spv.SNegate %[[ABS]] : vector<3xi16> |
| 103 | // CHECK: %{{.+}} = spv.Select %[[POS]], %[[ABS]], %[[NEG]] : vector<3xi1>, vector<3xi16> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 104 | %0 = arith.remsi %arg0, %arg1: vector<3xi16> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 105 | return |
Denis Khalikov | d968f96 | 2019-12-11 19:17:03 | [diff] [blame] | 106 | } |
| 107 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 108 | // Check float vector types. |
| 109 | // CHECK-LABEL: @float_vector234 |
| 110 | func @float_vector234(%arg0: vector<2xf16>, %arg1: vector<3xf64>) { |
| 111 | // CHECK: spv.FAdd %{{.*}}, %{{.*}}: vector<2xf16> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 112 | %0 = arith.addf %arg0, %arg0: vector<2xf16> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 113 | // CHECK: spv.FMul %{{.*}}, %{{.*}}: vector<3xf64> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 114 | %1 = arith.mulf %arg1, %arg1: vector<3xf64> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 115 | return |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 116 | } |
| 117 | |
Lei Zhang | 9f622b3 | 2021-02-05 14:03:48 | [diff] [blame] | 118 | // CHECK-LABEL: @one_elem_vector |
| 119 | func @one_elem_vector(%arg0: vector<1xi32>) { |
| 120 | // CHECK: spv.IAdd %{{.+}}, %{{.+}}: i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 121 | %0 = arith.addi %arg0, %arg0: vector<1xi32> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 122 | return |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 123 | } |
| 124 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 125 | // CHECK-LABEL: @unsupported_5elem_vector |
| 126 | func @unsupported_5elem_vector(%arg0: vector<5xi32>) { |
| 127 | // CHECK: subi |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 128 | %1 = arith.subi %arg0, %arg0: vector<5xi32> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 129 | return |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 130 | } |
| 131 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 132 | // CHECK-LABEL: @unsupported_2x2elem_vector |
| 133 | func @unsupported_2x2elem_vector(%arg0: vector<2x2xi32>) { |
| 134 | // CHECK: muli |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 135 | %2 = arith.muli %arg0, %arg0: vector<2x2xi32> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 136 | return |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 137 | } |
| 138 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 139 | } // end module |
| 140 | |
| 141 | // ----- |
| 142 | |
| 143 | // Check that types are converted to 32-bit when no special capabilities. |
| 144 | module attributes { |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 145 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 146 | } { |
| 147 | |
Hanhan Wang | 520a570 | 2020-05-19 17:55:17 | [diff] [blame] | 148 | // CHECK-LABEL: @int_vector23 |
| 149 | func @int_vector23(%arg0: vector<2xi8>, %arg1: vector<3xi16>) { |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 150 | // CHECK: spv.SDiv %{{.*}}, %{{.*}}: vector<2xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 151 | %0 = arith.divsi %arg0, %arg0: vector<2xi8> |
Lei Zhang | 4ba45a7 | 2020-07-12 17:03:23 | [diff] [blame] | 152 | // CHECK: spv.SDiv %{{.*}}, %{{.*}}: vector<3xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 153 | %1 = arith.divsi %arg1, %arg1: vector<3xi16> |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 154 | return |
Mahesh Ravishankar | d3a601c | 2019-06-11 17:47:06 | [diff] [blame] | 155 | } |
| 156 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 157 | // CHECK-LABEL: @float_scalar |
| 158 | func @float_scalar(%arg0: f16, %arg1: f64) { |
| 159 | // CHECK: spv.FAdd %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 160 | %0 = arith.addf %arg0, %arg0: f16 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 161 | // CHECK: spv.FMul %{{.*}}, %{{.*}}: f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 162 | %1 = arith.mulf %arg1, %arg1: f64 |
Lei Zhang | d3e7816 | 2020-02-07 16:30:19 | [diff] [blame] | 163 | return |
Denis Khalikov | d968f96 | 2019-12-11 19:17:03 | [diff] [blame] | 164 | } |
| 165 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 166 | } // end module |
Denis Khalikov | d968f96 | 2019-12-11 19:17:03 | [diff] [blame] | 167 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 168 | // ----- |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 169 | |
Hanhan Wang | 520a570 | 2020-05-19 17:55:17 | [diff] [blame] | 170 | // Check that types are converted to 32-bit when no special capabilities that |
| 171 | // are not supported. |
| 172 | module attributes { |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 173 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
Hanhan Wang | 520a570 | 2020-05-19 17:55:17 | [diff] [blame] | 174 | } { |
| 175 | |
River Riddle | 015192c | 2021-10-27 02:00:10 | [diff] [blame] | 176 | // expected-error@below {{failed to materialize conversion for block argument #0 that remained live after conversion}} |
Hanhan Wang | 520a570 | 2020-05-19 17:55:17 | [diff] [blame] | 177 | func @int_vector4_invalid(%arg0: vector<4xi64>) { |
River Riddle | 015192c | 2021-10-27 02:00:10 | [diff] [blame] | 178 | // expected-error@below {{bitwidth emulation is not implemented yet on unsigned op}} |
| 179 | // expected-note@below {{see existing live user here}} |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 180 | %0 = arith.divui %arg0, %arg0: vector<4xi64> |
Hanhan Wang | 520a570 | 2020-05-19 17:55:17 | [diff] [blame] | 181 | return |
| 182 | } |
| 183 | |
| 184 | } // end module |
| 185 | |
| 186 | // ----- |
| 187 | |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 188 | //===----------------------------------------------------------------------===// |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 189 | // std bit ops |
| 190 | //===----------------------------------------------------------------------===// |
| 191 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 192 | module attributes { |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 193 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 194 | } { |
| 195 | |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 196 | // CHECK-LABEL: @bitwise_scalar |
| 197 | func @bitwise_scalar(%arg0 : i32, %arg1 : i32) { |
| 198 | // CHECK: spv.BitwiseAnd |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 199 | %0 = arith.andi %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 200 | // CHECK: spv.BitwiseOr |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 201 | %1 = arith.ori %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 202 | // CHECK: spv.BitwiseXor |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 203 | %2 = arith.xori %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 204 | return |
| 205 | } |
| 206 | |
| 207 | // CHECK-LABEL: @bitwise_vector |
| 208 | func @bitwise_vector(%arg0 : vector<4xi32>, %arg1 : vector<4xi32>) { |
| 209 | // CHECK: spv.BitwiseAnd |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 210 | %0 = arith.andi %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 211 | // CHECK: spv.BitwiseOr |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 212 | %1 = arith.ori %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 213 | // CHECK: spv.BitwiseXor |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 214 | %2 = arith.xori %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 215 | return |
| 216 | } |
| 217 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 218 | // CHECK-LABEL: @logical_scalar |
| 219 | func @logical_scalar(%arg0 : i1, %arg1 : i1) { |
| 220 | // CHECK: spv.LogicalAnd |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 221 | %0 = arith.andi %arg0, %arg1 : i1 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 222 | // CHECK: spv.LogicalOr |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 223 | %1 = arith.ori %arg0, %arg1 : i1 |
Hanhan Wang | 7b7df8e | 2021-04-20 14:34:32 | [diff] [blame] | 224 | // CHECK: spv.LogicalNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 225 | %2 = arith.xori %arg0, %arg1 : i1 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 226 | return |
| 227 | } |
| 228 | |
| 229 | // CHECK-LABEL: @logical_vector |
| 230 | func @logical_vector(%arg0 : vector<4xi1>, %arg1 : vector<4xi1>) { |
| 231 | // CHECK: spv.LogicalAnd |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 232 | %0 = arith.andi %arg0, %arg1 : vector<4xi1> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 233 | // CHECK: spv.LogicalOr |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 234 | %1 = arith.ori %arg0, %arg1 : vector<4xi1> |
Hanhan Wang | 7b7df8e | 2021-04-20 14:34:32 | [diff] [blame] | 235 | // CHECK: spv.LogicalNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 236 | %2 = arith.xori %arg0, %arg1 : vector<4xi1> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 237 | return |
| 238 | } |
| 239 | |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 240 | // CHECK-LABEL: @shift_scalar |
| 241 | func @shift_scalar(%arg0 : i32, %arg1 : i32) { |
| 242 | // CHECK: spv.ShiftLeftLogical |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 243 | %0 = arith.shli %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 244 | // CHECK: spv.ShiftRightArithmetic |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 245 | %1 = arith.shrsi %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 246 | // CHECK: spv.ShiftRightLogical |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 247 | %2 = arith.shrui %arg0, %arg1 : i32 |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 248 | return |
| 249 | } |
| 250 | |
| 251 | // CHECK-LABEL: @shift_vector |
| 252 | func @shift_vector(%arg0 : vector<4xi32>, %arg1 : vector<4xi32>) { |
| 253 | // CHECK: spv.ShiftLeftLogical |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 254 | %0 = arith.shli %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 255 | // CHECK: spv.ShiftRightArithmetic |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 256 | %1 = arith.shrsi %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 257 | // CHECK: spv.ShiftRightLogical |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 258 | %2 = arith.shrui %arg0, %arg1 : vector<4xi32> |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 259 | return |
| 260 | } |
| 261 | |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 262 | } // end module |
| 263 | |
| 264 | // ----- |
| 265 | |
Denis Khalikov | 9883b14 | 2020-01-08 02:40:42 | [diff] [blame] | 266 | //===----------------------------------------------------------------------===// |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 267 | // std.cmpf |
| 268 | //===----------------------------------------------------------------------===// |
| 269 | |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 270 | module attributes { |
| 271 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
| 272 | } { |
| 273 | |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 274 | // CHECK-LABEL: @cmpf |
| 275 | func @cmpf(%arg0 : f32, %arg1 : f32) { |
| 276 | // CHECK: spv.FOrdEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 277 | %1 = arith.cmpf oeq, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 278 | // CHECK: spv.FOrdGreaterThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 279 | %2 = arith.cmpf ogt, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 280 | // CHECK: spv.FOrdGreaterThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 281 | %3 = arith.cmpf oge, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 282 | // CHECK: spv.FOrdLessThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 283 | %4 = arith.cmpf olt, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 284 | // CHECK: spv.FOrdLessThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 285 | %5 = arith.cmpf ole, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 286 | // CHECK: spv.FOrdNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 287 | %6 = arith.cmpf one, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 288 | // CHECK: spv.FUnordEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 289 | %7 = arith.cmpf ueq, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 290 | // CHECK: spv.FUnordGreaterThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 291 | %8 = arith.cmpf ugt, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 292 | // CHECK: spv.FUnordGreaterThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 293 | %9 = arith.cmpf uge, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 294 | // CHECK: spv.FUnordLessThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 295 | %10 = arith.cmpf ult, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 296 | // CHECK: FUnordLessThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 297 | %11 = arith.cmpf ule, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 298 | // CHECK: spv.FUnordNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 299 | %12 = arith.cmpf une, %arg0, %arg1 : f32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 300 | return |
| 301 | } |
| 302 | |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 303 | } // end module |
| 304 | |
| 305 | // ----- |
| 306 | |
Lei Zhang | e27197f | 2021-01-22 18:08:00 | [diff] [blame] | 307 | // With Kernel capability, we can convert NaN check to spv.Ordered/spv.Unordered. |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 308 | module attributes { |
| 309 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [Kernel], []>, {}> |
| 310 | } { |
| 311 | |
| 312 | // CHECK-LABEL: @cmpf |
| 313 | func @cmpf(%arg0 : f32, %arg1 : f32) { |
| 314 | // CHECK: spv.Ordered |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 315 | %0 = arith.cmpf ord, %arg0, %arg1 : f32 |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 316 | // CHECK: spv.Unordered |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 317 | %1 = arith.cmpf uno, %arg0, %arg1 : f32 |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 318 | return |
| 319 | } |
| 320 | |
| 321 | } // end module |
| 322 | |
| 323 | // ----- |
| 324 | |
Lei Zhang | e27197f | 2021-01-22 18:08:00 | [diff] [blame] | 325 | // Without Kernel capability, we need to convert NaN check to spv.IsNan. |
| 326 | module attributes { |
| 327 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
| 328 | } { |
| 329 | |
| 330 | // CHECK-LABEL: @cmpf |
| 331 | // CHECK-SAME: %[[LHS:.+]]: f32, %[[RHS:.+]]: f32 |
| 332 | func @cmpf(%arg0 : f32, %arg1 : f32) { |
| 333 | // CHECK: %[[LHS_NAN:.+]] = spv.IsNan %[[LHS]] : f32 |
| 334 | // CHECK-NEXT: %[[RHS_NAN:.+]] = spv.IsNan %[[RHS]] : f32 |
| 335 | // CHECK-NEXT: %[[OR:.+]] = spv.LogicalOr %[[LHS_NAN]], %[[RHS_NAN]] : i1 |
| 336 | // CHECK-NEXT: %{{.+}} = spv.LogicalNot %[[OR]] : i1 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 337 | %0 = arith.cmpf ord, %arg0, %arg1 : f32 |
Lei Zhang | e27197f | 2021-01-22 18:08:00 | [diff] [blame] | 338 | |
| 339 | // CHECK-NEXT: %[[LHS_NAN:.+]] = spv.IsNan %[[LHS]] : f32 |
| 340 | // CHECK-NEXT: %[[RHS_NAN:.+]] = spv.IsNan %[[RHS]] : f32 |
| 341 | // CHECK-NEXT: %{{.+}} = spv.LogicalOr %[[LHS_NAN]], %[[RHS_NAN]] : i1 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 342 | %1 = arith.cmpf uno, %arg0, %arg1 : f32 |
Lei Zhang | e27197f | 2021-01-22 18:08:00 | [diff] [blame] | 343 | return |
| 344 | } |
| 345 | |
| 346 | } // end module |
| 347 | |
| 348 | // ----- |
| 349 | |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 350 | //===----------------------------------------------------------------------===// |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 351 | // std.cmpi |
| 352 | //===----------------------------------------------------------------------===// |
| 353 | |
Lei Zhang | 167fb9b | 2021-01-22 18:03:59 | [diff] [blame] | 354 | module attributes { |
| 355 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
| 356 | } { |
| 357 | |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 358 | // CHECK-LABEL: @cmpi |
| 359 | func @cmpi(%arg0 : i32, %arg1 : i32) { |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 360 | // CHECK: spv.IEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 361 | %0 = arith.cmpi eq, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 362 | // CHECK: spv.INotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 363 | %1 = arith.cmpi ne, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 364 | // CHECK: spv.SLessThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 365 | %2 = arith.cmpi slt, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 366 | // CHECK: spv.SLessThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 367 | %3 = arith.cmpi sle, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 368 | // CHECK: spv.SGreaterThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 369 | %4 = arith.cmpi sgt, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 370 | // CHECK: spv.SGreaterThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 371 | %5 = arith.cmpi sge, %arg0, %arg1 : i32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 372 | // CHECK: spv.ULessThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 373 | %6 = arith.cmpi ult, %arg0, %arg1 : i32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 374 | // CHECK: spv.ULessThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 375 | %7 = arith.cmpi ule, %arg0, %arg1 : i32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 376 | // CHECK: spv.UGreaterThan |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 377 | %8 = arith.cmpi ugt, %arg0, %arg1 : i32 |
Denis Khalikov | dd495e8 | 2020-01-08 02:47:49 | [diff] [blame] | 378 | // CHECK: spv.UGreaterThanEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 379 | %9 = arith.cmpi uge, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 380 | return |
| 381 | } |
| 382 | |
MaheshRavishankar | 1c12a95 | 2020-04-29 16:57:31 | [diff] [blame] | 383 | // CHECK-LABEL: @boolcmpi |
| 384 | func @boolcmpi(%arg0 : i1, %arg1 : i1) { |
| 385 | // CHECK: spv.LogicalEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 386 | %0 = arith.cmpi eq, %arg0, %arg1 : i1 |
MaheshRavishankar | 1c12a95 | 2020-04-29 16:57:31 | [diff] [blame] | 387 | // CHECK: spv.LogicalNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 388 | %1 = arith.cmpi ne, %arg0, %arg1 : i1 |
MaheshRavishankar | 1c12a95 | 2020-04-29 16:57:31 | [diff] [blame] | 389 | return |
| 390 | } |
| 391 | |
Hanhan Wang | 47fd19f | 2020-11-16 14:50:45 | [diff] [blame] | 392 | // CHECK-LABEL: @vecboolcmpi |
| 393 | func @vecboolcmpi(%arg0 : vector<4xi1>, %arg1 : vector<4xi1>) { |
| 394 | // CHECK: spv.LogicalEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 395 | %0 = arith.cmpi eq, %arg0, %arg1 : vector<4xi1> |
Hanhan Wang | 47fd19f | 2020-11-16 14:50:45 | [diff] [blame] | 396 | // CHECK: spv.LogicalNotEqual |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 397 | %1 = arith.cmpi ne, %arg0, %arg1 : vector<4xi1> |
Hanhan Wang | 47fd19f | 2020-11-16 14:50:45 | [diff] [blame] | 398 | return |
| 399 | } |
| 400 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 401 | } // end module |
| 402 | |
| 403 | // ----- |
| 404 | |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 405 | //===----------------------------------------------------------------------===// |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 406 | // arith.constant |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 407 | //===----------------------------------------------------------------------===// |
| 408 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 409 | module attributes { |
| 410 | spv.target_env = #spv.target_env< |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 411 | #spv.vce<v1.0, [Int8, Int16, Int64, Float16, Float64], []>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 412 | } { |
| 413 | |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 414 | // CHECK-LABEL: @constant |
| 415 | func @constant() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 416 | // CHECK: spv.Constant true |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 417 | %0 = arith.constant true |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 418 | // CHECK: spv.Constant 42 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 419 | %1 = arith.constant 42 : i32 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 420 | // CHECK: spv.Constant 5.000000e-01 : f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 421 | %2 = arith.constant 0.5 : f32 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 422 | // CHECK: spv.Constant dense<[2, 3]> : vector<2xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 423 | %3 = arith.constant dense<[2, 3]> : vector<2xi32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 424 | // CHECK: spv.Constant 1 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 425 | %4 = arith.constant 1 : index |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 426 | // CHECK: spv.Constant dense<1> : tensor<6xi32> : !spv.array<6 x i32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 427 | %5 = arith.constant dense<1> : tensor<2x3xi32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 428 | // CHECK: spv.Constant dense<1.000000e+00> : tensor<6xf32> : !spv.array<6 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 429 | %6 = arith.constant dense<1.0> : tensor<2x3xf32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 430 | // CHECK: spv.Constant dense<{{\[}}1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, 5.000000e+00, 6.000000e+00]> : tensor<6xf32> : !spv.array<6 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 431 | %7 = arith.constant dense<[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]> : tensor<2x3xf32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 432 | // CHECK: spv.Constant dense<{{\[}}1, 2, 3, 4, 5, 6]> : tensor<6xi32> : !spv.array<6 x i32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 433 | %8 = arith.constant dense<[[1, 2, 3], [4, 5, 6]]> : tensor<2x3xi32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 434 | // CHECK: spv.Constant dense<{{\[}}1, 2, 3, 4, 5, 6]> : tensor<6xi32> : !spv.array<6 x i32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 435 | %9 = arith.constant dense<[[1, 2], [3, 4], [5, 6]]> : tensor<3x2xi32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 436 | // CHECK: spv.Constant dense<{{\[}}1, 2, 3, 4, 5, 6]> : tensor<6xi32> : !spv.array<6 x i32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 437 | %10 = arith.constant dense<[1, 2, 3, 4, 5, 6]> : tensor<6xi32> |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 438 | return |
| 439 | } |
| 440 | |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 441 | // CHECK-LABEL: @constant_16bit |
| 442 | func @constant_16bit() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 443 | // CHECK: spv.Constant 4 : i16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 444 | %0 = arith.constant 4 : i16 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 445 | // CHECK: spv.Constant 5.000000e+00 : f16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 446 | %1 = arith.constant 5.0 : f16 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 447 | // CHECK: spv.Constant dense<[2, 3]> : vector<2xi16> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 448 | %2 = arith.constant dense<[2, 3]> : vector<2xi16> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 449 | // CHECK: spv.Constant dense<4.000000e+00> : tensor<5xf16> : !spv.array<5 x f16, stride=2> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 450 | %3 = arith.constant dense<4.0> : tensor<5xf16> |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 451 | return |
| 452 | } |
| 453 | |
| 454 | // CHECK-LABEL: @constant_64bit |
| 455 | func @constant_64bit() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 456 | // CHECK: spv.Constant 4 : i64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 457 | %0 = arith.constant 4 : i64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 458 | // CHECK: spv.Constant 5.000000e+00 : f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 459 | %1 = arith.constant 5.0 : f64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 460 | // CHECK: spv.Constant dense<[2, 3]> : vector<2xi64> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 461 | %2 = arith.constant dense<[2, 3]> : vector<2xi64> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 462 | // CHECK: spv.Constant dense<4.000000e+00> : tensor<5xf64> : !spv.array<5 x f64, stride=8> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 463 | %3 = arith.constant dense<4.0> : tensor<5xf64> |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 464 | return |
| 465 | } |
| 466 | |
| 467 | } // end module |
| 468 | |
| 469 | // ----- |
| 470 | |
| 471 | // Check that constants are converted to 32-bit when no special capability. |
| 472 | module attributes { |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 473 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 474 | } { |
| 475 | |
| 476 | // CHECK-LABEL: @constant_16bit |
| 477 | func @constant_16bit() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 478 | // CHECK: spv.Constant 4 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 479 | %0 = arith.constant 4 : i16 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 480 | // CHECK: spv.Constant 5.000000e+00 : f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 481 | %1 = arith.constant 5.0 : f16 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 482 | // CHECK: spv.Constant dense<[2, 3]> : vector<2xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 483 | %2 = arith.constant dense<[2, 3]> : vector<2xi16> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 484 | // CHECK: spv.Constant dense<4.000000e+00> : tensor<5xf32> : !spv.array<5 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 485 | %3 = arith.constant dense<4.0> : tensor<5xf16> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 486 | // CHECK: spv.Constant dense<[1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00]> : tensor<4xf32> : !spv.array<4 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 487 | %4 = arith.constant dense<[[1.0, 2.0], [3.0, 4.0]]> : tensor<2x2xf16> |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 488 | return |
| 489 | } |
| 490 | |
| 491 | // CHECK-LABEL: @constant_64bit |
| 492 | func @constant_64bit() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 493 | // CHECK: spv.Constant 4 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 494 | %0 = arith.constant 4 : i64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 495 | // CHECK: spv.Constant 5.000000e+00 : f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 496 | %1 = arith.constant 5.0 : f64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 497 | // CHECK: spv.Constant dense<[2, 3]> : vector<2xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 498 | %2 = arith.constant dense<[2, 3]> : vector<2xi64> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 499 | // CHECK: spv.Constant dense<4.000000e+00> : tensor<5xf32> : !spv.array<5 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 500 | %3 = arith.constant dense<4.0> : tensor<5xf64> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 501 | // CHECK: spv.Constant dense<[1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00]> : tensor<4xf32> : !spv.array<4 x f32, stride=4> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 502 | %4 = arith.constant dense<[[1.0, 2.0], [3.0, 4.0]]> : tensor<2x2xf16> |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 503 | return |
| 504 | } |
| 505 | |
| 506 | // CHECK-LABEL: @corner_cases |
| 507 | func @corner_cases() { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 508 | // CHECK: %{{.*}} = spv.Constant -1 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 509 | %0 = arith.constant 4294967295 : i64 // 2^32 - 1 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 510 | // CHECK: %{{.*}} = spv.Constant 2147483647 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 511 | %1 = arith.constant 2147483647 : i64 // 2^31 - 1 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 512 | // CHECK: %{{.*}} = spv.Constant -2147483648 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 513 | %2 = arith.constant 2147483648 : i64 // 2^31 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 514 | // CHECK: %{{.*}} = spv.Constant -2147483648 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 515 | %3 = arith.constant -2147483648 : i64 // -2^31 |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 516 | |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 517 | // CHECK: %{{.*}} = spv.Constant -1 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 518 | %5 = arith.constant -1 : i64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 519 | // CHECK: %{{.*}} = spv.Constant -2 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 520 | %6 = arith.constant -2 : i64 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 521 | // CHECK: %{{.*}} = spv.Constant -1 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 522 | %7 = arith.constant -1 : index |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 523 | // CHECK: %{{.*}} = spv.Constant -2 : i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 524 | %8 = arith.constant -2 : index |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 525 | |
| 526 | |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 527 | // CHECK: spv.Constant false |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 528 | %9 = arith.constant false |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 529 | // CHECK: spv.Constant true |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 530 | %10 = arith.constant true |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 531 | |
| 532 | return |
| 533 | } |
| 534 | |
| 535 | // CHECK-LABEL: @unsupported_cases |
| 536 | func @unsupported_cases() { |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 537 | // CHECK: %{{.*}} = arith.constant 4294967296 : i64 |
| 538 | %0 = arith.constant 4294967296 : i64 // 2^32 |
| 539 | // CHECK: %{{.*}} = arith.constant -2147483649 : i64 |
| 540 | %1 = arith.constant -2147483649 : i64 // -2^31 - 1 |
| 541 | // CHECK: %{{.*}} = arith.constant 1.0000000000000002 : f64 |
| 542 | %2 = arith.constant 0x3FF0000000000001 : f64 // smallest number > 1 |
Lei Zhang | 73431a4 | 2020-03-18 13:56:51 | [diff] [blame] | 543 | return |
| 544 | } |
| 545 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 546 | } // end module |
| 547 | |
| 548 | // ----- |
| 549 | |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 550 | //===----------------------------------------------------------------------===// |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 551 | // std cast ops |
MaheshRavishankar | c3d3569 | 2019-12-26 00:29:17 | [diff] [blame] | 552 | //===----------------------------------------------------------------------===// |
| 553 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 554 | module attributes { |
| 555 | spv.target_env = #spv.target_env< |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 556 | #spv.vce<v1.0, [Int8, Int16, Int64, Float16, Float64], []>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 557 | } { |
| 558 | |
Hanhan Wang | 756d6959 | 2020-05-11 22:41:12 | [diff] [blame] | 559 | // CHECK-LABEL: index_cast1 |
| 560 | func @index_cast1(%arg0: i16) { |
| 561 | // CHECK: spv.SConvert %{{.+}} : i16 to i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 562 | %0 = arith.index_cast %arg0 : i16 to index |
Hanhan Wang | 756d6959 | 2020-05-11 22:41:12 | [diff] [blame] | 563 | return |
| 564 | } |
| 565 | |
| 566 | // CHECK-LABEL: index_cast2 |
| 567 | func @index_cast2(%arg0: index) { |
| 568 | // CHECK: spv.SConvert %{{.+}} : i32 to i16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 569 | %0 = arith.index_cast %arg0 : index to i16 |
Hanhan Wang | 756d6959 | 2020-05-11 22:41:12 | [diff] [blame] | 570 | return |
| 571 | } |
| 572 | |
| 573 | // CHECK-LABEL: index_cast3 |
| 574 | func @index_cast3(%arg0: i32) { |
| 575 | // CHECK-NOT: spv.SConvert |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 576 | %0 = arith.index_cast %arg0 : i32 to index |
Hanhan Wang | 756d6959 | 2020-05-11 22:41:12 | [diff] [blame] | 577 | return |
| 578 | } |
| 579 | |
| 580 | // CHECK-LABEL: index_cast4 |
| 581 | func @index_cast4(%arg0: index) { |
| 582 | // CHECK-NOT: spv.SConvert |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 583 | %0 = arith.index_cast %arg0 : index to i32 |
Hanhan Wang | 756d6959 | 2020-05-11 22:41:12 | [diff] [blame] | 584 | return |
| 585 | } |
| 586 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 587 | // CHECK-LABEL: @fpext1 |
| 588 | func @fpext1(%arg0: f16) -> f64 { |
| 589 | // CHECK: spv.FConvert %{{.*}} : f16 to f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 590 | %0 = arith.extf %arg0 : f16 to f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 591 | return %0 : f64 |
MaheshRavishankar | c3d3569 | 2019-12-26 00:29:17 | [diff] [blame] | 592 | } |
| 593 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 594 | // CHECK-LABEL: @fpext2 |
| 595 | func @fpext2(%arg0 : f32) -> f64 { |
| 596 | // CHECK: spv.FConvert %{{.*}} : f32 to f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 597 | %0 = arith.extf %arg0 : f32 to f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 598 | return %0 : f64 |
Denis Khalikov | eac01f6 | 2020-01-08 03:11:59 | [diff] [blame] | 599 | } |
| 600 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 601 | // CHECK-LABEL: @fptrunc1 |
| 602 | func @fptrunc1(%arg0 : f64) -> f16 { |
| 603 | // CHECK: spv.FConvert %{{.*}} : f64 to f16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 604 | %0 = arith.truncf %arg0 : f64 to f16 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 605 | return %0 : f16 |
Denis Khalikov | eac01f6 | 2020-01-08 03:11:59 | [diff] [blame] | 606 | } |
| 607 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 608 | // CHECK-LABEL: @fptrunc2 |
| 609 | func @fptrunc2(%arg0: f32) -> f16 { |
| 610 | // CHECK: spv.FConvert %{{.*}} : f32 to f16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 611 | %0 = arith.truncf %arg0 : f32 to f16 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 612 | return %0 : f16 |
| 613 | } |
| 614 | |
| 615 | // CHECK-LABEL: @sitofp1 |
| 616 | func @sitofp1(%arg0 : i32) -> f32 { |
| 617 | // CHECK: spv.ConvertSToF %{{.*}} : i32 to f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 618 | %0 = arith.sitofp %arg0 : i32 to f32 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 619 | return %0 : f32 |
| 620 | } |
| 621 | |
| 622 | // CHECK-LABEL: @sitofp2 |
| 623 | func @sitofp2(%arg0 : i64) -> f64 { |
| 624 | // CHECK: spv.ConvertSToF %{{.*}} : i64 to f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 625 | %0 = arith.sitofp %arg0 : i64 to f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 626 | return %0 : f64 |
| 627 | } |
| 628 | |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 629 | // CHECK-LABEL: @uitofp_i16_f32 |
| 630 | func @uitofp_i16_f32(%arg0: i16) -> f32 { |
| 631 | // CHECK: spv.ConvertUToF %{{.*}} : i16 to f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 632 | %0 = arith.uitofp %arg0 : i16 to f32 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 633 | return %0 : f32 |
| 634 | } |
| 635 | |
| 636 | // CHECK-LABEL: @uitofp_i32_f32 |
| 637 | func @uitofp_i32_f32(%arg0 : i32) -> f32 { |
| 638 | // CHECK: spv.ConvertUToF %{{.*}} : i32 to f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 639 | %0 = arith.uitofp %arg0 : i32 to f32 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 640 | return %0 : f32 |
| 641 | } |
| 642 | |
| 643 | // CHECK-LABEL: @uitofp_i1_f32 |
| 644 | func @uitofp_i1_f32(%arg0 : i1) -> f32 { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 645 | // CHECK: %[[ZERO:.+]] = spv.Constant 0.000000e+00 : f32 |
| 646 | // CHECK: %[[ONE:.+]] = spv.Constant 1.000000e+00 : f32 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 647 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : i1, f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 648 | %0 = arith.uitofp %arg0 : i1 to f32 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 649 | return %0 : f32 |
| 650 | } |
| 651 | |
| 652 | // CHECK-LABEL: @uitofp_i1_f64 |
| 653 | func @uitofp_i1_f64(%arg0 : i1) -> f64 { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 654 | // CHECK: %[[ZERO:.+]] = spv.Constant 0.000000e+00 : f64 |
| 655 | // CHECK: %[[ONE:.+]] = spv.Constant 1.000000e+00 : f64 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 656 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : i1, f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 657 | %0 = arith.uitofp %arg0 : i1 to f64 |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 658 | return %0 : f64 |
| 659 | } |
| 660 | |
| 661 | // CHECK-LABEL: @uitofp_vec_i1_f32 |
| 662 | func @uitofp_vec_i1_f32(%arg0 : vector<4xi1>) -> vector<4xf32> { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 663 | // CHECK: %[[ZERO:.+]] = spv.Constant dense<0.000000e+00> : vector<4xf32> |
| 664 | // CHECK: %[[ONE:.+]] = spv.Constant dense<1.000000e+00> : vector<4xf32> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 665 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : vector<4xi1>, vector<4xf32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 666 | %0 = arith.uitofp %arg0 : vector<4xi1> to vector<4xf32> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 667 | return %0 : vector<4xf32> |
| 668 | } |
| 669 | |
| 670 | // CHECK-LABEL: @uitofp_vec_i1_f64 |
| 671 | spv.func @uitofp_vec_i1_f64(%arg0: vector<4xi1>) -> vector<4xf64> "None" { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 672 | // CHECK: %[[ZERO:.+]] = spv.Constant dense<0.000000e+00> : vector<4xf64> |
| 673 | // CHECK: %[[ONE:.+]] = spv.Constant dense<1.000000e+00> : vector<4xf64> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 674 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : vector<4xi1>, vector<4xf64> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 675 | %0 = spv.Constant dense<0.000000e+00> : vector<4xf64> |
| 676 | %1 = spv.Constant dense<1.000000e+00> : vector<4xf64> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 677 | %2 = spv.Select %arg0, %1, %0 : vector<4xi1>, vector<4xf64> |
| 678 | spv.ReturnValue %2 : vector<4xf64> |
| 679 | } |
| 680 | |
Benjamin Kramer | 530d6ea | 2021-02-12 14:04:12 | [diff] [blame] | 681 | // CHECK-LABEL: @sexti1 |
| 682 | func @sexti1(%arg0: i16) -> i64 { |
| 683 | // CHECK: spv.SConvert %{{.*}} : i16 to i64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 684 | %0 = arith.extsi %arg0 : i16 to i64 |
Benjamin Kramer | 530d6ea | 2021-02-12 14:04:12 | [diff] [blame] | 685 | return %0 : i64 |
| 686 | } |
| 687 | |
| 688 | // CHECK-LABEL: @sexti2 |
| 689 | func @sexti2(%arg0 : i32) -> i64 { |
| 690 | // CHECK: spv.SConvert %{{.*}} : i32 to i64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 691 | %0 = arith.extsi %arg0 : i32 to i64 |
Benjamin Kramer | 530d6ea | 2021-02-12 14:04:12 | [diff] [blame] | 692 | return %0 : i64 |
| 693 | } |
| 694 | |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 695 | // CHECK-LABEL: @zexti1 |
| 696 | func @zexti1(%arg0: i16) -> i64 { |
| 697 | // CHECK: spv.UConvert %{{.*}} : i16 to i64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 698 | %0 = arith.extui %arg0 : i16 to i64 |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 699 | return %0 : i64 |
| 700 | } |
| 701 | |
| 702 | // CHECK-LABEL: @zexti2 |
| 703 | func @zexti2(%arg0 : i32) -> i64 { |
| 704 | // CHECK: spv.UConvert %{{.*}} : i32 to i64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 705 | %0 = arith.extui %arg0 : i32 to i64 |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 706 | return %0 : i64 |
| 707 | } |
| 708 | |
Hanhan Wang | 0b025d2 | 2020-06-03 22:00:33 | [diff] [blame] | 709 | // CHECK-LABEL: @zexti3 |
| 710 | func @zexti3(%arg0 : i1) -> i32 { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 711 | // CHECK: %[[ZERO:.+]] = spv.Constant 0 : i32 |
| 712 | // CHECK: %[[ONE:.+]] = spv.Constant 1 : i32 |
Hanhan Wang | 0b025d2 | 2020-06-03 22:00:33 | [diff] [blame] | 713 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : i1, i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 714 | %0 = arith.extui %arg0 : i1 to i32 |
Hanhan Wang | 0b025d2 | 2020-06-03 22:00:33 | [diff] [blame] | 715 | return %0 : i32 |
| 716 | } |
| 717 | |
Hanhan Wang | 1909b6a | 2020-09-18 14:07:10 | [diff] [blame] | 718 | // CHECK-LABEL: @zexti4 |
| 719 | func @zexti4(%arg0 : vector<4xi1>) -> vector<4xi32> { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 720 | // CHECK: %[[ZERO:.+]] = spv.Constant dense<0> : vector<4xi32> |
| 721 | // CHECK: %[[ONE:.+]] = spv.Constant dense<1> : vector<4xi32> |
Hanhan Wang | 1909b6a | 2020-09-18 14:07:10 | [diff] [blame] | 722 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : vector<4xi1>, vector<4xi32> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 723 | %0 = arith.extui %arg0 : vector<4xi1> to vector<4xi32> |
Hanhan Wang | 1909b6a | 2020-09-18 14:07:10 | [diff] [blame] | 724 | return %0 : vector<4xi32> |
| 725 | } |
| 726 | |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 727 | // CHECK-LABEL: @zexti5 |
| 728 | func @zexti5(%arg0 : vector<4xi1>) -> vector<4xi64> { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 729 | // CHECK: %[[ZERO:.+]] = spv.Constant dense<0> : vector<4xi64> |
| 730 | // CHECK: %[[ONE:.+]] = spv.Constant dense<1> : vector<4xi64> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 731 | // CHECK: spv.Select %{{.*}}, %[[ONE]], %[[ZERO]] : vector<4xi1>, vector<4xi64> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 732 | %0 = arith.extui %arg0 : vector<4xi1> to vector<4xi64> |
Hanhan Wang | 2cb130f | 2021-01-22 06:20:18 | [diff] [blame] | 733 | return %0 : vector<4xi64> |
| 734 | } |
| 735 | |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 736 | // CHECK-LABEL: @trunci1 |
| 737 | func @trunci1(%arg0 : i64) -> i16 { |
| 738 | // CHECK: spv.SConvert %{{.*}} : i64 to i16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 739 | %0 = arith.trunci %arg0 : i64 to i16 |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 740 | return %0 : i16 |
| 741 | } |
| 742 | |
| 743 | // CHECK-LABEL: @trunci2 |
| 744 | func @trunci2(%arg0: i32) -> i16 { |
| 745 | // CHECK: spv.SConvert %{{.*}} : i32 to i16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 746 | %0 = arith.trunci %arg0 : i32 to i16 |
Hanhan Wang | be0ad5b | 2020-05-01 02:29:05 | [diff] [blame] | 747 | return %0 : i16 |
| 748 | } |
| 749 | |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 750 | // CHECK-LABEL: @trunc_to_i1 |
| 751 | func @trunc_to_i1(%arg0: i32) -> i1 { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 752 | // CHECK: %[[MASK:.*]] = spv.Constant 1 : i32 |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 753 | // CHECK: %[[MASKED_SRC:.*]] = spv.BitwiseAnd %{{.*}}, %[[MASK]] : i32 |
| 754 | // CHECK: %[[IS_ONE:.*]] = spv.IEqual %[[MASKED_SRC]], %[[MASK]] : i32 |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 755 | // CHECK-DAG: %[[TRUE:.*]] = spv.Constant true |
| 756 | // CHECK-DAG: %[[FALSE:.*]] = spv.Constant false |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 757 | // CHECK: spv.Select %[[IS_ONE]], %[[TRUE]], %[[FALSE]] : i1, i1 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 758 | %0 = arith.trunci %arg0 : i32 to i1 |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 759 | return %0 : i1 |
| 760 | } |
| 761 | |
| 762 | // CHECK-LABEL: @trunc_to_veci1 |
| 763 | func @trunc_to_veci1(%arg0: vector<4xi32>) -> vector<4xi1> { |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 764 | // CHECK: %[[MASK:.*]] = spv.Constant dense<1> : vector<4xi32> |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 765 | // CHECK: %[[MASKED_SRC:.*]] = spv.BitwiseAnd %{{.*}}, %[[MASK]] : vector<4xi32> |
| 766 | // CHECK: %[[IS_ONE:.*]] = spv.IEqual %[[MASKED_SRC]], %[[MASK]] : vector<4xi32> |
KareemErgawy-TomTom | 5abdca4 | 2021-03-04 21:15:46 | [diff] [blame] | 767 | // CHECK-DAG: %[[TRUE:.*]] = spv.Constant dense<true> : vector<4xi1> |
| 768 | // CHECK-DAG: %[[FALSE:.*]] = spv.Constant dense<false> : vector<4xi1> |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 769 | // CHECK: spv.Select %[[IS_ONE]], %[[TRUE]], %[[FALSE]] : vector<4xi1>, vector<4xi1> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 770 | %0 = arith.trunci %arg0 : vector<4xi32> to vector<4xi1> |
Hanhan Wang | c80484e | 2021-02-17 14:55:10 | [diff] [blame] | 771 | return %0 : vector<4xi1> |
| 772 | } |
| 773 | |
Hanhan Wang | ac691c4 | 2020-05-11 08:26:57 | [diff] [blame] | 774 | // CHECK-LABEL: @fptosi1 |
| 775 | func @fptosi1(%arg0 : f32) -> i32 { |
| 776 | // CHECK: spv.ConvertFToS %{{.*}} : f32 to i32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 777 | %0 = arith.fptosi %arg0 : f32 to i32 |
Hanhan Wang | ac691c4 | 2020-05-11 08:26:57 | [diff] [blame] | 778 | return %0 : i32 |
| 779 | } |
| 780 | |
| 781 | // CHECK-LABEL: @fptosi2 |
| 782 | func @fptosi2(%arg0 : f16) -> i16 { |
| 783 | // CHECK: spv.ConvertFToS %{{.*}} : f16 to i16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 784 | %0 = arith.fptosi %arg0 : f16 to i16 |
Hanhan Wang | ac691c4 | 2020-05-11 08:26:57 | [diff] [blame] | 785 | return %0 : i16 |
| 786 | } |
| 787 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 788 | } // end module |
| 789 | |
| 790 | // ----- |
| 791 | |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 792 | // Checks that cast types will be adjusted when missing special capabilities for |
| 793 | // certain non-32-bit scalar types. |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 794 | module attributes { |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 795 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [Float64], []>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 796 | } { |
| 797 | |
| 798 | // CHECK-LABEL: @fpext1 |
| 799 | // CHECK-SAME: %[[ARG:.*]]: f32 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 800 | func @fpext1(%arg0: f16) -> f64 { |
| 801 | // CHECK-NEXT: spv.FConvert %[[ARG]] : f32 to f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 802 | %0 = arith.extf %arg0 : f16 to f64 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 803 | return %0: f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 804 | } |
| 805 | |
| 806 | // CHECK-LABEL: @fpext2 |
| 807 | // CHECK-SAME: %[[ARG:.*]]: f32 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 808 | func @fpext2(%arg0 : f32) -> f64 { |
| 809 | // CHECK-NEXT: spv.FConvert %[[ARG]] : f32 to f64 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 810 | %0 = arith.extf %arg0 : f32 to f64 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 811 | return %0: f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 812 | } |
| 813 | |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 814 | } // end module |
| 815 | |
| 816 | // ----- |
| 817 | |
| 818 | // Checks that cast types will be adjusted when missing special capabilities for |
| 819 | // certain non-32-bit scalar types. |
| 820 | module attributes { |
| 821 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [Float16], []>, {}> |
| 822 | } { |
| 823 | |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 824 | // CHECK-LABEL: @fptrunc1 |
| 825 | // CHECK-SAME: %[[ARG:.*]]: f32 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 826 | func @fptrunc1(%arg0 : f64) -> f16 { |
| 827 | // CHECK-NEXT: spv.FConvert %[[ARG]] : f32 to f16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 828 | %0 = arith.truncf %arg0 : f64 to f16 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 829 | return %0: f16 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 830 | } |
| 831 | |
| 832 | // CHECK-LABEL: @fptrunc2 |
| 833 | // CHECK-SAME: %[[ARG:.*]]: f32 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 834 | func @fptrunc2(%arg0: f32) -> f16 { |
| 835 | // CHECK-NEXT: spv.FConvert %[[ARG]] : f32 to f16 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 836 | %0 = arith.truncf %arg0 : f32 to f16 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 837 | return %0: f16 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 838 | } |
| 839 | |
| 840 | // CHECK-LABEL: @sitofp |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 841 | func @sitofp(%arg0 : i64) -> f64 { |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 842 | // CHECK: spv.ConvertSToF %{{.*}} : i32 to f32 |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 843 | %0 = arith.sitofp %arg0 : i64 to f64 |
Lei Zhang | 7c3ae48 | 2021-01-09 13:04:49 | [diff] [blame] | 844 | return %0: f64 |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 845 | } |
| 846 | |
| 847 | } // end module |
| 848 | |
| 849 | // ----- |
| 850 | |
| 851 | module attributes { |
| 852 | spv.target_env = #spv.target_env< |
Lei Zhang | 8d420fb | 2020-09-03 17:29:14 | [diff] [blame] | 853 | #spv.vce<v1.0, [Shader, Int8, Int16, Int64, Float16, Float64], |
| 854 | [SPV_KHR_storage_buffer_storage_class]>, {}> |
Lei Zhang | ffd4583 | 2020-03-18 13:56:38 | [diff] [blame] | 855 | } { |
| 856 | |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 857 | // CHECK-LABEL: @select |
Lei Zhang | aaafeac | 2019-11-23 14:03:40 | [diff] [blame] | 858 | func @select(%arg0 : i32, %arg1 : i32) { |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 859 | %0 = arith.cmpi sle, %arg0, %arg1 : i32 |
Mahesh Ravishankar | 2be5360 | 2019-11-12 21:19:33 | [diff] [blame] | 860 | // CHECK: spv.Select |
| 861 | %1 = select %0, %arg0, %arg1 : i32 |
| 862 | return |
| 863 | } |
Denis Khalikov | eac01f6 | 2020-01-08 03:11:59 | [diff] [blame] | 864 | |
Hanhan Wang | 6601b65 | 2020-05-01 02:27:08 | [diff] [blame] | 865 | } // end module |
Lei Zhang | 42980a7 | 2020-12-23 18:21:57 | [diff] [blame] | 866 | |
| 867 | // ----- |
| 868 | |
| 869 | //===----------------------------------------------------------------------===// |
| 870 | // std.return |
| 871 | //===----------------------------------------------------------------------===// |
| 872 | |
| 873 | module attributes { |
| 874 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
| 875 | } { |
| 876 | |
| 877 | // CHECK-LABEL: spv.func @return_one_val |
| 878 | // CHECK-SAME: (%[[ARG:.+]]: f32) |
| 879 | func @return_one_val(%arg0: f32) -> f32 { |
| 880 | // CHECK: spv.ReturnValue %[[ARG]] : f32 |
| 881 | return %arg0: f32 |
| 882 | } |
| 883 | |
| 884 | // Check that multiple-return functions are not converted. |
| 885 | // CHECK-LABEL: func @return_multi_val |
| 886 | func @return_multi_val(%arg0: f32) -> (f32, f32) { |
| 887 | // CHECK: return |
| 888 | return %arg0, %arg0: f32, f32 |
| 889 | } |
| 890 | |
| 891 | } |
Lei Zhang | bb6f5c8 | 2021-03-06 13:03:27 | [diff] [blame] | 892 | |
| 893 | // ----- |
| 894 | |
| 895 | //===----------------------------------------------------------------------===// |
| 896 | // tensor.extract |
| 897 | //===----------------------------------------------------------------------===// |
| 898 | |
| 899 | // CHECK-LABEL: func @tensor_extract_constant |
| 900 | // CHECK-SAME: (%[[A:.+]]: i32, %[[B:.+]]: i32, %[[C:.+]]: i32) |
| 901 | func @tensor_extract_constant(%a : index, %b: index, %c: index) -> i32 { |
| 902 | // CHECK: %[[CST:.+]] = spv.Constant dense<[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]> |
Mogball | a54f4ea | 2021-10-12 23:14:57 | [diff] [blame] | 903 | %cst = arith.constant dense<[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]> : tensor<2x2x3xi32> |
Lei Zhang | bb6f5c8 | 2021-03-06 13:03:27 | [diff] [blame] | 904 | // CHECK: %[[VAR:.+]] = spv.Variable init(%[[CST]]) : !spv.ptr<!spv.array<12 x i32, stride=4>, Function> |
| 905 | // CHECK: %[[C0:.+]] = spv.Constant 0 : i32 |
| 906 | // CHECK: %[[C6:.+]] = spv.Constant 6 : i32 |
| 907 | // CHECK: %[[MUL0:.+]] = spv.IMul %[[C6]], %[[A]] : i32 |
| 908 | // CHECK: %[[ADD0:.+]] = spv.IAdd %[[C0]], %[[MUL0]] : i32 |
| 909 | // CHECK: %[[C3:.+]] = spv.Constant 3 : i32 |
| 910 | // CHECK: %[[MUL1:.+]] = spv.IMul %[[C3]], %[[B]] : i32 |
| 911 | // CHECK: %[[ADD1:.+]] = spv.IAdd %[[ADD0]], %[[MUL1]] : i32 |
| 912 | // CHECK: %[[C1:.+]] = spv.Constant 1 : i32 |
| 913 | // CHECK: %[[MUL2:.+]] = spv.IMul %[[C1]], %[[C]] : i32 |
| 914 | // CHECK: %[[ADD2:.+]] = spv.IAdd %[[ADD1]], %[[MUL2]] : i32 |
| 915 | // CHECK: %[[AC:.+]] = spv.AccessChain %[[VAR]][%[[ADD2]]] |
| 916 | // CHECK: %[[VAL:.+]] = spv.Load "Function" %[[AC]] : i32 |
| 917 | %extract = tensor.extract %cst[%a, %b, %c] : tensor<2x2x3xi32> |
| 918 | // CHECK: spv.ReturnValue %[[VAL]] |
| 919 | return %extract : i32 |
| 920 | } |
thomasraoux | d51275c | 2021-05-03 17:56:15 | [diff] [blame] | 921 | |
| 922 | // ----- |
| 923 | |
| 924 | //===----------------------------------------------------------------------===// |
| 925 | // splat |
| 926 | //===----------------------------------------------------------------------===// |
| 927 | |
| 928 | // CHECK-LABEL: func @splat |
| 929 | // CHECK-SAME: (%[[A:.+]]: f32) |
| 930 | // CHECK: %[[VAL:.+]] = spv.CompositeConstruct %[[A]], %[[A]], %[[A]], %[[A]] : vector<4xf32> |
| 931 | // CHECK: spv.ReturnValue %[[VAL]] |
| 932 | func @splat(%f : f32) -> vector<4xf32> { |
| 933 | %splat = splat %f : vector<4xf32> |
| 934 | return %splat : vector<4xf32> |
| 935 | } |
xndcn | 6e2c0e6 | 2021-10-29 14:45:18 | [diff] [blame] | 936 | |
| 937 | // ----- |
| 938 | |
| 939 | //===----------------------------------------------------------------------===// |
| 940 | // std.br, std.cond_br |
| 941 | //===----------------------------------------------------------------------===// |
| 942 | |
| 943 | module attributes { |
| 944 | spv.target_env = #spv.target_env<#spv.vce<v1.0, [], []>, {}> |
| 945 | } { |
| 946 | |
| 947 | // CHECK-LABEL: func @simple_loop |
| 948 | func @simple_loop(index, index, index) { |
| 949 | ^bb0(%begin : index, %end : index, %step : index): |
| 950 | // CHECK-NEXT: spv.Branch ^bb1 |
| 951 | br ^bb1 |
| 952 | |
| 953 | // CHECK-NEXT: ^bb1: // pred: ^bb0 |
| 954 | // CHECK-NEXT: spv.Branch ^bb2({{.*}} : i32) |
| 955 | ^bb1: // pred: ^bb0 |
| 956 | br ^bb2(%begin : index) |
| 957 | |
| 958 | // CHECK: ^bb2({{.*}}: i32): // 2 preds: ^bb1, ^bb3 |
| 959 | // CHECK-NEXT: {{.*}} = spv.SLessThan {{.*}}, {{.*}} : i32 |
| 960 | // CHECK-NEXT: spv.BranchConditional {{.*}}, ^bb3, ^bb4 |
| 961 | ^bb2(%0: index): // 2 preds: ^bb1, ^bb3 |
| 962 | %1 = arith.cmpi slt, %0, %end : index |
| 963 | cond_br %1, ^bb3, ^bb4 |
| 964 | |
| 965 | // CHECK: ^bb3: // pred: ^bb2 |
| 966 | // CHECK-NEXT: {{.*}} = spv.IAdd {{.*}}, {{.*}} : i32 |
| 967 | // CHECK-NEXT: spv.Branch ^bb2({{.*}} : i32) |
| 968 | ^bb3: // pred: ^bb2 |
| 969 | %2 = arith.addi %0, %step : index |
| 970 | br ^bb2(%2 : index) |
| 971 | |
| 972 | // CHECK: ^bb4: // pred: ^bb2 |
| 973 | ^bb4: // pred: ^bb2 |
| 974 | return |
| 975 | } |
| 976 | |
| 977 | } |