@@ -446,10 +446,8 @@ define i1 @cmn_large_imm(i32 %a) {
446446define i1 @almost_immediate_neg_slt (i32 %x ) {
447447; CHECK-LABEL: almost_immediate_neg_slt:
448448; CHECK: // %bb.0:
449- ; CHECK-NEXT: mov w8, #4097 // =0x1001
450- ; CHECK-NEXT: movk w8, #65281, lsl #16
451- ; CHECK-NEXT: cmp w0, w8
452- ; CHECK-NEXT: cset w0, lt
449+ ; CHECK-NEXT: cmn w0, #4079, lsl #12 // =16707584
450+ ; CHECK-NEXT: cset w0, le
453451; CHECK-NEXT: ret
454452 %cmp = icmp slt i32 %x , -16707583
455453 ret i1 %cmp
@@ -458,10 +456,8 @@ define i1 @almost_immediate_neg_slt(i32 %x) {
458456define i1 @almost_immediate_neg_slt_64 (i64 %x ) {
459457; CHECK-LABEL: almost_immediate_neg_slt_64:
460458; CHECK: // %bb.0:
461- ; CHECK-NEXT: mov x8, #-61439 // =0xffffffffffff1001
462- ; CHECK-NEXT: movk x8, #65281, lsl #16
463- ; CHECK-NEXT: cmp x0, x8
464- ; CHECK-NEXT: cset w0, lt
459+ ; CHECK-NEXT: cmn x0, #4079, lsl #12 // =16707584
460+ ; CHECK-NEXT: cset w0, le
465461; CHECK-NEXT: ret
466462 %cmp = icmp slt i64 %x , -16707583
467463 ret i1 %cmp
@@ -510,10 +506,8 @@ define i1 @almost_immediate_neg_uge_64(i64 %x) {
510506define i1 @almost_immediate_neg_ult (i32 %x ) {
511507; CHECK-LABEL: almost_immediate_neg_ult:
512508; CHECK: // %bb.0:
513- ; CHECK-NEXT: mov w8, #4097 // =0x1001
514- ; CHECK-NEXT: movk w8, #65281, lsl #16
515- ; CHECK-NEXT: cmp w0, w8
516- ; CHECK-NEXT: cset w0, lo
509+ ; CHECK-NEXT: cmn w0, #4079, lsl #12 // =16707584
510+ ; CHECK-NEXT: cset w0, ls
517511; CHECK-NEXT: ret
518512 %cmp = icmp ult i32 %x , -16707583
519513 ret i1 %cmp
@@ -522,10 +516,8 @@ define i1 @almost_immediate_neg_ult(i32 %x) {
522516define i1 @almost_immediate_neg_ult_64 (i64 %x ) {
523517; CHECK-LABEL: almost_immediate_neg_ult_64:
524518; CHECK: // %bb.0:
525- ; CHECK-NEXT: mov x8, #-61439 // =0xffffffffffff1001
526- ; CHECK-NEXT: movk x8, #65281, lsl #16
527- ; CHECK-NEXT: cmp x0, x8
528- ; CHECK-NEXT: cset w0, lo
519+ ; CHECK-NEXT: cmn x0, #4079, lsl #12 // =16707584
520+ ; CHECK-NEXT: cset w0, ls
529521; CHECK-NEXT: ret
530522 %cmp = icmp ult i64 %x , -16707583
531523 ret i1 %cmp
@@ -554,9 +546,8 @@ define i1 @almost_immediate_neg_sle_64(i64 %x) {
554546define i1 @almost_immediate_neg_sgt (i32 %x ) {
555547; CHECK-LABEL: almost_immediate_neg_sgt:
556548; CHECK: // %bb.0:
557- ; CHECK-NEXT: mov w8, #-16773121 // =0xff000fff
558- ; CHECK-NEXT: cmp w0, w8
559- ; CHECK-NEXT: cset w0, gt
549+ ; CHECK-NEXT: cmn w0, #4095, lsl #12 // =16773120
550+ ; CHECK-NEXT: cset w0, ge
560551; CHECK-NEXT: ret
561552 %cmp = icmp sgt i32 %x , -16773121
562553 ret i1 %cmp
@@ -565,9 +556,8 @@ define i1 @almost_immediate_neg_sgt(i32 %x) {
565556define i1 @almost_immediate_neg_sgt_64 (i64 %x ) {
566557; CHECK-LABEL: almost_immediate_neg_sgt_64:
567558; CHECK: // %bb.0:
568- ; CHECK-NEXT: mov x8, #-16773121 // =0xffffffffff000fff
569- ; CHECK-NEXT: cmp x0, x8
570- ; CHECK-NEXT: cset w0, gt
559+ ; CHECK-NEXT: cmn x0, #4095, lsl #12 // =16773120
560+ ; CHECK-NEXT: cset w0, ge
571561; CHECK-NEXT: ret
572562 %cmp = icmp sgt i64 %x , -16773121
573563 ret i1 %cmp
@@ -596,9 +586,8 @@ define i1 @almost_immediate_neg_ule_64(i64 %x) {
596586define i1 @almost_immediate_neg_ugt (i32 %x ) {
597587; CHECK-LABEL: almost_immediate_neg_ugt:
598588; CHECK: // %bb.0:
599- ; CHECK-NEXT: mov w8, #-16773121 // =0xff000fff
600- ; CHECK-NEXT: cmp w0, w8
601- ; CHECK-NEXT: cset w0, hi
589+ ; CHECK-NEXT: cmn w0, #4095, lsl #12 // =16773120
590+ ; CHECK-NEXT: cset w0, hs
602591; CHECK-NEXT: ret
603592 %cmp = icmp ugt i32 %x , -16773121
604593 ret i1 %cmp
@@ -607,9 +596,8 @@ define i1 @almost_immediate_neg_ugt(i32 %x) {
607596define i1 @almost_immediate_neg_ugt_64 (i64 %x ) {
608597; CHECK-LABEL: almost_immediate_neg_ugt_64:
609598; CHECK: // %bb.0:
610- ; CHECK-NEXT: mov x8, #-16773121 // =0xffffffffff000fff
611- ; CHECK-NEXT: cmp x0, x8
612- ; CHECK-NEXT: cset w0, hi
599+ ; CHECK-NEXT: cmn x0, #4095, lsl #12 // =16773120
600+ ; CHECK-NEXT: cset w0, hs
613601; CHECK-NEXT: ret
614602 %cmp = icmp ugt i64 %x , -16773121
615603 ret i1 %cmp
0 commit comments