@@ -176,8 +176,8 @@ define i8 @test15(i8 %x) {
176
176
; CHECK-LABEL: @test15(
177
177
; CHECK-NEXT: [[LIM:%.*]] = icmp sge i8 [[X:%.*]], 41
178
178
; CHECK-NEXT: call void @llvm.assume(i1 [[LIM]])
179
- ; CHECK-NEXT: [[R :%.*]] = call i8 @llvm.smin .i8(i8 [[X]], i8 42)
180
- ; CHECK-NEXT: ret i8 [[R ]]
179
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call i8 @llvm.umin .i8(i8 [[X]], i8 42)
180
+ ; CHECK-NEXT: ret i8 [[TMP1 ]]
181
181
;
182
182
%lim = icmp sge i8 %x , 41
183
183
call void @llvm.assume (i1 %lim )
@@ -189,8 +189,8 @@ define i8 @test16(i8 %x) {
189
189
; CHECK-LABEL: @test16(
190
190
; CHECK-NEXT: [[LIM:%.*]] = icmp sge i8 [[X:%.*]], 41
191
191
; CHECK-NEXT: call void @llvm.assume(i1 [[LIM]])
192
- ; CHECK-NEXT: [[R :%.*]] = call i8 @llvm.smax .i8(i8 [[X]], i8 42)
193
- ; CHECK-NEXT: ret i8 [[R ]]
192
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call i8 @llvm.umax .i8(i8 [[X]], i8 42)
193
+ ; CHECK-NEXT: ret i8 [[TMP1 ]]
194
194
;
195
195
%lim = icmp sge i8 %x , 41
196
196
call void @llvm.assume (i1 %lim )
@@ -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: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
299
+ ; CHECK-NEXT: ret i8 [[TMP1]]
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: [[TMP1:%.*]] = call i8 @llvm.umax.i8(i8 [[NEG_A]], i8 [[NEG_B]])
312
+ ; CHECK-NEXT: ret i8 [[TMP1]]
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: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[NNEG_A]], i8 [[NNEG_B]])
325
+ ; CHECK-NEXT: ret i8 [[TMP1]]
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: [[TMP1:%.*]] = call i8 @llvm.umin.i8(i8 [[NEG_A]], i8 [[NEG_B]])
338
+ ; CHECK-NEXT: ret i8 [[TMP1]]
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