@@ -290,3 +290,68 @@ if.end:
290
290
%phi = phi i64 [%val , %bb1 ], [0 , %entry ]
291
291
ret i64 %phi
292
292
}
293
+
294
+ define i8 @test_smax_to_umax_nneg (i8 %a , i8 %b ) {
295
+ ; CHECK-LABEL: @test_smax_to_umax_nneg(
296
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
297
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
298
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smax.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
299
+ ; CHECK-NEXT: ret i8 [[RET]]
300
+ ;
301
+ %nneg_a = and i8 %a , 127
302
+ %nneg_b = and i8 %b , 127
303
+ %ret = call i8 @llvm.smax.i8 (i8 %nneg_a , i8 %nneg_b )
304
+ ret i8 %ret
305
+ }
306
+
307
+ define i8 @test_smax_to_umax_neg (i8 %a , i8 %b ) {
308
+ ; CHECK-LABEL: @test_smax_to_umax_neg(
309
+ ; CHECK-NEXT: [[NEG_A:%.*]] = or i8 [[A:%.*]], -128
310
+ ; CHECK-NEXT: [[NEG_B:%.*]] = or i8 [[B:%.*]], -128
311
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smax.i8(i8 [[NEG_A]], i8 [[NEG_B]])
312
+ ; CHECK-NEXT: ret i8 [[RET]]
313
+ ;
314
+ %neg_a = or i8 %a , 128
315
+ %neg_b = or i8 %b , 128
316
+ %ret = call i8 @llvm.smax.i8 (i8 %neg_a , i8 %neg_b )
317
+ ret i8 %ret
318
+ }
319
+
320
+ define i8 @test_smin_to_umin_nneg (i8 %a , i8 %b ) {
321
+ ; CHECK-LABEL: @test_smin_to_umin_nneg(
322
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
323
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
324
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smin.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
325
+ ; CHECK-NEXT: ret i8 [[RET]]
326
+ ;
327
+ %nneg_a = and i8 %a , 127
328
+ %nneg_b = and i8 %b , 127
329
+ %ret = call i8 @llvm.smin.i8 (i8 %nneg_a , i8 %nneg_b )
330
+ ret i8 %ret
331
+ }
332
+
333
+ define i8 @test_smin_to_umin_neg (i8 %a , i8 %b ) {
334
+ ; CHECK-LABEL: @test_smin_to_umin_neg(
335
+ ; CHECK-NEXT: [[NEG_A:%.*]] = or i8 [[A:%.*]], -128
336
+ ; CHECK-NEXT: [[NEG_B:%.*]] = or i8 [[B:%.*]], -128
337
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.smin.i8(i8 [[NEG_A]], i8 [[NEG_B]])
338
+ ; CHECK-NEXT: ret i8 [[RET]]
339
+ ;
340
+ %neg_a = or i8 %a , 128
341
+ %neg_b = or i8 %b , 128
342
+ %ret = call i8 @llvm.smin.i8 (i8 %neg_a , i8 %neg_b )
343
+ ret i8 %ret
344
+ }
345
+
346
+ define i8 @test_umax_nneg (i8 %a , i8 %b ) {
347
+ ; CHECK-LABEL: @test_umax_nneg(
348
+ ; CHECK-NEXT: [[NNEG_A:%.*]] = and i8 [[A:%.*]], 127
349
+ ; CHECK-NEXT: [[NNEG_B:%.*]] = and i8 [[B:%.*]], 127
350
+ ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umax.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
351
+ ; CHECK-NEXT: ret i8 [[RET]]
352
+ ;
353
+ %nneg_a = and i8 %a , 127
354
+ %nneg_b = and i8 %b , 127
355
+ %ret = call i8 @llvm.umax.i8 (i8 %nneg_a , i8 %nneg_b )
356
+ ret i8 %ret
357
+ }
0 commit comments