|
2 | 2 |
|
3 | 3 | // CHECK-LABEL: func.func @single_expression(
|
4 | 4 | // CHECK-SAME: %[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32, %[[VAL_2:.*]]: i32, %[[VAL_3:.*]]: i32) -> i1 {
|
5 |
| -// CHECK: %[[VAL_4:.*]] = "emitc.constant"() <{value = 42 : i32}> : () -> i32 |
6 |
| -// CHECK: %[[VAL_5:.*]] = emitc.expression %[[VAL_3]], %[[VAL_2]], %[[VAL_0]], %[[VAL_4]] : (i32, i32, i32, i32) -> i1 { |
| 5 | +// CHECK: %[[VAL_5:.*]] = emitc.expression %[[VAL_3]], %[[VAL_2]], %[[VAL_0]] : (i32, i32, i32) -> i1 { |
| 6 | +// CHECK: %[[VAL_4:.*]] = "emitc.constant"() <{value = 42 : i32}> : () -> i32 |
7 | 7 | // CHECK: %[[VAL_6:.*]] = mul %[[VAL_0]], %[[VAL_4]] : (i32, i32) -> i32
|
8 | 8 | // CHECK: %[[VAL_7:.*]] = sub %[[VAL_6]], %[[VAL_2]] : (i32, i32) -> i32
|
9 | 9 | // CHECK: %[[VAL_8:.*]] = cmp lt, %[[VAL_7]], %[[VAL_3]] : (i32, i32) -> i1
|
@@ -131,7 +131,10 @@ func.func @single_result_requirement() -> (i32, i32) {
|
131 | 131 | // CHECK-LABEL: func.func @expression_with_load(
|
132 | 132 | // CHECK-SAME: %[[VAL_0:.*]]: i32,
|
133 | 133 | // CHECK-SAME: %[[VAL_1:.*]]: !emitc.ptr<i32>) -> i1 {
|
134 |
| -// CHECK: %[[VAL_2:.*]] = "emitc.constant"() <{value = 0 : i64}> : () -> i64 |
| 134 | +// CHECK: %[[VAL_2:.*]] = emitc.expression : () -> i64 { |
| 135 | +// CHECK: %[[VAL_C:.*]] = "emitc.constant"() <{value = 0 : i64}> : () -> i64 |
| 136 | +// CHECK: yield %[[VAL_C]] : i64 |
| 137 | +// CHECK: } |
135 | 138 | // CHECK: %[[VAL_3:.*]] = "emitc.variable"() <{value = #emitc.opaque<"42">}> : () -> !emitc.lvalue<i32>
|
136 | 139 | // CHECK: %[[VAL_4:.*]] = emitc.expression %[[VAL_3]] : (!emitc.lvalue<i32>) -> i32 {
|
137 | 140 | // CHECK: %[[VAL_5:.*]] = load %[[VAL_3]] : <i32>
|
@@ -162,24 +165,46 @@ func.func @expression_with_load(%arg0: i32, %arg1: !emitc.ptr<i32>) -> i1 {
|
162 | 165 | }
|
163 | 166 |
|
164 | 167 | // CHECK-LABEL: func.func @opaque_type_expression(%arg0: i32, %arg1: !emitc.opaque<"T0">, %arg2: i32) -> i1 {
|
165 |
| -// CHECK: %0 = "emitc.constant"() <{value = 42 : i32}> : () -> i32 |
166 |
| -// CHECK: %1 = emitc.expression %arg1, %arg0, %0 : (!emitc.opaque<"T0">, i32, i32) -> i32 { |
167 |
| -// CHECK: %3 = mul %arg0, %0 : (i32, i32) -> i32 |
168 |
| -// CHECK: %4 = sub %3, %arg1 : (i32, !emitc.opaque<"T0">) -> i32 |
| 168 | +// CHECK: %0 = emitc.expression : () -> !emitc.opaque<"T1"> { |
| 169 | +// CHECK: %4 = "emitc.constant"() <{value = #emitc.opaque<"V">}> : () -> !emitc.opaque<"T1"> |
| 170 | +// CHECK: yield %4 : !emitc.opaque<"T1"> |
| 171 | +// CHECK: } |
| 172 | +// CHECK: %1 = emitc.expression %arg0, %0 : (i32, !emitc.opaque<"T1">) -> i32 { |
| 173 | +// CHECK: %4 = mul %arg0, %0 : (i32, !emitc.opaque<"T1">) -> i32 |
| 174 | +// CHECK: yield %4 : i32 |
| 175 | +// CHECK: } |
| 176 | +// CHECK: %2 = emitc.expression %1, %arg1 : (i32, !emitc.opaque<"T0">) -> i32 { |
| 177 | +// CHECK: %4 = sub %1, %arg1 : (i32, !emitc.opaque<"T0">) -> i32 |
169 | 178 | // CHECK: yield %4 : i32
|
170 | 179 | // CHECK: }
|
171 |
| -// CHECK: %2 = emitc.expression %1, %arg2 : (i32, i32) -> i1 { |
172 |
| -// CHECK: %3 = cmp lt, %1, %arg2 : (i32, i32) -> i1 |
173 |
| -// CHECK: yield %3 : i1 |
| 180 | +// CHECK: %3 = emitc.expression %2, %arg2 : (i32, i32) -> i1 { |
| 181 | +// CHECK: %4 = cmp lt, %2, %arg2 : (i32, i32) -> i1 |
| 182 | +// CHECK: yield %4 : i1 |
174 | 183 | // CHECK: }
|
175 |
| -// CHECK: return %2 : i1 |
| 184 | +// CHECK: return %3 : i1 |
176 | 185 | // CHECK: }
|
177 | 186 |
|
178 | 187 |
|
179 | 188 | func.func @opaque_type_expression(%arg0: i32, %arg1: !emitc.opaque<"T0">, %arg2: i32) -> i1 {
|
180 |
| - %c42 = "emitc.constant"(){value = 42 : i32} : () -> i32 |
181 |
| - %a = emitc.mul %arg0, %c42 : (i32, i32) -> i32 |
| 189 | + %c42 = "emitc.constant"(){value = #emitc.opaque<"V">} : () -> !emitc.opaque<"T1"> |
| 190 | + %a = emitc.mul %arg0, %c42 : (i32, !emitc.opaque<"T1">) -> i32 |
182 | 191 | %b = emitc.sub %a, %arg1 : (i32, !emitc.opaque<"T0">) -> i32
|
183 | 192 | %c = emitc.cmp lt, %b, %arg2 :(i32, i32) -> i1
|
184 | 193 | return %c : i1
|
185 | 194 | }
|
| 195 | + |
| 196 | +// CHECK-LABEL: func.func @expression_with_constant( |
| 197 | +// CHECK-SAME: %[[VAL_0:.*]]: i32) -> i32 { |
| 198 | +// CHECK: %[[VAL_1:.*]] = emitc.expression %[[VAL_0]] : (i32) -> i32 { |
| 199 | +// CHECK: %[[VAL_2:.*]] = "emitc.constant"() <{value = 42 : i32}> : () -> i32 |
| 200 | +// CHECK: %[[VAL_3:.*]] = mul %[[VAL_0]], %[[VAL_2]] : (i32, i32) -> i32 |
| 201 | +// CHECK: yield %[[VAL_3]] : i32 |
| 202 | +// CHECK: } |
| 203 | +// CHECK: return %[[VAL_1]] : i32 |
| 204 | +// CHECK: } |
| 205 | + |
| 206 | +func.func @expression_with_constant(%arg0: i32) -> i32 { |
| 207 | + %c42 = "emitc.constant"(){value = 42 : i32} : () -> i32 |
| 208 | + %a = emitc.mul %arg0, %c42 : (i32, i32) -> i32 |
| 209 | + return %a : i32 |
| 210 | +} |
0 commit comments