@@ -395,3 +395,51 @@ define i64 @freeze_array() {
395395 %t1 = add i64 %v1 , %v2
396396 ret i64 %t1
397397}
398+
399+ define i32 @freeze_abdu (i8 %x , i8 %y ) {
400+ ; CHECK-SD-LABEL: freeze_abdu:
401+ ; CHECK-SD: // %bb.0:
402+ ; CHECK-SD-NEXT: and w8, w0, #0xff
403+ ; CHECK-SD-NEXT: sub w8, w8, w1, uxtb
404+ ; CHECK-SD-NEXT: cmp w8, #0
405+ ; CHECK-SD-NEXT: cneg w0, w8, mi
406+ ; CHECK-SD-NEXT: ret
407+ ;
408+ ; CHECK-GI-LABEL: freeze_abdu:
409+ ; CHECK-GI: // %bb.0:
410+ ; CHECK-GI-NEXT: and w8, w0, #0xff
411+ ; CHECK-GI-NEXT: sub w8, w8, w1, uxtb
412+ ; CHECK-GI-NEXT: cmp w8, #0
413+ ; CHECK-GI-NEXT: cneg w0, w8, le
414+ ; CHECK-GI-NEXT: ret
415+ %a = zext i8 %x to i32
416+ %b = zext i8 %y to i32
417+ %d = sub i32 %a , %b
418+ %t = call i32 @llvm.abs.i32 (i32 %d , i1 false )
419+ %f = freeze i32 %t
420+ ret i32 %f
421+ }
422+
423+ define i32 @freeze_abds (i8 %x , i8 %y ) {
424+ ; CHECK-SD-LABEL: freeze_abds:
425+ ; CHECK-SD: // %bb.0:
426+ ; CHECK-SD-NEXT: sxtb w8, w0
427+ ; CHECK-SD-NEXT: sub w8, w8, w1, sxtb
428+ ; CHECK-SD-NEXT: cmp w8, #0
429+ ; CHECK-SD-NEXT: cneg w0, w8, mi
430+ ; CHECK-SD-NEXT: ret
431+ ;
432+ ; CHECK-GI-LABEL: freeze_abds:
433+ ; CHECK-GI: // %bb.0:
434+ ; CHECK-GI-NEXT: sxtb w8, w0
435+ ; CHECK-GI-NEXT: sub w8, w8, w1, sxtb
436+ ; CHECK-GI-NEXT: cmp w8, #0
437+ ; CHECK-GI-NEXT: cneg w0, w8, le
438+ ; CHECK-GI-NEXT: ret
439+ %a = sext i8 %x to i32
440+ %b = sext i8 %y to i32
441+ %d = sub i32 %a , %b
442+ %abs = call i32 @llvm.abs.i32 (i32 %d , i1 true )
443+ %f = freeze i32 %abs
444+ ret i32 %f
445+ }
0 commit comments