Skip to content

Commit 3acdcf8

Browse files
committed
[AArch64][GISel] Signed comparison using CMN is safe when the subtraction is nsw
llvm#141993 but for GISel, though for LHS, we now do the inverse compare, something that SelDAG does not do as of now but I will do in a future patch.
1 parent d9d5e01 commit 3acdcf8

File tree

1 file changed

+10
-24
lines changed

1 file changed

+10
-24
lines changed

llvm/test/CodeGen/AArch64/cmp-to-cmn.ll

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -781,36 +781,22 @@ define i1 @almost_immediate_neg_ugt_64(i64 %x) {
781781
}
782782

783783
define i1 @cmn_nsw(i32 %a, i32 %b) {
784-
; CHECK-SD-LABEL: cmn_nsw:
785-
; CHECK-SD: // %bb.0:
786-
; CHECK-SD-NEXT: cmn w0, w1
787-
; CHECK-SD-NEXT: cset w0, gt
788-
; CHECK-SD-NEXT: ret
789-
;
790-
; CHECK-GI-LABEL: cmn_nsw:
791-
; CHECK-GI: // %bb.0:
792-
; CHECK-GI-NEXT: neg w8, w1
793-
; CHECK-GI-NEXT: cmp w0, w8
794-
; CHECK-GI-NEXT: cset w0, gt
795-
; CHECK-GI-NEXT: ret
784+
; CHECK-LABEL: cmn_nsw:
785+
; CHECK: // %bb.0:
786+
; CHECK-NEXT: cmn w0, w1
787+
; CHECK-NEXT: cset w0, gt
788+
; CHECK-NEXT: ret
796789
%sub = sub nsw i32 0, %b
797790
%cmp = icmp sgt i32 %a, %sub
798791
ret i1 %cmp
799792
}
800793

801794
define i1 @cmn_nsw_64(i64 %a, i64 %b) {
802-
; CHECK-SD-LABEL: cmn_nsw_64:
803-
; CHECK-SD: // %bb.0:
804-
; CHECK-SD-NEXT: cmn x0, x1
805-
; CHECK-SD-NEXT: cset w0, gt
806-
; CHECK-SD-NEXT: ret
807-
;
808-
; CHECK-GI-LABEL: cmn_nsw_64:
809-
; CHECK-GI: // %bb.0:
810-
; CHECK-GI-NEXT: neg x8, x1
811-
; CHECK-GI-NEXT: cmp x0, x8
812-
; CHECK-GI-NEXT: cset w0, gt
813-
; CHECK-GI-NEXT: ret
795+
; CHECK-LABEL: cmn_nsw_64:
796+
; CHECK: // %bb.0:
797+
; CHECK-NEXT: cmn x0, x1
798+
; CHECK-NEXT: cset w0, gt
799+
; CHECK-NEXT: ret
814800
%sub = sub nsw i64 0, %b
815801
%cmp = icmp sgt i64 %a, %sub
816802
ret i1 %cmp

0 commit comments

Comments
 (0)