@@ -602,3 +602,51 @@ define i1 @almost_immediate_neg_ugt_64(i64 %x) {
602602 %cmp = icmp ugt i64 %x , -16773121
603603 ret i1 %cmp
604604}
605+
606+ define i1 @cmn_nsw (i32 %a , i32 %b ) {
607+ ; CHECK-LABEL: cmn_nsw:
608+ ; CHECK: // %bb.0:
609+ ; CHECK-NEXT: neg w8, w1
610+ ; CHECK-NEXT: cmp w0, w8
611+ ; CHECK-NEXT: cset w0, gt
612+ ; CHECK-NEXT: ret
613+ %sub = sub nsw i32 0 , %b
614+ %cmp = icmp sgt i32 %a , %sub
615+ ret i1 %cmp
616+ }
617+
618+ define i1 @cmn_nsw_64 (i64 %a , i64 %b ) {
619+ ; CHECK-LABEL: cmn_nsw_64:
620+ ; CHECK: // %bb.0:
621+ ; CHECK-NEXT: neg x8, x1
622+ ; CHECK-NEXT: cmp x0, x8
623+ ; CHECK-NEXT: cset w0, gt
624+ ; CHECK-NEXT: ret
625+ %sub = sub nsw i64 0 , %b
626+ %cmp = icmp sgt i64 %a , %sub
627+ ret i1 %cmp
628+ }
629+
630+ define i1 @cmn_nsw_neg (i32 %a , i32 %b ) {
631+ ; CHECK-LABEL: cmn_nsw_neg:
632+ ; CHECK: // %bb.0:
633+ ; CHECK-NEXT: neg w8, w1
634+ ; CHECK-NEXT: cmp w0, w8
635+ ; CHECK-NEXT: cset w0, gt
636+ ; CHECK-NEXT: ret
637+ %sub = sub i32 0 , %b
638+ %cmp = icmp sgt i32 %a , %sub
639+ ret i1 %cmp
640+ }
641+
642+ define i1 @cmn_nsw_neg_64 (i64 %a , i64 %b ) {
643+ ; CHECK-LABEL: cmn_nsw_neg_64:
644+ ; CHECK: // %bb.0:
645+ ; CHECK-NEXT: neg x8, x1
646+ ; CHECK-NEXT: cmp x0, x8
647+ ; CHECK-NEXT: cset w0, gt
648+ ; CHECK-NEXT: ret
649+ %sub = sub i64 0 , %b
650+ %cmp = icmp sgt i64 %a , %sub
651+ ret i1 %cmp
652+ }
0 commit comments