[llvm] [ARM] Have custom lowering for ucmp and scmp (PR #149315)

David Green via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 3 01:51:47 PDT 2025


================
@@ -1,69 +1,182 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; RUN: llc -mtriple=thumbv7-apple-darwin %s -o - | FileCheck %s
+; RUN: llc -mtriple=thumbv6m-eabi %s -o - | FileCheck %s -check-prefix=THUMB1
+; RUN: llc -mtriple=thumbv7-apple-darwin %s -o - | FileCheck %s -check-prefix=THUMB2
+; RUN: llc -mtriple thumbv8.1m.main-none-eabi -mattr=+mve,+lob -o - %s | FileCheck %s --check-prefix=V81M
 
 define i8 @scmp_8_8(i8 signext %x, i8 signext %y) nounwind {
-; CHECK-LABEL: scmp_8_8:
-; CHECK:       @ %bb.0:
-; CHECK-NEXT:    cmp r0, r1
-; CHECK-NEXT:    mov.w r0, #0
-; CHECK-NEXT:    mov.w r2, #0
-; CHECK-NEXT:    it lt
-; CHECK-NEXT:    movlt r0, #1
-; CHECK-NEXT:    it gt
-; CHECK-NEXT:    movgt r2, #1
-; CHECK-NEXT:    subs r0, r2, r0
-; CHECK-NEXT:    bx lr
+; THUMB1-LABEL: scmp_8_8:
+; THUMB1:       @ %bb.0:
+; THUMB1-NEXT:    movs r2, #1
+; THUMB1-NEXT:    movs r3, #0
+; THUMB1-NEXT:    cmp r0, r1
+; THUMB1-NEXT:    mov r0, r2
+; THUMB1-NEXT:    bge .LBB0_3
+; THUMB1-NEXT:  @ %bb.1:
+; THUMB1-NEXT:    ble .LBB0_4
+; THUMB1-NEXT:  .LBB0_2:
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+; THUMB1-NEXT:  .LBB0_3:
+; THUMB1-NEXT:    mov r0, r3
+; THUMB1-NEXT:    bgt .LBB0_2
+; THUMB1-NEXT:  .LBB0_4:
+; THUMB1-NEXT:    mov r2, r3
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+;
+; THUMB2-LABEL: scmp_8_8:
+; THUMB2:       @ %bb.0:
+; THUMB2-NEXT:    subs r0, r0, r1
+; THUMB2-NEXT:    it gt
+; THUMB2-NEXT:    movgt r0, #1
+; THUMB2-NEXT:    it lt
+; THUMB2-NEXT:    movlt.w r0, #-1
+; THUMB2-NEXT:    bx lr
+;
+; V81M-LABEL: scmp_8_8:
+; V81M:       @ %bb.0:
+; V81M-NEXT:    cmp r0, r1
+; V81M-NEXT:    cset r0, gt
+; V81M-NEXT:    it lt
+; V81M-NEXT:    movlt.w r0, #-1
+; V81M-NEXT:    bx lr
   %1 = call i8 @llvm.scmp(i8 %x, i8 %y)
   ret i8 %1
 }
 
 define i8 @scmp_8_16(i16 signext %x, i16 signext %y) nounwind {
-; CHECK-LABEL: scmp_8_16:
-; CHECK:       @ %bb.0:
-; CHECK-NEXT:    cmp r0, r1
-; CHECK-NEXT:    mov.w r0, #0
-; CHECK-NEXT:    mov.w r2, #0
-; CHECK-NEXT:    it lt
-; CHECK-NEXT:    movlt r0, #1
-; CHECK-NEXT:    it gt
-; CHECK-NEXT:    movgt r2, #1
-; CHECK-NEXT:    subs r0, r2, r0
-; CHECK-NEXT:    bx lr
+; THUMB1-LABEL: scmp_8_16:
+; THUMB1:       @ %bb.0:
+; THUMB1-NEXT:    movs r2, #1
+; THUMB1-NEXT:    movs r3, #0
+; THUMB1-NEXT:    cmp r0, r1
+; THUMB1-NEXT:    mov r0, r2
+; THUMB1-NEXT:    bge .LBB1_3
+; THUMB1-NEXT:  @ %bb.1:
+; THUMB1-NEXT:    ble .LBB1_4
+; THUMB1-NEXT:  .LBB1_2:
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+; THUMB1-NEXT:  .LBB1_3:
+; THUMB1-NEXT:    mov r0, r3
+; THUMB1-NEXT:    bgt .LBB1_2
+; THUMB1-NEXT:  .LBB1_4:
+; THUMB1-NEXT:    mov r2, r3
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+;
+; THUMB2-LABEL: scmp_8_16:
+; THUMB2:       @ %bb.0:
+; THUMB2-NEXT:    subs r0, r0, r1
+; THUMB2-NEXT:    it gt
+; THUMB2-NEXT:    movgt r0, #1
+; THUMB2-NEXT:    it lt
+; THUMB2-NEXT:    movlt.w r0, #-1
+; THUMB2-NEXT:    bx lr
+;
+; V81M-LABEL: scmp_8_16:
+; V81M:       @ %bb.0:
+; V81M-NEXT:    cmp r0, r1
+; V81M-NEXT:    cset r0, gt
+; V81M-NEXT:    it lt
+; V81M-NEXT:    movlt.w r0, #-1
+; V81M-NEXT:    bx lr
   %1 = call i8 @llvm.scmp(i16 %x, i16 %y)
   ret i8 %1
 }
 
 define i8 @scmp_8_32(i32 %x, i32 %y) nounwind {
-; CHECK-LABEL: scmp_8_32:
-; CHECK:       @ %bb.0:
-; CHECK-NEXT:    cmp r0, r1
-; CHECK-NEXT:    mov.w r0, #0
-; CHECK-NEXT:    mov.w r2, #0
-; CHECK-NEXT:    it lt
-; CHECK-NEXT:    movlt r0, #1
-; CHECK-NEXT:    it gt
-; CHECK-NEXT:    movgt r2, #1
-; CHECK-NEXT:    subs r0, r2, r0
-; CHECK-NEXT:    bx lr
+; THUMB1-LABEL: scmp_8_32:
+; THUMB1:       @ %bb.0:
+; THUMB1-NEXT:    movs r2, #1
+; THUMB1-NEXT:    movs r3, #0
+; THUMB1-NEXT:    cmp r0, r1
+; THUMB1-NEXT:    mov r0, r2
+; THUMB1-NEXT:    bge .LBB2_3
+; THUMB1-NEXT:  @ %bb.1:
+; THUMB1-NEXT:    ble .LBB2_4
+; THUMB1-NEXT:  .LBB2_2:
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+; THUMB1-NEXT:  .LBB2_3:
+; THUMB1-NEXT:    mov r0, r3
+; THUMB1-NEXT:    bgt .LBB2_2
+; THUMB1-NEXT:  .LBB2_4:
+; THUMB1-NEXT:    mov r2, r3
+; THUMB1-NEXT:    subs r0, r2, r0
+; THUMB1-NEXT:    bx lr
+;
+; THUMB2-LABEL: scmp_8_32:
+; THUMB2:       @ %bb.0:
+; THUMB2-NEXT:    subs r0, r0, r1
+; THUMB2-NEXT:    it gt
+; THUMB2-NEXT:    movgt r0, #1
+; THUMB2-NEXT:    it lt
+; THUMB2-NEXT:    movlt.w r0, #-1
+; THUMB2-NEXT:    bx lr
+;
+; V81M-LABEL: scmp_8_32:
+; V81M:       @ %bb.0:
+; V81M-NEXT:    cmp r0, r1
+; V81M-NEXT:    cset r0, gt
+; V81M-NEXT:    it lt
+; V81M-NEXT:    movlt.w r0, #-1
+; V81M-NEXT:    bx lr
   %1 = call i8 @llvm.scmp(i32 %x, i32 %y)
   ret i8 %1
 }
 
 define i8 @scmp_8_64(i64 %x, i64 %y) nounwind {
 ; CHECK-LABEL: scmp_8_64:
----------------
davemgreen wrote:

Remove all the old CHECK lines.

https://github.com/llvm/llvm-project/pull/149315


More information about the llvm-commits mailing list