@@ -62,6 +62,105 @@ func.func @arith_select(%arg0: i1, %arg1: tensor<8xi32>, %arg2: tensor<8xi32>) -
62
62
63
63
// -----
64
64
65
+ func.func @arith_cmpf_false(%arg0: f32, %arg1: f32) -> i1 {
66
+ // CHECK-LABEL: arith_cmpf_false
67
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
68
+ // CHECK-DAG: [[False:[^ ]*]] = "emitc.constant"() <{value = false}> : () -> i1
69
+ %ueq = arith.cmpf false, %arg0, %arg1 : f32
70
+ // CHECK: return [[False]]
71
+ return %ueq: i1
72
+ }
73
+
74
+ // -----
75
+
76
+ func.func @arith_cmpf_oeq(%arg0: f32, %arg1: f32) -> i1 {
77
+ // CHECK-LABEL: arith_cmpf_oeq
78
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
79
+ // CHECK-DAG: [[EQ:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
80
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
81
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
82
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1
83
+ // CHECK-DAG: [[OEQ:[^ ]*]] = emitc.logical_and [[Ordered]], [[EQ]] : i1, i1
84
+ %ueq = arith.cmpf oeq, %arg0, %arg1 : f32
85
+ // CHECK: return [[OEQ]]
86
+ return %ueq: i1
87
+ }
88
+
89
+ // -----
90
+
91
+ func.func @arith_cmpf_ogt(%arg0: f32, %arg1: f32) -> i1 {
92
+ // CHECK-LABEL: arith_cmpf_ogt
93
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
94
+ // CHECK-DAG: [[GT:[^ ]*]] = emitc.cmp gt, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
95
+ // CHECK-DAG: [[OrderedArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
96
+ // CHECK-DAG: [[OrderedArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
97
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[OrderedArg0]], [[OrderedArg1]] : i1, i1
98
+ // CHECK-DAG: [[OGT:[^ ]*]] = emitc.logical_and [[Ordered]], [[GT]] : i1, i1
99
+ %ogt = arith.cmpf ogt, %arg0, %arg1 : f32
100
+ // CHECK: return [[OGT]]
101
+ return %ogt: i1
102
+ }
103
+
104
+ // -----
105
+
106
+ func.func @arith_cmpf_oge(%arg0: f32, %arg1: f32) -> i1 {
107
+ // CHECK-LABEL: arith_cmpf_oge
108
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
109
+ // CHECK-DAG: [[GE:[^ ]*]] = emitc.cmp ge, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
110
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
111
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
112
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1
113
+ // CHECK-DAG: [[OGE:[^ ]*]] = emitc.logical_and [[Ordered]], [[GE]] : i1, i1
114
+ %ueq = arith.cmpf oge, %arg0, %arg1 : f32
115
+ // CHECK: return [[OGE]]
116
+ return %ueq: i1
117
+ }
118
+
119
+ // -----
120
+
121
+ func.func @arith_cmpf_olt(%arg0: f32, %arg1: f32) -> i1 {
122
+ // CHECK-LABEL: arith_cmpf_olt
123
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
124
+ // CHECK-DAG: [[LT:[^ ]*]] = emitc.cmp lt, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
125
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
126
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
127
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1
128
+ // CHECK-DAG: [[UEQ:[^ ]*]] = emitc.logical_and [[Ordered]], [[LT]] : i1, i1
129
+ %ueq = arith.cmpf olt, %arg0, %arg1 : f32
130
+ // CHECK: return [[UEQ]]
131
+ return %ueq: i1
132
+ }
133
+
134
+ // -----
135
+
136
+ func.func @arith_cmpf_one(%arg0: f32, %arg1: f32) -> i1 {
137
+ // CHECK-LABEL: arith_cmpf_one
138
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
139
+ // CHECK-DAG: [[NEQ:[^ ]*]] = emitc.cmp ne, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
140
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
141
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
142
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1
143
+ // CHECK-DAG: [[ONE:[^ ]*]] = emitc.logical_and [[Ordered]], [[NEQ]] : i1, i1
144
+ %ueq = arith.cmpf one, %arg0, %arg1 : f32
145
+ // CHECK: return [[ONE]]
146
+ return %ueq: i1
147
+ }
148
+
149
+ // -----
150
+
151
+ func.func @arith_cmpf_ord(%arg0: f32, %arg1: f32) -> i1 {
152
+ // CHECK-LABEL: arith_cmpf_ord
153
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
154
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
155
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
156
+ // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1
157
+ %ueq = arith.cmpf ord, %arg0, %arg1 : f32
158
+ // CHECK: return [[Ordered]]
159
+ return %ueq: i1
160
+ }
161
+
162
+ // -----
163
+
65
164
func.func @arith_cmpf_ueq(%arg0: f32, %arg1: f32) -> i1 {
66
165
// CHECK-LABEL: arith_cmpf_ueq
67
166
// CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
@@ -137,30 +236,41 @@ func.func @arith_cmpf_ule(%arg0: f32, %arg1: f32) -> i1 {
137
236
138
237
// -----
139
238
239
+ func.func @arith_cmpf_une(%arg0: f32, %arg1: f32) -> i1 {
240
+ // CHECK-LABEL: arith_cmpf_une
241
+ // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
242
+ // CHECK-DAG: [[NEQ:[^ ]*]] = emitc.cmp ne, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
243
+ // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp ne, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
244
+ // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp ne, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
245
+ // CHECK-DAG: [[Unordered:[^ ]*]] = emitc.logical_or [[NaNArg0]], [[NaNArg1]] : i1, i1
246
+ // CHECK-DAG: [[UNE:[^ ]*]] = emitc.logical_or [[Unordered]], [[NEQ]] : i1, i1
247
+ %une = arith.cmpf une, %arg0, %arg1 : f32
248
+ // CHECK: return [[UNE]]
249
+ return %une: i1
250
+ }
251
+
252
+ // -----
253
+
140
254
func.func @arith_cmpf_uno(%arg0: f32, %arg1: f32) -> i1 {
141
255
// CHECK-LABEL: arith_cmpf_uno
142
256
// CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
143
257
// CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp ne, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
144
258
// CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp ne, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
145
259
// CHECK-DAG: [[Unordered:[^ ]*]] = emitc.logical_or [[NaNArg0]], [[NaNArg1]] : i1, i1
146
- %2 = arith.cmpf uno, %arg0, %arg1 : f32
260
+ %uno = arith.cmpf uno, %arg0, %arg1 : f32
147
261
// CHECK: return [[Unordered]]
148
- return %2 : i1
262
+ return %uno : i1
149
263
}
150
264
151
265
// -----
152
266
153
- func.func @arith_cmpf_ogt (%arg0: f32, %arg1: f32) -> i1 {
154
- // CHECK-LABEL: arith_cmpf_ogt
267
+ func.func @arith_cmpf_true (%arg0: f32, %arg1: f32) -> i1 {
268
+ // CHECK-LABEL: arith_cmpf_true
155
269
// CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)
156
- // CHECK-DAG: [[GT:[^ ]*]] = emitc.cmp gt, [[Arg0]], [[Arg1]] : (f32, f32) -> i1
157
- // CHECK-DAG: [[OrderedArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1
158
- // CHECK-DAG: [[OrderedArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1
159
- // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[OrderedArg0]], [[OrderedArg1]] : i1, i1
160
- // CHECK-DAG: [[OGT:[^ ]*]] = emitc.logical_and [[Ordered]], [[GT]] : i1, i1
161
- %ule = arith.cmpf ogt, %arg0, %arg1 : f32
162
- // CHECK: return [[OGT]]
163
- return %ule: i1
270
+ // CHECK-DAG: [[True:[^ ]*]] = "emitc.constant"() <{value = true}> : () -> i1
271
+ %ueq = arith.cmpf true, %arg0, %arg1 : f32
272
+ // CHECK: return [[True]]
273
+ return %ueq: i1
164
274
}
165
275
166
276
// -----
0 commit comments