@@ -235,3 +235,68 @@ define i8 @test19(i8 %x) {
235
235
%r = call i8 @llvm.smax (i8 %x , i8 42 )
236
236
ret i8 %r
237
237
}
238
+
239
+ define i8 @test_smax_to_umax_nneg (i8 %a , i8 %b ) {
240
+ ; CHECK-LABEL: @test_smax_to_umax_nneg(
241
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
242
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
243
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smax.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
244
+ ; CHECK-NEXT: ret i8 [[RET]]
245
+ ;
246
+ %nneg_a = and i8 %a , 127
247
+ %nneg_b = and i8 %b , 127
248
+ %ret = call i8 @llvm.smax.i8 (i8 %nneg_a , i8 %nneg_b )
249
+ ret i8 %ret
250
+ }
251
+
252
+ define i8 @test_smax_to_umax_neg (i8 %a , i8 %b ) {
253
+ ; CHECK-LABEL: @test_smax_to_umax_neg(
254
+ ; CHECK-NEXT: [[NEG_A:%.*]] = or i8 [[A:%.*]], -128
255
+ ; CHECK-NEXT: [[NEG_B:%.*]] = or i8 [[B:%.*]], -128
256
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smax.i8(i8 [[NEG_A]], i8 [[NEG_B]])
257
+ ; CHECK-NEXT: ret i8 [[RET]]
258
+ ;
259
+ %neg_a = or i8 %a , 128
260
+ %neg_b = or i8 %b , 128
261
+ %ret = call i8 @llvm.smax.i8 (i8 %neg_a , i8 %neg_b )
262
+ ret i8 %ret
263
+ }
264
+
265
+ define i8 @test_smin_to_umin_nneg (i8 %a , i8 %b ) {
266
+ ; CHECK-LABEL: @test_smin_to_umin_nneg(
267
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
268
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
269
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smin.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
270
+ ; CHECK-NEXT: ret i8 [[RET]]
271
+ ;
272
+ %nneg_a = and i8 %a , 127
273
+ %nneg_b = and i8 %b , 127
274
+ %ret = call i8 @llvm.smin.i8 (i8 %nneg_a , i8 %nneg_b )
275
+ ret i8 %ret
276
+ }
277
+
278
+ define i8 @test_smin_to_umin_neg (i8 %a , i8 %b ) {
279
+ ; CHECK-LABEL: @test_smin_to_umin_neg(
280
+ ; CHECK-NEXT: [[NEG_A:%.*]] = or i8 [[A:%.*]], -128
281
+ ; CHECK-NEXT: [[NEG_B:%.*]] = or i8 [[B:%.*]], -128
282
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smin.i8(i8 [[NEG_A]], i8 [[NEG_B]])
283
+ ; CHECK-NEXT: ret i8 [[RET]]
284
+ ;
285
+ %neg_a = or i8 %a , 128
286
+ %neg_b = or i8 %b , 128
287
+ %ret = call i8 @llvm.smin.i8 (i8 %neg_a , i8 %neg_b )
288
+ ret i8 %ret
289
+ }
290
+
291
+ define i8 @test_umax_nneg (i8 %a , i8 %b ) {
292
+ ; CHECK-LABEL: @test_umax_nneg(
293
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
294
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
295
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umax.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
296
+ ; CHECK-NEXT: ret i8 [[RET]]
297
+ ;
298
+ %nneg_a = and i8 %a , 127
299
+ %nneg_b = and i8 %b , 127
300
+ %ret = call i8 @llvm.umax.i8 (i8 %nneg_a , i8 %nneg_b )
301
+ ret i8 %ret
302
+ }
0 commit comments