@@ -130,6 +130,17 @@ define i1 @zext_sext_sgt(i8 %x, i8 %y) {
130
130
ret i1 %c
131
131
}
132
132
133
+ define i1 @zext_nneg_sext_sgt (i8 %x , i8 %y ) {
134
+ ; CHECK-LABEL: @zext_nneg_sext_sgt(
135
+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
136
+ ; CHECK-NEXT: ret i1 [[C]]
137
+ ;
138
+ %a = zext nneg i8 %x to i32
139
+ %b = sext i8 %y to i32
140
+ %c = icmp sgt i32 %a , %b
141
+ ret i1 %c
142
+ }
143
+
133
144
define i1 @zext_sext_ugt (i8 %x , i8 %y ) {
134
145
; CHECK-LABEL: @zext_sext_ugt(
135
146
; CHECK-NEXT: [[A:%.*]] = zext i8 [[X:%.*]] to i32
@@ -143,6 +154,18 @@ define i1 @zext_sext_ugt(i8 %x, i8 %y) {
143
154
ret i1 %c
144
155
}
145
156
157
+
158
+ define i1 @zext_nneg_sext_ugt (i8 %x , i8 %y ) {
159
+ ; CHECK-LABEL: @zext_nneg_sext_ugt(
160
+ ; CHECK-NEXT: [[C:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
161
+ ; CHECK-NEXT: ret i1 [[C]]
162
+ ;
163
+ %a = zext nneg i8 %x to i32
164
+ %b = sext i8 %y to i32
165
+ %c = icmp ugt i32 %a , %b
166
+ ret i1 %c
167
+ }
168
+
146
169
define i1 @zext_sext_eq (i8 %x , i8 %y ) {
147
170
; CHECK-LABEL: @zext_sext_eq(
148
171
; CHECK-NEXT: [[A:%.*]] = zext i8 [[X:%.*]] to i32
@@ -156,6 +179,18 @@ define i1 @zext_sext_eq(i8 %x, i8 %y) {
156
179
ret i1 %c
157
180
}
158
181
182
+ define i1 @zext_nneg_sext_eq (i8 %x , i8 %y ) {
183
+ ; CHECK-LABEL: @zext_nneg_sext_eq(
184
+ ; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[X:%.*]], [[Y:%.*]]
185
+ ; CHECK-NEXT: ret i1 [[C]]
186
+ ;
187
+ %a = zext nneg i8 %x to i32
188
+ %b = sext i8 %y to i32
189
+ %c = icmp eq i32 %a , %b
190
+ ret i1 %c
191
+ }
192
+
193
+
159
194
define i1 @zext_sext_sle_op0_narrow (i8 %x , i16 %y ) {
160
195
; CHECK-LABEL: @zext_sext_sle_op0_narrow(
161
196
; CHECK-NEXT: [[A:%.*]] = zext i8 [[X:%.*]] to i32
@@ -169,6 +204,19 @@ define i1 @zext_sext_sle_op0_narrow(i8 %x, i16 %y) {
169
204
ret i1 %c
170
205
}
171
206
207
+
208
+ define i1 @zext_nneg_sext_sle_op0_narrow (i8 %x , i16 %y ) {
209
+ ; CHECK-LABEL: @zext_nneg_sext_sle_op0_narrow(
210
+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X:%.*]] to i16
211
+ ; CHECK-NEXT: [[C:%.*]] = icmp sle i16 [[TMP1]], [[Y:%.*]]
212
+ ; CHECK-NEXT: ret i1 [[C]]
213
+ ;
214
+ %a = zext nneg i8 %x to i32
215
+ %b = sext i16 %y to i32
216
+ %c = icmp sle i32 %a , %b
217
+ ret i1 %c
218
+ }
219
+
172
220
define i1 @zext_sext_ule_op0_wide (i9 %x , i8 %y ) {
173
221
; CHECK-LABEL: @zext_sext_ule_op0_wide(
174
222
; CHECK-NEXT: [[A:%.*]] = zext i9 [[X:%.*]] to i32
@@ -182,6 +230,18 @@ define i1 @zext_sext_ule_op0_wide(i9 %x, i8 %y) {
182
230
ret i1 %c
183
231
}
184
232
233
+ define i1 @zext_nneg_sext_ule_op0_wide (i9 %x , i8 %y ) {
234
+ ; CHECK-LABEL: @zext_nneg_sext_ule_op0_wide(
235
+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[Y:%.*]] to i9
236
+ ; CHECK-NEXT: [[C:%.*]] = icmp uge i9 [[TMP1]], [[X:%.*]]
237
+ ; CHECK-NEXT: ret i1 [[C]]
238
+ ;
239
+ %a = zext nneg i9 %x to i32
240
+ %b = sext i8 %y to i32
241
+ %c = icmp ule i32 %a , %b
242
+ ret i1 %c
243
+ }
244
+
185
245
define i1 @sext_zext_slt (i8 %x , i8 %y ) {
186
246
; CHECK-LABEL: @sext_zext_slt(
187
247
; CHECK-NEXT: [[A:%.*]] = sext i8 [[X:%.*]] to i32
@@ -195,6 +255,18 @@ define i1 @sext_zext_slt(i8 %x, i8 %y) {
195
255
ret i1 %c
196
256
}
197
257
258
+
259
+ define i1 @sext_zext_nneg_slt (i8 %x , i8 %y ) {
260
+ ; CHECK-LABEL: @sext_zext_nneg_slt(
261
+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
262
+ ; CHECK-NEXT: ret i1 [[C]]
263
+ ;
264
+ %a = sext i8 %x to i32
265
+ %b = zext nneg i8 %y to i32
266
+ %c = icmp slt i32 %a , %b
267
+ ret i1 %c
268
+ }
269
+
198
270
define i1 @sext_zext_ult (i8 %x , i8 %y ) {
199
271
; CHECK-LABEL: @sext_zext_ult(
200
272
; CHECK-NEXT: [[A:%.*]] = sext i8 [[X:%.*]] to i32
@@ -208,6 +280,17 @@ define i1 @sext_zext_ult(i8 %x, i8 %y) {
208
280
ret i1 %c
209
281
}
210
282
283
+ define i1 @sext_zext_nneg_ult (i8 %x , i8 %y ) {
284
+ ; CHECK-LABEL: @sext_zext_nneg_ult(
285
+ ; CHECK-NEXT: [[C:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
286
+ ; CHECK-NEXT: ret i1 [[C]]
287
+ ;
288
+ %a = sext i8 %x to i32
289
+ %b = zext nneg i8 %y to i32
290
+ %c = icmp ult i32 %a , %b
291
+ ret i1 %c
292
+ }
293
+
211
294
define <2 x i1 > @sext_zext_ne (<2 x i8 > %x , <2 x i8 > %y ) {
212
295
; CHECK-LABEL: @sext_zext_ne(
213
296
; CHECK-NEXT: [[A:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i32>
@@ -221,6 +304,18 @@ define <2 x i1> @sext_zext_ne(<2 x i8> %x, <2 x i8> %y) {
221
304
ret <2 x i1 > %c
222
305
}
223
306
307
+
308
+ define <2 x i1 > @sext_zext_nneg_ne (<2 x i8 > %x , <2 x i8 > %y ) {
309
+ ; CHECK-LABEL: @sext_zext_nneg_ne(
310
+ ; CHECK-NEXT: [[C:%.*]] = icmp ne <2 x i8> [[X:%.*]], [[Y:%.*]]
311
+ ; CHECK-NEXT: ret <2 x i1> [[C]]
312
+ ;
313
+ %a = sext <2 x i8 > %x to <2 x i32 >
314
+ %b = zext nneg <2 x i8 > %y to <2 x i32 >
315
+ %c = icmp ne <2 x i32 > %a , %b
316
+ ret <2 x i1 > %c
317
+ }
318
+
224
319
define i1 @sext_zext_sge_op0_narrow (i5 %x , i8 %y ) {
225
320
; CHECK-LABEL: @sext_zext_sge_op0_narrow(
226
321
; CHECK-NEXT: [[A:%.*]] = sext i5 [[X:%.*]] to i32
@@ -234,6 +329,19 @@ define i1 @sext_zext_sge_op0_narrow(i5 %x, i8 %y) {
234
329
ret i1 %c
235
330
}
236
331
332
+
333
+ define i1 @sext_zext_nneg_sge_op0_narrow (i5 %x , i8 %y ) {
334
+ ; CHECK-LABEL: @sext_zext_nneg_sge_op0_narrow(
335
+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i5 [[X:%.*]] to i8
336
+ ; CHECK-NEXT: [[C:%.*]] = icmp sge i8 [[TMP1]], [[Y:%.*]]
337
+ ; CHECK-NEXT: ret i1 [[C]]
338
+ ;
339
+ %a = sext i5 %x to i32
340
+ %b = zext nneg i8 %y to i32
341
+ %c = icmp sge i32 %a , %b
342
+ ret i1 %c
343
+ }
344
+
237
345
define i1 @sext_zext_uge_op0_wide (i16 %x , i8 %y ) {
238
346
; CHECK-LABEL: @sext_zext_uge_op0_wide(
239
347
; CHECK-NEXT: [[A:%.*]] = sext i16 [[X:%.*]] to i32
@@ -247,6 +355,19 @@ define i1 @sext_zext_uge_op0_wide(i16 %x, i8 %y) {
247
355
ret i1 %c
248
356
}
249
357
358
+
359
+ define i1 @sext_zext_nneg_uge_op0_wide (i16 %x , i8 %y ) {
360
+ ; CHECK-LABEL: @sext_zext_nneg_uge_op0_wide(
361
+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[Y:%.*]] to i16
362
+ ; CHECK-NEXT: [[C:%.*]] = icmp ule i16 [[TMP1]], [[X:%.*]]
363
+ ; CHECK-NEXT: ret i1 [[C]]
364
+ ;
365
+ %a = sext i16 %x to i32
366
+ %b = zext nneg i8 %y to i32
367
+ %c = icmp uge i32 %a , %b
368
+ ret i1 %c
369
+ }
370
+
250
371
define i1 @zext_sext_sgt_known_nonneg (i8 %x , i8 %y ) {
251
372
; CHECK-LABEL: @zext_sext_sgt_known_nonneg(
252
373
; CHECK-NEXT: [[N:%.*]] = udiv i8 127, [[X:%.*]]
0 commit comments