blob: 981757aed9b1d655c68d98c02b81bcbd2a2077a3 [file] [log] [blame]
Mehdi Aminibab5bcf2020-03-29 22:35:381// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -test-constant-fold | FileCheck %s
Geoffrey Martin-Noblec4891372019-05-06 21:43:452
3// -----
Chris Lattner82eb2842018-09-20 04:35:114
Geoffrey Martin-Noblef39a5992019-09-12 22:29:595// CHECK-LABEL: @affine_for
6// CHECK-SAME: [[ARG:%[a-zA-Z0-9]+]]
River Riddlecda6aa72022-04-20 23:22:217func.func @affine_for(%p : memref<f32>) {
Mogballa54f4ea2021-10-12 23:14:578 // CHECK: [[C:%.+]] = arith.constant 6.{{0*}}e+00 : f32
River Riddle89bc4492019-07-09 17:40:299 affine.for %arg1 = 0 to 128 {
10 affine.for %arg2 = 0 to 8 { // CHECK: affine.for %{{.*}} = 0 to 8 {
Mogballa54f4ea2021-10-12 23:14:5711 %0 = arith.constant 4.5 : f32
12 %1 = arith.constant 1.5 : f32
Chris Lattner82eb2842018-09-20 04:35:1113
Mogballa54f4ea2021-10-12 23:14:5714 %2 = arith.addf %0, %1 : f32
Chris Lattner82eb2842018-09-20 04:35:1115
Julian Grosse2310702021-02-10 12:53:1116 // CHECK-NEXT: memref.store [[C]], [[ARG]][]
17 memref.store %2, %p[] : memref<f32>
Chris Lattner82eb2842018-09-20 04:35:1118 }
19 }
20 return
21}
22
Geoffrey Martin-Noblec4891372019-05-06 21:43:4523// -----
24
Chris Lattnerbbf362b2019-01-02 18:20:0025// CHECK-LABEL: func @simple_addf
River Riddlecda6aa72022-04-20 23:22:2126func.func @simple_addf() -> f32 {
Mogballa54f4ea2021-10-12 23:14:5727 %0 = arith.constant 4.5 : f32
28 %1 = arith.constant 1.5 : f32
Chris Lattner82eb2842018-09-20 04:35:1129
Mogballa54f4ea2021-10-12 23:14:5730 // CHECK-NEXT: [[C:%.+]] = arith.constant 6.{{0*}}e+00 : f32
31 %2 = arith.addf %0, %1 : f32
Chris Lattner82eb2842018-09-20 04:35:1132
Geoffrey Martin-Noblef39a5992019-09-12 22:29:5933 // CHECK-NEXT: return [[C]]
Chris Lattner82eb2842018-09-20 04:35:1134 return %2 : f32
MLIR Team99188b92018-09-24 17:23:0235}
36
Geoffrey Martin-Noblec4891372019-05-06 21:43:4537// -----
38
Lei Zhang311af4a2019-01-11 17:12:1139// CHECK-LABEL: func @addf_splat_tensor
River Riddlecda6aa72022-04-20 23:22:2140func.func @addf_splat_tensor() -> tensor<4xf32> {
Mogballa54f4ea2021-10-12 23:14:5741 %0 = arith.constant dense<4.5> : tensor<4xf32>
42 %1 = arith.constant dense<1.5> : tensor<4xf32>
Lei Zhang311af4a2019-01-11 17:12:1143
Mogballa54f4ea2021-10-12 23:14:5744 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<6.{{0*}}e+00> : tensor<4xf32>
45 %2 = arith.addf %0, %1 : tensor<4xf32>
Lei Zhang311af4a2019-01-11 17:12:1146
Geoffrey Martin-Noblef39a5992019-09-12 22:29:5947 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:1148 return %2 : tensor<4xf32>
49}
50
Geoffrey Martin-Noblec4891372019-05-06 21:43:4551// -----
52
Ben Vanikd2284f12019-11-25 02:50:5453// CHECK-LABEL: func @addf_dense_tensor
River Riddlecda6aa72022-04-20 23:22:2154func.func @addf_dense_tensor() -> tensor<4xf32> {
Mogballa54f4ea2021-10-12 23:14:5755 %0 = arith.constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>
56 %1 = arith.constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>
Ben Vanikd2284f12019-11-25 02:50:5457
Mogballa54f4ea2021-10-12 23:14:5758 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<[3.{{0*}}e+00, 5.{{0*}}e+00, 7.{{0*}}e+00, 9.{{0*}}e+00]> : tensor<4xf32>
59 %2 = arith.addf %0, %1 : tensor<4xf32>
Ben Vanikd2284f12019-11-25 02:50:5460
61 // CHECK-NEXT: return [[C]]
62 return %2 : tensor<4xf32>
63}
64
65// -----
66
67// CHECK-LABEL: func @addf_dense_and_splat_tensors
River Riddlecda6aa72022-04-20 23:22:2168func.func @addf_dense_and_splat_tensors() -> tensor<4xf32> {
Mogballa54f4ea2021-10-12 23:14:5769 %0 = arith.constant dense<[1.5, 2.5, 3.5, 4.5]> : tensor<4xf32>
70 %1 = arith.constant dense<1.5> : tensor<4xf32>
Ben Vanikd2284f12019-11-25 02:50:5471
Mogballa54f4ea2021-10-12 23:14:5772 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<[3.{{0*}}e+00, 4.{{0*}}e+00, 5.{{0*}}e+00, 6.{{0*}}e+00]> : tensor<4xf32>
73 %2 = arith.addf %0, %1 : tensor<4xf32>
Ben Vanikd2284f12019-11-25 02:50:5474
75 // CHECK-NEXT: return [[C]]
76 return %2 : tensor<4xf32>
77}
78
79// -----
80
Chris Lattnerbbf362b2019-01-02 18:20:0081// CHECK-LABEL: func @simple_addi
River Riddlecda6aa72022-04-20 23:22:2182func.func @simple_addi() -> i32 {
Mogballa54f4ea2021-10-12 23:14:5783 %0 = arith.constant 1 : i32
84 %1 = arith.constant 5 : i32
Feng Liu7d016fd2018-10-03 16:43:1385
Mogballa54f4ea2021-10-12 23:14:5786 // CHECK-NEXT: [[C:%.+]] = arith.constant 6 : i32
87 %2 = arith.addi %0, %1 : i32
Feng Liu7d016fd2018-10-03 16:43:1388
Geoffrey Martin-Noblef39a5992019-09-12 22:29:5989 // CHECK-NEXT: return [[C]]
Feng Liu7d016fd2018-10-03 16:43:1390 return %2 : i32
91}
92
Geoffrey Martin-Noblec4891372019-05-06 21:43:4593// -----
94
MaheshRavishankar462e3cc2020-06-16 05:28:4395// CHECK: func @simple_and
96// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: i1
97// CHECK-SAME: [[ARG1:%[a-zA-Z0-9]+]]: i32)
River Riddlecda6aa72022-04-20 23:22:2198func.func @simple_and(%arg0 : i1, %arg1 : i32) -> (i1, i32) {
Mogballa54f4ea2021-10-12 23:14:5799 %c1 = arith.constant 1 : i1
100 %cAllOnes_32 = arith.constant 4294967295 : i32
MaheshRavishankar462e3cc2020-06-16 05:28:43101
Mogballa54f4ea2021-10-12 23:14:57102 // CHECK: [[C31:%.*]] = arith.constant 31 : i32
103 %c31 = arith.constant 31 : i32
104 %1 = arith.andi %arg0, %c1 : i1
105 %2 = arith.andi %arg1, %cAllOnes_32 : i32
MaheshRavishankar462e3cc2020-06-16 05:28:43106
Mogballa54f4ea2021-10-12 23:14:57107 // CHECK: [[VAL:%.*]] = arith.andi [[ARG1]], [[C31]]
108 %3 = arith.andi %2, %c31 : i32
MaheshRavishankar462e3cc2020-06-16 05:28:43109
110 // CHECK: return [[ARG0]], [[VAL]]
111 return %1, %3 : i1, i32
112}
113
114// -----
115
116// CHECK-LABEL: func @and_index
117// CHECK-SAME: [[ARG:%[a-zA-Z0-9]+]]
River Riddlecda6aa72022-04-20 23:22:21118func.func @and_index(%arg0 : index) -> (index) {
Mogballa54f4ea2021-10-12 23:14:57119 // CHECK: [[C31:%.*]] = arith.constant 31 : index
120 %c31 = arith.constant 31 : index
121 %c_AllOnes = arith.constant -1 : index
122 %1 = arith.andi %arg0, %c31 : index
MaheshRavishankar462e3cc2020-06-16 05:28:43123
Mogballa54f4ea2021-10-12 23:14:57124 // CHECK: arith.andi [[ARG]], [[C31]]
125 %2 = arith.andi %1, %c_AllOnes : index
MaheshRavishankar462e3cc2020-06-16 05:28:43126 return %2 : index
127}
128
129// -----
130
131// CHECK: func @tensor_and
132// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: tensor<2xi32>
River Riddlecda6aa72022-04-20 23:22:21133func.func @tensor_and(%arg0 : tensor<2xi32>) -> tensor<2xi32> {
Mogballa54f4ea2021-10-12 23:14:57134 %cAllOnes_32 = arith.constant dense<4294967295> : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43135
Mogballa54f4ea2021-10-12 23:14:57136 // CHECK: [[C31:%.*]] = arith.constant dense<31> : tensor<2xi32>
137 %c31 = arith.constant dense<31> : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43138
Mogballa54f4ea2021-10-12 23:14:57139 // CHECK: [[CMIXED:%.*]] = arith.constant dense<[31, -1]> : tensor<2xi32>
140 %c_mixed = arith.constant dense<[31, 4294967295]> : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43141
Mogballa54f4ea2021-10-12 23:14:57142 %0 = arith.andi %arg0, %cAllOnes_32 : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43143
Mogballa54f4ea2021-10-12 23:14:57144 // CHECK: [[T1:%.*]] = arith.andi [[ARG0]], [[C31]]
145 %1 = arith.andi %0, %c31 : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43146
Mogballa54f4ea2021-10-12 23:14:57147 // CHECK: [[T2:%.*]] = arith.andi [[T1]], [[CMIXED]]
148 %2 = arith.andi %1, %c_mixed : tensor<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43149
150 // CHECK: return [[T2]]
151 return %2 : tensor<2xi32>
152}
153
154// -----
155
156// CHECK: func @vector_and
157// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]: vector<2xi32>
River Riddlecda6aa72022-04-20 23:22:21158func.func @vector_and(%arg0 : vector<2xi32>) -> vector<2xi32> {
Mogballa54f4ea2021-10-12 23:14:57159 %cAllOnes_32 = arith.constant dense<4294967295> : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43160
Mogballa54f4ea2021-10-12 23:14:57161 // CHECK: [[C31:%.*]] = arith.constant dense<31> : vector<2xi32>
162 %c31 = arith.constant dense<31> : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43163
Mogballa54f4ea2021-10-12 23:14:57164 // CHECK: [[CMIXED:%.*]] = arith.constant dense<[31, -1]> : vector<2xi32>
165 %c_mixed = arith.constant dense<[31, 4294967295]> : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43166
Mogballa54f4ea2021-10-12 23:14:57167 %0 = arith.andi %arg0, %cAllOnes_32 : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43168
Mogballa54f4ea2021-10-12 23:14:57169 // CHECK: [[T1:%.*]] = arith.andi [[ARG0]], [[C31]]
170 %1 = arith.andi %0, %c31 : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43171
Mogballa54f4ea2021-10-12 23:14:57172 // CHECK: [[T2:%.*]] = arith.andi [[T1]], [[CMIXED]]
173 %2 = arith.andi %1, %c_mixed : vector<2xi32>
MaheshRavishankar462e3cc2020-06-16 05:28:43174
175 // CHECK: return [[T2]]
176 return %2 : vector<2xi32>
177}
178
179// -----
180
Lei Zhang311af4a2019-01-11 17:12:11181// CHECK-LABEL: func @addi_splat_vector
River Riddlecda6aa72022-04-20 23:22:21182func.func @addi_splat_vector() -> vector<8xi32> {
Mogballa54f4ea2021-10-12 23:14:57183 %0 = arith.constant dense<1> : vector<8xi32>
184 %1 = arith.constant dense<5> : vector<8xi32>
Lei Zhang311af4a2019-01-11 17:12:11185
Mogballa54f4ea2021-10-12 23:14:57186 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<6> : vector<8xi32>
187 %2 = arith.addi %0, %1 : vector<8xi32>
Lei Zhang311af4a2019-01-11 17:12:11188
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59189 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:11190 return %2 : vector<8xi32>
191}
192
Geoffrey Martin-Noblec4891372019-05-06 21:43:45193// -----
194
Chris Lattnerbbf362b2019-01-02 18:20:00195// CHECK-LABEL: func @simple_subf
River Riddlecda6aa72022-04-20 23:22:21196func.func @simple_subf() -> f32 {
Mogballa54f4ea2021-10-12 23:14:57197 %0 = arith.constant 4.5 : f32
198 %1 = arith.constant 1.5 : f32
Feng Liu7d016fd2018-10-03 16:43:13199
Mogballa54f4ea2021-10-12 23:14:57200 // CHECK-NEXT: [[C:%.+]] = arith.constant 3.{{0*}}e+00 : f32
201 %2 = arith.subf %0, %1 : f32
Feng Liu7d016fd2018-10-03 16:43:13202
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59203 // CHECK-NEXT: return [[C]]
Feng Liu7d016fd2018-10-03 16:43:13204 return %2 : f32
205}
206
Geoffrey Martin-Noblec4891372019-05-06 21:43:45207// -----
208
Lei Zhang311af4a2019-01-11 17:12:11209// CHECK-LABEL: func @subf_splat_vector
River Riddlecda6aa72022-04-20 23:22:21210func.func @subf_splat_vector() -> vector<4xf32> {
Mogballa54f4ea2021-10-12 23:14:57211 %0 = arith.constant dense<4.5> : vector<4xf32>
212 %1 = arith.constant dense<1.5> : vector<4xf32>
Lei Zhang311af4a2019-01-11 17:12:11213
Mogballa54f4ea2021-10-12 23:14:57214 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<3.{{0*}}e+00> : vector<4xf32>
215 %2 = arith.subf %0, %1 : vector<4xf32>
Lei Zhang311af4a2019-01-11 17:12:11216
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59217 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:11218 return %2 : vector<4xf32>
219}
220
Geoffrey Martin-Noblec4891372019-05-06 21:43:45221// -----
222
MaheshRavishankar462e3cc2020-06-16 05:28:43223// CHECK: func @simple_subi
224// CHECK-SAME: [[ARG0:%[a-zA-Z0-9]+]]
River Riddlecda6aa72022-04-20 23:22:21225func.func @simple_subi(%arg0 : i32) -> (i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57226 %0 = arith.constant 4 : i32
227 %1 = arith.constant 1 : i32
228 %2 = arith.constant 0 : i32
Feng Liu7d016fd2018-10-03 16:43:13229
Mogballa54f4ea2021-10-12 23:14:57230 // CHECK-NEXT:[[C3:%.+]] = arith.constant 3 : i32
231 %3 = arith.subi %0, %1 : i32
232 %4 = arith.subi %arg0, %2 : i32
Feng Liu7d016fd2018-10-03 16:43:13233
MaheshRavishankar462e3cc2020-06-16 05:28:43234 // CHECK-NEXT: return [[C3]], [[ARG0]]
235 return %3, %4 : i32, i32
Feng Liu7d016fd2018-10-03 16:43:13236}
237
Geoffrey Martin-Noblec4891372019-05-06 21:43:45238// -----
239
Lei Zhang311af4a2019-01-11 17:12:11240// CHECK-LABEL: func @subi_splat_tensor
River Riddlecda6aa72022-04-20 23:22:21241func.func @subi_splat_tensor() -> tensor<4xi32> {
Mogballa54f4ea2021-10-12 23:14:57242 %0 = arith.constant dense<4> : tensor<4xi32>
243 %1 = arith.constant dense<1> : tensor<4xi32>
Lei Zhang311af4a2019-01-11 17:12:11244
Mogballa54f4ea2021-10-12 23:14:57245 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<3> : tensor<4xi32>
246 %2 = arith.subi %0, %1 : tensor<4xi32>
Lei Zhang311af4a2019-01-11 17:12:11247
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59248 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:11249 return %2 : tensor<4xi32>
250}
251
Geoffrey Martin-Noblec4891372019-05-06 21:43:45252// -----
253
Chris Lattnerbbf362b2019-01-02 18:20:00254// CHECK-LABEL: func @affine_apply
River Riddlecda6aa72022-04-20 23:22:21255func.func @affine_apply(%variable : index) -> (index, index, index) {
Mogballa54f4ea2021-10-12 23:14:57256 %c177 = arith.constant 177 : index
257 %c211 = arith.constant 211 : index
258 %N = arith.constant 1075 : index
MLIR Team99188b92018-09-24 17:23:02259
Mogballa54f4ea2021-10-12 23:14:57260 // CHECK:[[C1159:%.+]] = arith.constant 1159 : index
261 // CHECK:[[C1152:%.+]] = arith.constant 1152 : index
River Riddle4268e4f2020-01-13 21:12:37262 %x0 = affine.apply affine_map<(d0, d1)[S0] -> ( (d0 + 128 * S0) floordiv 128 + d1 mod 128)>
Chris Lattner607d1c22019-01-26 00:36:15263 (%c177, %c211)[%N]
River Riddle4268e4f2020-01-13 21:12:37264 %x1 = affine.apply affine_map<(d0, d1)[S0] -> (128 * (S0 ceildiv 128))>
Chris Lattner6822c4e2018-10-05 16:28:49265 (%c177, %c211)[%N]
MLIR Team99188b92018-09-24 17:23:02266
Mogballa54f4ea2021-10-12 23:14:57267 // CHECK:[[C42:%.+]] = arith.constant 42 : index
River Riddle4268e4f2020-01-13 21:12:37268 %y = affine.apply affine_map<(d0) -> (42)> (%variable)
Chris Lattner6822c4e2018-10-05 16:28:49269
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59270 // CHECK: return [[C1159]], [[C1152]], [[C42]]
Chris Lattner607d1c22019-01-26 00:36:15271 return %x0, %x1, %y : index, index, index
MLIR Team99188b92018-09-24 17:23:02272}
Feng Liu7d016fd2018-10-03 16:43:13273
Geoffrey Martin-Noblec4891372019-05-06 21:43:45274// -----
275
Chris Lattnerbbf362b2019-01-02 18:20:00276// CHECK-LABEL: func @simple_mulf
River Riddlecda6aa72022-04-20 23:22:21277func.func @simple_mulf() -> f32 {
Mogballa54f4ea2021-10-12 23:14:57278 %0 = arith.constant 4.5 : f32
279 %1 = arith.constant 1.5 : f32
Feng Liu7d016fd2018-10-03 16:43:13280
Mogballa54f4ea2021-10-12 23:14:57281 // CHECK-NEXT: [[C:%.+]] = arith.constant 6.75{{0*}}e+00 : f32
282 %2 = arith.mulf %0, %1 : f32
Feng Liu7d016fd2018-10-03 16:43:13283
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59284 // CHECK-NEXT: return [[C]]
Feng Liu7d016fd2018-10-03 16:43:13285 return %2 : f32
286}
287
Geoffrey Martin-Noblec4891372019-05-06 21:43:45288// -----
289
Lei Zhang311af4a2019-01-11 17:12:11290// CHECK-LABEL: func @mulf_splat_tensor
River Riddlecda6aa72022-04-20 23:22:21291func.func @mulf_splat_tensor() -> tensor<4xf32> {
Mogballa54f4ea2021-10-12 23:14:57292 %0 = arith.constant dense<4.5> : tensor<4xf32>
293 %1 = arith.constant dense<1.5> : tensor<4xf32>
Lei Zhang311af4a2019-01-11 17:12:11294
Mogballa54f4ea2021-10-12 23:14:57295 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<6.75{{0*}}e+00> : tensor<4xf32>
296 %2 = arith.mulf %0, %1 : tensor<4xf32>
Lei Zhang311af4a2019-01-11 17:12:11297
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59298 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:11299 return %2 : tensor<4xf32>
300}
301
Geoffrey Martin-Noblec4891372019-05-06 21:43:45302// -----
303
Manuel Freiberger22954a02019-12-22 18:01:35304// CHECK-LABEL: func @simple_divi_signed
River Riddlecda6aa72022-04-20 23:22:21305func.func @simple_divi_signed() -> (i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57306 // CHECK-DAG: [[C0:%.+]] = arith.constant 0
307 %z = arith.constant 0 : i32
308 // CHECK-DAG: [[C6:%.+]] = arith.constant 6
309 %0 = arith.constant 6 : i32
310 %1 = arith.constant 2 : i32
Alex Zinenkobc045562019-01-06 22:08:42311
Mogballa54f4ea2021-10-12 23:14:57312 // CHECK-NEXT: [[C3:%.+]] = arith.constant 3 : i32
313 %2 = arith.divsi %0, %1 : i32
Alex Zinenkobc045562019-01-06 22:08:42314
Mogballa54f4ea2021-10-12 23:14:57315 %3 = arith.constant -2 : i32
Alex Zinenkobc045562019-01-06 22:08:42316
Mogballa54f4ea2021-10-12 23:14:57317 // CHECK-NEXT: [[CM3:%.+]] = arith.constant -3 : i32
318 %4 = arith.divsi %0, %3 : i32
Alex Zinenkobc045562019-01-06 22:08:42319
Mogballa54f4ea2021-10-12 23:14:57320 // CHECK-NEXT: [[XZ:%.+]] = arith.divsi [[C6]], [[C0]]
321 %5 = arith.divsi %0, %z : i32
Ben Vanik38d78702019-11-25 22:31:12322
323 // CHECK-NEXT: return [[C3]], [[CM3]], [[XZ]]
324 return %2, %4, %5 : i32, i32, i32
325}
326
327// -----
328
Manuel Freiberger22954a02019-12-22 18:01:35329// CHECK-LABEL: func @divi_signed_splat_tensor
River Riddlecda6aa72022-04-20 23:22:21330func.func @divi_signed_splat_tensor() -> (tensor<4xi32>, tensor<4xi32>, tensor<4xi32>) {
Mogballa54f4ea2021-10-12 23:14:57331 // CHECK-DAG: [[C0:%.+]] = arith.constant dense<0>
332 %z = arith.constant dense<0> : tensor<4xi32>
333 // CHECK-DAG: [[C6:%.+]] = arith.constant dense<6>
334 %0 = arith.constant dense<6> : tensor<4xi32>
335 %1 = arith.constant dense<2> : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12336
Mogballa54f4ea2021-10-12 23:14:57337 // CHECK-NEXT: [[C3:%.+]] = arith.constant dense<3> : tensor<4xi32>
338 %2 = arith.divsi %0, %1 : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12339
Mogballa54f4ea2021-10-12 23:14:57340 %3 = arith.constant dense<-2> : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12341
Mogballa54f4ea2021-10-12 23:14:57342 // CHECK-NEXT: [[CM3:%.+]] = arith.constant dense<-3> : tensor<4xi32>
343 %4 = arith.divsi %0, %3 : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12344
Mogballa54f4ea2021-10-12 23:14:57345 // CHECK-NEXT: [[XZ:%.+]] = arith.divsi [[C6]], [[C0]]
346 %5 = arith.divsi %0, %z : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12347
348 // CHECK-NEXT: return [[C3]], [[CM3]], [[XZ]]
349 return %2, %4, %5 : tensor<4xi32>, tensor<4xi32>, tensor<4xi32>
Alex Zinenkobc045562019-01-06 22:08:42350}
351
Geoffrey Martin-Noblec4891372019-05-06 21:43:45352// -----
353
Manuel Freiberger22954a02019-12-22 18:01:35354// CHECK-LABEL: func @simple_divi_unsigned
River Riddlecda6aa72022-04-20 23:22:21355func.func @simple_divi_unsigned() -> (i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57356 %z = arith.constant 0 : i32
357 // CHECK-DAG: [[C6:%.+]] = arith.constant 6
358 %0 = arith.constant 6 : i32
359 %1 = arith.constant 2 : i32
Alex Zinenkobc045562019-01-06 22:08:42360
Mogballa54f4ea2021-10-12 23:14:57361 // CHECK-DAG: [[C3:%.+]] = arith.constant 3 : i32
362 %2 = arith.divui %0, %1 : i32
Alex Zinenkobc045562019-01-06 22:08:42363
Mogballa54f4ea2021-10-12 23:14:57364 %3 = arith.constant -2 : i32
Alex Zinenkobc045562019-01-06 22:08:42365
366 // Unsigned division interprets -2 as 2^32-2, so the result is 0.
Mogballa54f4ea2021-10-12 23:14:57367 // CHECK-DAG: [[C0:%.+]] = arith.constant 0 : i32
368 %4 = arith.divui %0, %3 : i32
Alex Zinenkobc045562019-01-06 22:08:42369
Mogballa54f4ea2021-10-12 23:14:57370 // CHECK-NEXT: [[XZ:%.+]] = arith.divui [[C6]], [[C0]]
371 %5 = arith.divui %0, %z : i32
Ben Vanik38d78702019-11-25 22:31:12372
373 // CHECK-NEXT: return [[C3]], [[C0]], [[XZ]]
374 return %2, %4, %5 : i32, i32, i32
375}
376
377
378// -----
379
Manuel Freiberger22954a02019-12-22 18:01:35380// CHECK-LABEL: func @divi_unsigned_splat_tensor
River Riddlecda6aa72022-04-20 23:22:21381func.func @divi_unsigned_splat_tensor() -> (tensor<4xi32>, tensor<4xi32>, tensor<4xi32>) {
Mogballa54f4ea2021-10-12 23:14:57382 %z = arith.constant dense<0> : tensor<4xi32>
383 // CHECK-DAG: [[C6:%.+]] = arith.constant dense<6>
384 %0 = arith.constant dense<6> : tensor<4xi32>
385 %1 = arith.constant dense<2> : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12386
Mogballa54f4ea2021-10-12 23:14:57387 // CHECK-DAG: [[C3:%.+]] = arith.constant dense<3> : tensor<4xi32>
388 %2 = arith.divui %0, %1 : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12389
Mogballa54f4ea2021-10-12 23:14:57390 %3 = arith.constant dense<-2> : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12391
392 // Unsigned division interprets -2 as 2^32-2, so the result is 0.
Mogballa54f4ea2021-10-12 23:14:57393 // CHECK-DAG: [[C0:%.+]] = arith.constant dense<0> : tensor<4xi32>
394 %4 = arith.divui %0, %3 : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12395
Mogballa54f4ea2021-10-12 23:14:57396 // CHECK-NEXT: [[XZ:%.+]] = arith.divui [[C6]], [[C0]]
397 %5 = arith.divui %0, %z : tensor<4xi32>
Ben Vanik38d78702019-11-25 22:31:12398
399 // CHECK-NEXT: return [[C3]], [[C0]], [[XZ]]
400 return %2, %4, %5 : tensor<4xi32>, tensor<4xi32>, tensor<4xi32>
Alex Zinenkobc045562019-01-06 22:08:42401}
402
Geoffrey Martin-Noblec4891372019-05-06 21:43:45403// -----
404
Mogballa54f4ea2021-10-12 23:14:57405// CHECK-LABEL: func @simple_arith.floordivsi
River Riddlecda6aa72022-04-20 23:22:21406func.func @simple_arith.floordivsi() -> (i32, i32, i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57407 // CHECK-DAG: [[C0:%.+]] = arith.constant 0
408 %z = arith.constant 0 : i32
409 // CHECK-DAG: [[C6:%.+]] = arith.constant 7
410 %0 = arith.constant 7 : i32
411 %1 = arith.constant 2 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10412
413 // floor(7, 2) = 3
Mogballa54f4ea2021-10-12 23:14:57414 // CHECK-NEXT: [[C3:%.+]] = arith.constant 3 : i32
415 %2 = arith.floordivsi %0, %1 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10416
Mogballa54f4ea2021-10-12 23:14:57417 %3 = arith.constant -2 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10418
419 // floor(7, -2) = -4
Mogballa54f4ea2021-10-12 23:14:57420 // CHECK-NEXT: [[CM3:%.+]] = arith.constant -4 : i32
421 %4 = arith.floordivsi %0, %3 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10422
Mogballa54f4ea2021-10-12 23:14:57423 %5 = arith.constant -9 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10424
425 // floor(-9, 2) = -5
Mogballa54f4ea2021-10-12 23:14:57426 // CHECK-NEXT: [[CM4:%.+]] = arith.constant -5 : i32
427 %6 = arith.floordivsi %5, %1 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10428
Mogballa54f4ea2021-10-12 23:14:57429 %7 = arith.constant -13 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10430
431 // floor(-13, -2) = 6
Mogballa54f4ea2021-10-12 23:14:57432 // CHECK-NEXT: [[CM5:%.+]] = arith.constant 6 : i32
433 %8 = arith.floordivsi %7, %3 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10434
Mogballa54f4ea2021-10-12 23:14:57435 // CHECK-NEXT: [[XZ:%.+]] = arith.floordivsi [[C6]], [[C0]]
436 %9 = arith.floordivsi %0, %z : i32
Alexandre Eichenberger07957152020-11-04 18:51:10437
438 return %2, %4, %6, %8, %9 : i32, i32, i32, i32, i32
439}
440
441// -----
442
Mogballa54f4ea2021-10-12 23:14:57443// CHECK-LABEL: func @simple_arith.ceildivsi
River Riddlecda6aa72022-04-20 23:22:21444func.func @simple_arith.ceildivsi() -> (i32, i32, i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57445 // CHECK-DAG: [[C0:%.+]] = arith.constant 0
446 %z = arith.constant 0 : i32
447 // CHECK-DAG: [[C6:%.+]] = arith.constant 7
448 %0 = arith.constant 7 : i32
449 %1 = arith.constant 2 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10450
451 // ceil(7, 2) = 4
Mogballa54f4ea2021-10-12 23:14:57452 // CHECK-NEXT: [[C3:%.+]] = arith.constant 4 : i32
453 %2 = arith.ceildivsi %0, %1 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10454
Mogballa54f4ea2021-10-12 23:14:57455 %3 = arith.constant -2 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10456
457 // ceil(7, -2) = -3
Mogballa54f4ea2021-10-12 23:14:57458 // CHECK-NEXT: [[CM3:%.+]] = arith.constant -3 : i32
459 %4 = arith.ceildivsi %0, %3 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10460
Mogballa54f4ea2021-10-12 23:14:57461 %5 = arith.constant -9 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10462
463 // ceil(-9, 2) = -4
Mogballa54f4ea2021-10-12 23:14:57464 // CHECK-NEXT: [[CM4:%.+]] = arith.constant -4 : i32
465 %6 = arith.ceildivsi %5, %1 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10466
Mogballa54f4ea2021-10-12 23:14:57467 %7 = arith.constant -15 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10468
469 // ceil(-15, -2) = 8
Mogballa54f4ea2021-10-12 23:14:57470 // CHECK-NEXT: [[CM5:%.+]] = arith.constant 8 : i32
471 %8 = arith.ceildivsi %7, %3 : i32
Alexandre Eichenberger07957152020-11-04 18:51:10472
Mogballa54f4ea2021-10-12 23:14:57473 // CHECK-NEXT: [[XZ:%.+]] = arith.ceildivsi [[C6]], [[C0]]
474 %9 = arith.ceildivsi %0, %z : i32
Alexandre Eichenberger07957152020-11-04 18:51:10475
476 return %2, %4, %6, %8, %9 : i32, i32, i32, i32, i32
477}
478
479// -----
480
Andrzej Warzyńskib1da82a2024-05-08 20:06:03481// CHECK-LABEL: func @simple_arith.ceildivsi_overflow
482func.func @simple_arith.ceildivsi_overflow() -> (i8, i16, i32) {
483 // The negative values below are MININTs for the corresponding bit-width. The
484 // folder will try to negate them (so that the division operates on two
485 // positive numbers), but that would cause overflow (negating MININT
486 // overflows). Hence folding should not happen and the original ceildivsi is
487 // preserved.
488
489 // TODO: The folder should be able to fold the following by avoiding
490 // intermediate operations that overflow.
491
492 // CHECK-DAG: %[[C_1:.*]] = arith.constant 7 : i8
493 // CHECK-DAG: %[[MIN_I8:.*]] = arith.constant -128 : i8
494 // CHECK-DAG: %[[C_2:.*]] = arith.constant 7 : i16
495 // CHECK-DAG: %[[MIN_I16:.*]] = arith.constant -32768 : i16
496 // CHECK-DAG: %[[C_3:.*]] = arith.constant 7 : i32
497 // CHECK-DAG: %[[MIN_I32:.*]] = arith.constant -2147483648 : i32
498
499 // CHECK-NEXT: %[[CEILDIV_1:.*]] = arith.ceildivsi %[[MIN_I8]], %[[C_1]] : i8
500 %0 = arith.constant 7 : i8
501 %min_int_i8 = arith.constant -128 : i8
502 %2 = arith.ceildivsi %min_int_i8, %0 : i8
503
504 // CHECK-NEXT: %[[CEILDIV_2:.*]] = arith.ceildivsi %[[MIN_I16]], %[[C_2]] : i16
505 %3 = arith.constant 7 : i16
506 %min_int_i16 = arith.constant -32768 : i16
507 %5 = arith.ceildivsi %min_int_i16, %3 : i16
508
509 // CHECK-NEXT: %[[CEILDIV_2:.*]] = arith.ceildivsi %[[MIN_I32]], %[[C_3]] : i32
510 %6 = arith.constant 7 : i32
511 %min_int_i32 = arith.constant -2147483648 : i32
512 %8 = arith.ceildivsi %min_int_i32, %6 : i32
513
514 return %2, %5, %8 : i8, i16, i32
515}
516
517// -----
518
lipracer8165eaa2021-11-11 01:47:47519// CHECK-LABEL: func @simple_arith.ceildivui
River Riddlecda6aa72022-04-20 23:22:21520func.func @simple_arith.ceildivui() -> (i32, i32, i32, i32, i32) {
lipracer8165eaa2021-11-11 01:47:47521 // CHECK-DAG: [[C0:%.+]] = arith.constant 0
522 %z = arith.constant 0 : i32
523 // CHECK-DAG: [[C6:%.+]] = arith.constant 7
524 %0 = arith.constant 7 : i32
525 %1 = arith.constant 2 : i32
526
527 // ceil(7, 2) = 4
528 // CHECK-NEXT: [[C3:%.+]] = arith.constant 4 : i32
529 %2 = arith.ceildivui %0, %1 : i32
530
531 %3 = arith.constant -2 : i32
532
533 // ceil(7, -2) = 0
534 // CHECK-NEXT: [[CM1:%.+]] = arith.constant 1 : i32
535 %4 = arith.ceildivui %0, %3 : i32
536
537 %5 = arith.constant -8 : i32
538
539 // ceil(-8, 2) = 2147483644
540 // CHECK-NEXT: [[CM4:%.+]] = arith.constant 2147483644 : i32
541 %6 = arith.ceildivui %5, %1 : i32
542
543 %7 = arith.constant -15 : i32
544
545 // ceil(-15, -2) = 0
546 // CHECK-NOT: arith.constant 1 : i32
547 %8 = arith.ceildivui %7, %3 : i32
548
549 // CHECK-NEXT: [[XZ:%.+]] = arith.ceildivui [[C6]], [[C0]]
550 %9 = arith.ceildivui %0, %z : i32
551
552 return %2, %4, %6, %8, %9 : i32, i32, i32, i32, i32
553}
554
555// -----
556
Mogballa54f4ea2021-10-12 23:14:57557// CHECK-LABEL: func @simple_arith.remsi
River Riddlecda6aa72022-04-20 23:22:21558func.func @simple_arith.remsi(%a : i32) -> (i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57559 %0 = arith.constant 5 : i32
560 %1 = arith.constant 2 : i32
561 %2 = arith.constant 1 : i32
562 %3 = arith.constant -2 : i32
Alex Zinenkobc045562019-01-06 22:08:42563
Mogballa54f4ea2021-10-12 23:14:57564 // CHECK-NEXT:[[C1:%.+]] = arith.constant 1 : i32
565 %4 = arith.remsi %0, %1 : i32
566 %5 = arith.remsi %0, %3 : i32
567 // CHECK-NEXT:[[C0:%.+]] = arith.constant 0 : i32
568 %6 = arith.remsi %a, %2 : i32
Alex Zinenkobc045562019-01-06 22:08:42569
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59570 // CHECK-NEXT: return [[C1]], [[C1]], [[C0]] : i32, i32, i32
Alex Zinenkobc045562019-01-06 22:08:42571 return %4, %5, %6 : i32, i32, i32
572}
573
Geoffrey Martin-Noblec4891372019-05-06 21:43:45574// -----
575
Mogballa54f4ea2021-10-12 23:14:57576// CHECK-LABEL: func @simple_arith.remui
River Riddlecda6aa72022-04-20 23:22:21577func.func @simple_arith.remui(%a : i32) -> (i32, i32, i32) {
Mogballa54f4ea2021-10-12 23:14:57578 %0 = arith.constant 5 : i32
579 %1 = arith.constant 2 : i32
580 %2 = arith.constant 1 : i32
581 %3 = arith.constant -2 : i32
Alex Zinenkobc045562019-01-06 22:08:42582
Mogballa54f4ea2021-10-12 23:14:57583 // CHECK-DAG:[[C1:%.+]] = arith.constant 1 : i32
584 %4 = arith.remui %0, %1 : i32
585 // CHECK-DAG:[[C5:%.+]] = arith.constant 5 : i32
586 %5 = arith.remui %0, %3 : i32
587 // CHECK-DAG:[[C0:%.+]] = arith.constant 0 : i32
588 %6 = arith.remui %a, %2 : i32
Alex Zinenkobc045562019-01-06 22:08:42589
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59590 // CHECK-NEXT: return [[C1]], [[C5]], [[C0]] : i32, i32, i32
Alex Zinenkobc045562019-01-06 22:08:42591 return %4, %5, %6 : i32, i32, i32
592}
593
Geoffrey Martin-Noblec4891372019-05-06 21:43:45594// -----
595
Lei Zhang311af4a2019-01-11 17:12:11596// CHECK-LABEL: func @muli
River Riddlecda6aa72022-04-20 23:22:21597func.func @muli() -> i32 {
Mogballa54f4ea2021-10-12 23:14:57598 %0 = arith.constant 4 : i32
599 %1 = arith.constant 2 : i32
Feng Liu7d016fd2018-10-03 16:43:13600
Mogballa54f4ea2021-10-12 23:14:57601 // CHECK-NEXT:[[C8:%.+]] = arith.constant 8 : i32
602 %2 = arith.muli %0, %1 : i32
Feng Liu7d016fd2018-10-03 16:43:13603
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59604 // CHECK-NEXT: return [[C8]]
Lei Zhang311af4a2019-01-11 17:12:11605 return %2 : i32
606}
Chris Lattner6822c4e2018-10-05 16:28:49607
Geoffrey Martin-Noblec4891372019-05-06 21:43:45608// -----
609
Lei Zhang311af4a2019-01-11 17:12:11610// CHECK-LABEL: func @muli_splat_vector
River Riddlecda6aa72022-04-20 23:22:21611func.func @muli_splat_vector() -> vector<4xi32> {
Mogballa54f4ea2021-10-12 23:14:57612 %0 = arith.constant dense<4> : vector<4xi32>
613 %1 = arith.constant dense<2> : vector<4xi32>
Lei Zhang311af4a2019-01-11 17:12:11614
Mogballa54f4ea2021-10-12 23:14:57615 // CHECK-NEXT: [[C:%.+]] = arith.constant dense<8> : vector<4xi32>
616 %2 = arith.muli %0, %1 : vector<4xi32>
Lei Zhang311af4a2019-01-11 17:12:11617
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59618 // CHECK-NEXT: return [[C]]
Lei Zhang311af4a2019-01-11 17:12:11619 return %2 : vector<4xi32>
Feng Liu7d016fd2018-10-03 16:43:13620}
Chris Lattner6822c4e2018-10-05 16:28:49621
Chris Lattnerbbf362b2019-01-02 18:20:00622// CHECK-LABEL: func @dim
River Riddlecda6aa72022-04-20 23:22:21623func.func @dim(%x : tensor<8x4xf32>) -> index {
Chris Lattner6822c4e2018-10-05 16:28:49624
Mogballa54f4ea2021-10-12 23:14:57625 // CHECK:[[C4:%.+]] = arith.constant 4 : index
626 %c1 = arith.constant 1 : index
Matthias Springerc0a63182021-07-01 00:58:48627 %0 = tensor.dim %x, %c1 : tensor<8x4xf32>
Chris Lattner6822c4e2018-10-05 16:28:49628
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59629 // CHECK-NEXT: return [[C4]]
Chris Lattnerd2d89cb2018-10-07 00:21:53630 return %0 : index
Chris Lattner6822c4e2018-10-05 16:28:49631}
632
Geoffrey Martin-Noblec4891372019-05-06 21:43:45633// -----
634
Alex Zinenkoc47ed532019-01-06 22:09:15635// CHECK-LABEL: func @cmpi
River Riddlecda6aa72022-04-20 23:22:21636func.func @cmpi() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
Mogballa54f4ea2021-10-12 23:14:57637 %c42 = arith.constant 42 : i32
638 %cm1 = arith.constant -1 : i32
639 // CHECK-DAG: [[F:%.+]] = arith.constant false
640 // CHECK-DAG: [[T:%.+]] = arith.constant true
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59641 // CHECK-NEXT: return [[F]],
Mogballa54f4ea2021-10-12 23:14:57642 %0 = arith.cmpi eq, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59643 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57644 %1 = arith.cmpi ne, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59645 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57646 %2 = arith.cmpi slt, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59647 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57648 %3 = arith.cmpi sle, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59649 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57650 %4 = arith.cmpi sgt, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59651 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57652 %5 = arith.cmpi sge, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59653 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57654 %6 = arith.cmpi ult, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59655 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57656 %7 = arith.cmpi ule, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59657 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57658 %8 = arith.cmpi ugt, %c42, %cm1 : i32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59659 // CHECK-SAME: [[F]]
Mogballa54f4ea2021-10-12 23:14:57660 %9 = arith.cmpi uge, %c42, %cm1 : i32
Alex Zinenkoc47ed532019-01-06 22:09:15661 return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
662}
Alex Zinenko90034902019-01-10 09:44:32663
Geoffrey Martin-Noblec4891372019-05-06 21:43:45664// -----
665
Geoffrey Martin-Noblec34386e2019-05-07 00:51:08666// CHECK-LABEL: func @cmpf_normal_numbers
River Riddlecda6aa72022-04-20 23:22:21667func.func @cmpf_normal_numbers() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
Mogballa54f4ea2021-10-12 23:14:57668 %c42 = arith.constant 42. : f32
669 %cm1 = arith.constant -1. : f32
670 // CHECK-DAG: [[F:%.+]] = arith.constant false
671 // CHECK-DAG: [[T:%.+]] = arith.constant true
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59672 // CHECK-NEXT: return [[F]],
Mogballa54f4ea2021-10-12 23:14:57673 %0 = arith.cmpf false, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59674 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57675 %1 = arith.cmpf oeq, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59676 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57677 %2 = arith.cmpf ogt, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59678 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57679 %3 = arith.cmpf oge, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59680 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57681 %4 = arith.cmpf olt, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59682 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57683 %5 = arith.cmpf ole, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59684 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57685 %6 = arith.cmpf one, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59686 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57687 %7 = arith.cmpf ord, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59688 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57689 %8 = arith.cmpf ueq, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59690 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57691 %9 = arith.cmpf ugt, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59692 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57693 %10 = arith.cmpf uge, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59694 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57695 %11 = arith.cmpf ult, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59696 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57697 %12 = arith.cmpf ule, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59698 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57699 %13 = arith.cmpf une, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59700 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57701 %14 = arith.cmpf uno, %c42, %cm1 : f32
Geoffrey Martin-Noblef39a5992019-09-12 22:29:59702 // CHECK-SAME: [[T]]
Mogballa54f4ea2021-10-12 23:14:57703 %15 = arith.cmpf true, %c42, %cm1 : f32
Geoffrey Martin-Noblec34386e2019-05-07 00:51:08704 return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
705}
706
707// -----
708
709// CHECK-LABEL: func @cmpf_nan
River Riddlecda6aa72022-04-20 23:22:21710func.func @cmpf_nan() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
Mogballa54f4ea2021-10-12 23:14:57711 %c42 = arith.constant 42. : f32
712 %cqnan = arith.constant 0xFFFFFFFF : f32
713 // CHECK-DAG: [[F:%.+]] = arith.constant false
714 // CHECK-DAG: [[T:%.+]] = arith.constant true
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26715 // CHECK-NEXT: return [[F]],
Mogballa54f4ea2021-10-12 23:14:57716 %0 = arith.cmpf false, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26717 // CHECK-SAME: [[F]]
Mogballa54f4ea2021-10-12 23:14:57718 %1 = arith.cmpf oeq, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26719 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57720 %2 = arith.cmpf ogt, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26721 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57722 %3 = arith.cmpf oge, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26723 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57724 %4 = arith.cmpf olt, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26725 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57726 %5 = arith.cmpf ole, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26727 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57728 %6 = arith.cmpf one, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26729 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57730 %7 = arith.cmpf ord, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26731 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57732 %8 = arith.cmpf ueq, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26733 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57734 %9 = arith.cmpf ugt, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26735 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57736 %10 = arith.cmpf uge, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26737 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57738 %11 = arith.cmpf ult, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26739 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57740 %12 = arith.cmpf ule, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26741 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57742 %13 = arith.cmpf une, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26743 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57744 %14 = arith.cmpf uno, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26745 // CHECK-SAME: [[T]]
Mogballa54f4ea2021-10-12 23:14:57746 %15 = arith.cmpf true, %c42, %cqnan : f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26747 return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
Geoffrey Martin-Noblec34386e2019-05-07 00:51:08748}
749
750// -----
751
752// CHECK-LABEL: func @cmpf_inf
River Riddlecda6aa72022-04-20 23:22:21753func.func @cmpf_inf() -> (i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1) {
Mogballa54f4ea2021-10-12 23:14:57754 %c42 = arith.constant 42. : f32
755 %cpinf = arith.constant 0x7F800000 : f32
756 // CHECK-DAG: [[F:%.+]] = arith.constant false
757 // CHECK-DAG: [[T:%.+]] = arith.constant true
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26758 // CHECK-NEXT: return [[F]],
Mogballa54f4ea2021-10-12 23:14:57759 %0 = arith.cmpf false, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26760 // CHECK-SAME: [[F]]
Mogballa54f4ea2021-10-12 23:14:57761 %1 = arith.cmpf oeq, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26762 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57763 %2 = arith.cmpf ogt, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26764 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57765 %3 = arith.cmpf oge, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26766 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57767 %4 = arith.cmpf olt, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26768 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57769 %5 = arith.cmpf ole, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26770 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57771 %6 = arith.cmpf one, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26772 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57773 %7 = arith.cmpf ord, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26774 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57775 %8 = arith.cmpf ueq, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26776 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57777 %9 = arith.cmpf ugt, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26778 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57779 %10 = arith.cmpf uge, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26780 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57781 %11 = arith.cmpf ult, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26782 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57783 %12 = arith.cmpf ule, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26784 // CHECK-SAME: [[T]],
Mogballa54f4ea2021-10-12 23:14:57785 %13 = arith.cmpf une, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26786 // CHECK-SAME: [[F]],
Mogballa54f4ea2021-10-12 23:14:57787 %14 = arith.cmpf uno, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26788 // CHECK-SAME: [[T]]
Mogballa54f4ea2021-10-12 23:14:57789 %15 = arith.cmpf true, %c42, %cpinf: f32
Geoffrey Martin-Noble2ccbb3f2019-09-12 22:43:26790 return %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15 : i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1, i1
Geoffrey Martin-Noblec34386e2019-05-07 00:51:08791}
792
793// -----
794
River Riddle66ed7d62019-06-25 16:42:52795// CHECK-LABEL: func @nested_isolated_region
River Riddlecda6aa72022-04-20 23:22:21796func.func @nested_isolated_region() {
Joshua Cao7d055af2024-02-06 06:59:03797 // CHECK-NEXT: builtin.module {
River Riddle66ed7d62019-06-25 16:42:52798 // CHECK-NEXT: func @isolated_op
Mogballa54f4ea2021-10-12 23:14:57799 // CHECK-NEXT: arith.constant 2
Joshua Cao7d055af2024-02-06 06:59:03800 builtin.module {
801 func.func @isolated_op() {
802 %0 = arith.constant 1 : i32
803 %2 = arith.addi %0, %0 : i32
804 "foo.yield"(%2) : (i32) -> ()
805 }
River Riddle66ed7d62019-06-25 16:42:52806 }
807
808 // CHECK: "foo.unknown_region"
Mogballa54f4ea2021-10-12 23:14:57809 // CHECK-NEXT: arith.constant 2
River Riddle66ed7d62019-06-25 16:42:52810 "foo.unknown_region"() ({
Mogballa54f4ea2021-10-12 23:14:57811 %0 = arith.constant 1 : i32
812 %2 = arith.addi %0, %0 : i32
River Riddle66ed7d62019-06-25 16:42:52813 "foo.yield"(%2) : (i32) -> ()
814 }) : () -> ()
815 return
816}
River Riddle6563b1c2019-09-02 03:06:42817
818// -----
819
820// CHECK-LABEL: func @custom_insertion_position
River Riddlecda6aa72022-04-20 23:22:21821func.func @custom_insertion_position() {
River Riddle6563b1c2019-09-02 03:06:42822 // CHECK: test.one_region_op
Mogballa54f4ea2021-10-12 23:14:57823 // CHECK-NEXT: arith.constant 2
River Riddle6563b1c2019-09-02 03:06:42824 "test.one_region_op"() ({
825
Mogballa54f4ea2021-10-12 23:14:57826 %0 = arith.constant 1 : i32
827 %2 = arith.addi %0, %0 : i32
River Riddle6563b1c2019-09-02 03:06:42828 "foo.yield"(%2) : (i32) -> ()
829 }) : () -> ()
830 return
831}
Uday Bondhugula458ede82019-09-24 19:44:11832
Stephan Herhut30712452020-10-15 14:27:31833// -----
834
835// CHECK-LABEL: func @subview_scalar_fold
River Riddlecda6aa72022-04-20 23:22:21836func.func @subview_scalar_fold(%arg0: memref<f32>) -> memref<f32> {
Julian Grosse2310702021-02-10 12:53:11837 // CHECK-NOT: memref.subview
838 %c = memref.subview %arg0[] [] [] : memref<f32> to memref<f32>
Stephan Herhut30712452020-10-15 14:27:31839 return %c : memref<f32>
840}