xref: /llvm-project/llvm/test/CodeGen/ARM/select-constant-xor.ll (revision d8d24c64fe21948d0d4faf60e7a0ce6ba21b0b1a)
17801d796SDavid Green; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
27801d796SDavid Green; RUN: llc -mtriple=armv7a-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK7A
37801d796SDavid Green; RUN: llc -mtriple=thumbv6m-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK6M
47801d796SDavid Green; RUN: llc -mtriple=thumbv7m-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK7M
57801d796SDavid Green; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK81M
67801d796SDavid Green
77801d796SDavid Greendefine i32 @xori64i32(i64 %a) {
87801d796SDavid Green; CHECK7A-LABEL: xori64i32:
97801d796SDavid Green; CHECK7A:       @ %bb.0:
107801d796SDavid Green; CHECK7A-NEXT:    mvn r0, #-2147483648
117801d796SDavid Green; CHECK7A-NEXT:    eor r0, r0, r1, asr #31
127801d796SDavid Green; CHECK7A-NEXT:    bx lr
137801d796SDavid Green;
147801d796SDavid Green; CHECK6M-LABEL: xori64i32:
157801d796SDavid Green; CHECK6M:       @ %bb.0:
167801d796SDavid Green; CHECK6M-NEXT:    asrs r1, r1, #31
177801d796SDavid Green; CHECK6M-NEXT:    ldr r0, .LCPI0_0
187801d796SDavid Green; CHECK6M-NEXT:    eors r0, r1
197801d796SDavid Green; CHECK6M-NEXT:    bx lr
207801d796SDavid Green; CHECK6M-NEXT:    .p2align 2
217801d796SDavid Green; CHECK6M-NEXT:  @ %bb.1:
227801d796SDavid Green; CHECK6M-NEXT:  .LCPI0_0:
237801d796SDavid Green; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff
247801d796SDavid Green;
257801d796SDavid Green; CHECK7M-LABEL: xori64i32:
267801d796SDavid Green; CHECK7M:       @ %bb.0:
277801d796SDavid Green; CHECK7M-NEXT:    mvn r0, #-2147483648
287801d796SDavid Green; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #31
297801d796SDavid Green; CHECK7M-NEXT:    bx lr
307801d796SDavid Green;
317801d796SDavid Green; CHECK81M-LABEL: xori64i32:
327801d796SDavid Green; CHECK81M:       @ %bb.0:
337801d796SDavid Green; CHECK81M-NEXT:    mvn r0, #-2147483648
347801d796SDavid Green; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #31
357801d796SDavid Green; CHECK81M-NEXT:    bx lr
367801d796SDavid Green  %shr4 = ashr i64 %a, 63
377801d796SDavid Green  %conv5 = trunc i64 %shr4 to i32
387801d796SDavid Green  %xor = xor i32 %conv5, 2147483647
397801d796SDavid Green  ret i32 %xor
407801d796SDavid Green}
417801d796SDavid Green
427801d796SDavid Greendefine i64 @selecti64i64(i64 %a) {
437801d796SDavid Green; CHECK7A-LABEL: selecti64i64:
447801d796SDavid Green; CHECK7A:       @ %bb.0:
458523fb96SDavid Green; CHECK7A-NEXT:    mvn r0, #-2147483648
468523fb96SDavid Green; CHECK7A-NEXT:    eor r0, r0, r1, asr #31
478523fb96SDavid Green; CHECK7A-NEXT:    asr r1, r1, #31
487801d796SDavid Green; CHECK7A-NEXT:    bx lr
497801d796SDavid Green;
507801d796SDavid Green; CHECK6M-LABEL: selecti64i64:
517801d796SDavid Green; CHECK6M:       @ %bb.0:
528523fb96SDavid Green; CHECK6M-NEXT:    asrs r1, r1, #31
537801d796SDavid Green; CHECK6M-NEXT:    ldr r0, .LCPI1_0
548523fb96SDavid Green; CHECK6M-NEXT:    eors r0, r1
557801d796SDavid Green; CHECK6M-NEXT:    bx lr
567801d796SDavid Green; CHECK6M-NEXT:    .p2align 2
578523fb96SDavid Green; CHECK6M-NEXT:  @ %bb.1:
587801d796SDavid Green; CHECK6M-NEXT:  .LCPI1_0:
597801d796SDavid Green; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff
607801d796SDavid Green;
617801d796SDavid Green; CHECK7M-LABEL: selecti64i64:
627801d796SDavid Green; CHECK7M:       @ %bb.0:
638523fb96SDavid Green; CHECK7M-NEXT:    mvn r0, #-2147483648
648523fb96SDavid Green; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #31
658523fb96SDavid Green; CHECK7M-NEXT:    asrs r1, r1, #31
667801d796SDavid Green; CHECK7M-NEXT:    bx lr
677801d796SDavid Green;
687801d796SDavid Green; CHECK81M-LABEL: selecti64i64:
697801d796SDavid Green; CHECK81M:       @ %bb.0:
707801d796SDavid Green; CHECK81M-NEXT:    mvn r0, #-2147483648
718523fb96SDavid Green; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #31
728523fb96SDavid Green; CHECK81M-NEXT:    asrs r1, r1, #31
737801d796SDavid Green; CHECK81M-NEXT:    bx lr
747801d796SDavid Green  %c = icmp sgt i64 %a, -1
757801d796SDavid Green  %s = select i1 %c, i64 2147483647, i64 -2147483648
767801d796SDavid Green  ret i64 %s
777801d796SDavid Green}
787801d796SDavid Green
797801d796SDavid Greendefine i32 @selecti64i32(i64 %a) {
807801d796SDavid Green; CHECK7A-LABEL: selecti64i32:
817801d796SDavid Green; CHECK7A:       @ %bb.0:
828523fb96SDavid Green; CHECK7A-NEXT:    mvn r0, #-2147483648
838523fb96SDavid Green; CHECK7A-NEXT:    eor r0, r0, r1, asr #31
847801d796SDavid Green; CHECK7A-NEXT:    bx lr
857801d796SDavid Green;
867801d796SDavid Green; CHECK6M-LABEL: selecti64i32:
877801d796SDavid Green; CHECK6M:       @ %bb.0:
887801d796SDavid Green; CHECK6M-NEXT:    ldr r0, .LCPI2_0
897801d796SDavid Green; CHECK6M-NEXT:    cmp r1, #0
907801d796SDavid Green; CHECK6M-NEXT:    bge .LBB2_2
917801d796SDavid Green; CHECK6M-NEXT:  @ %bb.1:
927801d796SDavid Green; CHECK6M-NEXT:    adds r0, r0, #1
937801d796SDavid Green; CHECK6M-NEXT:  .LBB2_2:
947801d796SDavid Green; CHECK6M-NEXT:    bx lr
957801d796SDavid Green; CHECK6M-NEXT:    .p2align 2
967801d796SDavid Green; CHECK6M-NEXT:  @ %bb.3:
977801d796SDavid Green; CHECK6M-NEXT:  .LCPI2_0:
987801d796SDavid Green; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff
997801d796SDavid Green;
1007801d796SDavid Green; CHECK7M-LABEL: selecti64i32:
1017801d796SDavid Green; CHECK7M:       @ %bb.0:
1028523fb96SDavid Green; CHECK7M-NEXT:    mvn r0, #-2147483648
1038523fb96SDavid Green; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #31
1047801d796SDavid Green; CHECK7M-NEXT:    bx lr
1057801d796SDavid Green;
1067801d796SDavid Green; CHECK81M-LABEL: selecti64i32:
1077801d796SDavid Green; CHECK81M:       @ %bb.0:
1087801d796SDavid Green; CHECK81M-NEXT:    mvn r0, #-2147483648
1098523fb96SDavid Green; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #31
1107801d796SDavid Green; CHECK81M-NEXT:    bx lr
1117801d796SDavid Green  %c = icmp sgt i64 %a, -1
1127801d796SDavid Green  %s = select i1 %c, i32 2147483647, i32 -2147483648
1137801d796SDavid Green  ret i32 %s
1147801d796SDavid Green}
1157801d796SDavid Green
1167801d796SDavid Greendefine i64 @selecti32i64(i32 %a) {
1177801d796SDavid Green; CHECK7A-LABEL: selecti32i64:
1187801d796SDavid Green; CHECK7A:       @ %bb.0:
1198523fb96SDavid Green; CHECK7A-NEXT:    mvn r1, #-2147483648
1208523fb96SDavid Green; CHECK7A-NEXT:    eor r2, r1, r0, asr #31
1218523fb96SDavid Green; CHECK7A-NEXT:    asr r1, r0, #31
1227801d796SDavid Green; CHECK7A-NEXT:    mov r0, r2
1237801d796SDavid Green; CHECK7A-NEXT:    bx lr
1247801d796SDavid Green;
1257801d796SDavid Green; CHECK6M-LABEL: selecti32i64:
1267801d796SDavid Green; CHECK6M:       @ %bb.0:
1278523fb96SDavid Green; CHECK6M-NEXT:    asrs r1, r0, #31
1287801d796SDavid Green; CHECK6M-NEXT:    ldr r0, .LCPI3_0
1298523fb96SDavid Green; CHECK6M-NEXT:    eors r0, r1
1307801d796SDavid Green; CHECK6M-NEXT:    bx lr
1317801d796SDavid Green; CHECK6M-NEXT:    .p2align 2
1328523fb96SDavid Green; CHECK6M-NEXT:  @ %bb.1:
1337801d796SDavid Green; CHECK6M-NEXT:  .LCPI3_0:
1347801d796SDavid Green; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff
1357801d796SDavid Green;
1367801d796SDavid Green; CHECK7M-LABEL: selecti32i64:
1377801d796SDavid Green; CHECK7M:       @ %bb.0:
1388523fb96SDavid Green; CHECK7M-NEXT:    mvn r1, #-2147483648
1398523fb96SDavid Green; CHECK7M-NEXT:    eor.w r2, r1, r0, asr #31
1408523fb96SDavid Green; CHECK7M-NEXT:    asrs r1, r0, #31
1417801d796SDavid Green; CHECK7M-NEXT:    mov r0, r2
1427801d796SDavid Green; CHECK7M-NEXT:    bx lr
1437801d796SDavid Green;
1447801d796SDavid Green; CHECK81M-LABEL: selecti32i64:
1457801d796SDavid Green; CHECK81M:       @ %bb.0:
1467801d796SDavid Green; CHECK81M-NEXT:    mvn r1, #-2147483648
1478523fb96SDavid Green; CHECK81M-NEXT:    eor.w r2, r1, r0, asr #31
1488523fb96SDavid Green; CHECK81M-NEXT:    asrs r1, r0, #31
1498523fb96SDavid Green; CHECK81M-NEXT:    mov r0, r2
1507801d796SDavid Green; CHECK81M-NEXT:    bx lr
1517801d796SDavid Green  %c = icmp sgt i32 %a, -1
1527801d796SDavid Green  %s = select i1 %c, i64 2147483647, i64 -2147483648
1537801d796SDavid Green  ret i64 %s
1547801d796SDavid Green}
1557801d796SDavid Green
1567801d796SDavid Green
1577801d796SDavid Green
1587801d796SDavid Greendefine i8 @xori32i8(i32 %a) {
1597801d796SDavid Green; CHECK7A-LABEL: xori32i8:
1607801d796SDavid Green; CHECK7A:       @ %bb.0:
1617801d796SDavid Green; CHECK7A-NEXT:    mov r1, #84
1627801d796SDavid Green; CHECK7A-NEXT:    eor r0, r1, r0, asr #31
1637801d796SDavid Green; CHECK7A-NEXT:    bx lr
1647801d796SDavid Green;
1657801d796SDavid Green; CHECK6M-LABEL: xori32i8:
1667801d796SDavid Green; CHECK6M:       @ %bb.0:
1677801d796SDavid Green; CHECK6M-NEXT:    asrs r1, r0, #31
1687801d796SDavid Green; CHECK6M-NEXT:    movs r0, #84
1697801d796SDavid Green; CHECK6M-NEXT:    eors r0, r1
1707801d796SDavid Green; CHECK6M-NEXT:    bx lr
1717801d796SDavid Green;
1727801d796SDavid Green; CHECK7M-LABEL: xori32i8:
1737801d796SDavid Green; CHECK7M:       @ %bb.0:
1747801d796SDavid Green; CHECK7M-NEXT:    movs r1, #84
1757801d796SDavid Green; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31
1767801d796SDavid Green; CHECK7M-NEXT:    bx lr
1777801d796SDavid Green;
1787801d796SDavid Green; CHECK81M-LABEL: xori32i8:
1797801d796SDavid Green; CHECK81M:       @ %bb.0:
1807801d796SDavid Green; CHECK81M-NEXT:    movs r1, #84
1817801d796SDavid Green; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31
1827801d796SDavid Green; CHECK81M-NEXT:    bx lr
1837801d796SDavid Green  %shr4 = ashr i32 %a, 31
1847801d796SDavid Green  %conv5 = trunc i32 %shr4 to i8
1857801d796SDavid Green  %xor = xor i8 %conv5, 84
1867801d796SDavid Green  ret i8 %xor
1877801d796SDavid Green}
1887801d796SDavid Green
1897801d796SDavid Greendefine i32 @selecti32i32(i32 %a) {
1907801d796SDavid Green; CHECK7A-LABEL: selecti32i32:
1917801d796SDavid Green; CHECK7A:       @ %bb.0:
1928523fb96SDavid Green; CHECK7A-NEXT:    mov r1, #84
1938523fb96SDavid Green; CHECK7A-NEXT:    eor r0, r1, r0, asr #31
1947801d796SDavid Green; CHECK7A-NEXT:    bx lr
1957801d796SDavid Green;
1967801d796SDavid Green; CHECK6M-LABEL: selecti32i32:
1977801d796SDavid Green; CHECK6M:       @ %bb.0:
1988523fb96SDavid Green; CHECK6M-NEXT:    asrs r1, r0, #31
1997801d796SDavid Green; CHECK6M-NEXT:    movs r0, #84
2008523fb96SDavid Green; CHECK6M-NEXT:    eors r0, r1
2017801d796SDavid Green; CHECK6M-NEXT:    bx lr
2027801d796SDavid Green;
2037801d796SDavid Green; CHECK7M-LABEL: selecti32i32:
2047801d796SDavid Green; CHECK7M:       @ %bb.0:
2058523fb96SDavid Green; CHECK7M-NEXT:    movs r1, #84
2068523fb96SDavid Green; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31
2077801d796SDavid Green; CHECK7M-NEXT:    bx lr
2087801d796SDavid Green;
2097801d796SDavid Green; CHECK81M-LABEL: selecti32i32:
2107801d796SDavid Green; CHECK81M:       @ %bb.0:
2117801d796SDavid Green; CHECK81M-NEXT:    movs r1, #84
2128523fb96SDavid Green; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31
2137801d796SDavid Green; CHECK81M-NEXT:    bx lr
2147801d796SDavid Green  %c = icmp sgt i32 %a, -1
2157801d796SDavid Green  %s = select i1 %c, i32 84, i32 -85
2167801d796SDavid Green  ret i32 %s
2177801d796SDavid Green}
2187801d796SDavid Green
2197801d796SDavid Greendefine i8 @selecti32i8(i32 %a) {
2207801d796SDavid Green; CHECK7A-LABEL: selecti32i8:
2217801d796SDavid Green; CHECK7A:       @ %bb.0:
2228523fb96SDavid Green; CHECK7A-NEXT:    mov r1, #84
2238523fb96SDavid Green; CHECK7A-NEXT:    eor r0, r1, r0, asr #31
2247801d796SDavid Green; CHECK7A-NEXT:    bx lr
2257801d796SDavid Green;
2267801d796SDavid Green; CHECK6M-LABEL: selecti32i8:
2277801d796SDavid Green; CHECK6M:       @ %bb.0:
2288523fb96SDavid Green; CHECK6M-NEXT:    asrs r1, r0, #31
2297801d796SDavid Green; CHECK6M-NEXT:    movs r0, #84
2308523fb96SDavid Green; CHECK6M-NEXT:    eors r0, r1
2317801d796SDavid Green; CHECK6M-NEXT:    bx lr
2327801d796SDavid Green;
2337801d796SDavid Green; CHECK7M-LABEL: selecti32i8:
2347801d796SDavid Green; CHECK7M:       @ %bb.0:
2358523fb96SDavid Green; CHECK7M-NEXT:    movs r1, #84
2368523fb96SDavid Green; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31
2377801d796SDavid Green; CHECK7M-NEXT:    bx lr
2387801d796SDavid Green;
2397801d796SDavid Green; CHECK81M-LABEL: selecti32i8:
2407801d796SDavid Green; CHECK81M:       @ %bb.0:
2417801d796SDavid Green; CHECK81M-NEXT:    movs r1, #84
2428523fb96SDavid Green; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31
2437801d796SDavid Green; CHECK81M-NEXT:    bx lr
2447801d796SDavid Green  %c = icmp sgt i32 %a, -1
2457801d796SDavid Green  %s = select i1 %c, i8 84, i8 -85
2467801d796SDavid Green  ret i8 %s
2477801d796SDavid Green}
2487801d796SDavid Green
2497801d796SDavid Greendefine i32 @selecti8i32(i8 %a) {
2507801d796SDavid Green; CHECK7A-LABEL: selecti8i32:
2517801d796SDavid Green; CHECK7A:       @ %bb.0:
2528523fb96SDavid Green; CHECK7A-NEXT:    sxtb r0, r0
2538523fb96SDavid Green; CHECK7A-NEXT:    mov r1, #84
2548523fb96SDavid Green; CHECK7A-NEXT:    eor r0, r1, r0, asr #7
2557801d796SDavid Green; CHECK7A-NEXT:    bx lr
2567801d796SDavid Green;
2577801d796SDavid Green; CHECK6M-LABEL: selecti8i32:
2587801d796SDavid Green; CHECK6M:       @ %bb.0:
2598523fb96SDavid Green; CHECK6M-NEXT:    sxtb r0, r0
2608523fb96SDavid Green; CHECK6M-NEXT:    asrs r1, r0, #7
2617801d796SDavid Green; CHECK6M-NEXT:    movs r0, #84
2628523fb96SDavid Green; CHECK6M-NEXT:    eors r0, r1
2637801d796SDavid Green; CHECK6M-NEXT:    bx lr
2647801d796SDavid Green;
2657801d796SDavid Green; CHECK7M-LABEL: selecti8i32:
2667801d796SDavid Green; CHECK7M:       @ %bb.0:
2678523fb96SDavid Green; CHECK7M-NEXT:    sxtb r0, r0
2688523fb96SDavid Green; CHECK7M-NEXT:    movs r1, #84
2698523fb96SDavid Green; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #7
2707801d796SDavid Green; CHECK7M-NEXT:    bx lr
2717801d796SDavid Green;
2727801d796SDavid Green; CHECK81M-LABEL: selecti8i32:
2737801d796SDavid Green; CHECK81M:       @ %bb.0:
2747801d796SDavid Green; CHECK81M-NEXT:    sxtb r0, r0
2757801d796SDavid Green; CHECK81M-NEXT:    movs r1, #84
2768523fb96SDavid Green; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #7
2777801d796SDavid Green; CHECK81M-NEXT:    bx lr
2787801d796SDavid Green  %c = icmp sgt i8 %a, -1
2797801d796SDavid Green  %s = select i1 %c, i32 84, i32 -85
2807801d796SDavid Green  ret i32 %s
2817801d796SDavid Green}
2827801d796SDavid Green
2837801d796SDavid Greendefine i32 @icmpasreq(i32 %input, i32 %a, i32 %b) {
2847801d796SDavid Green; CHECK7A-LABEL: icmpasreq:
2857801d796SDavid Green; CHECK7A:       @ %bb.0:
28679845ed6SDavid Green; CHECK7A-NEXT:    cmp r0, #0
28779845ed6SDavid Green; CHECK7A-NEXT:    movpl r1, r2
2887801d796SDavid Green; CHECK7A-NEXT:    mov r0, r1
2897801d796SDavid Green; CHECK7A-NEXT:    bx lr
2907801d796SDavid Green;
2917801d796SDavid Green; CHECK6M-LABEL: icmpasreq:
2927801d796SDavid Green; CHECK6M:       @ %bb.0:
29379845ed6SDavid Green; CHECK6M-NEXT:    cmp r0, #0
29479845ed6SDavid Green; CHECK6M-NEXT:    bmi .LBB8_2
2957801d796SDavid Green; CHECK6M-NEXT:  @ %bb.1:
2967801d796SDavid Green; CHECK6M-NEXT:    mov r1, r2
2977801d796SDavid Green; CHECK6M-NEXT:  .LBB8_2:
2987801d796SDavid Green; CHECK6M-NEXT:    mov r0, r1
2997801d796SDavid Green; CHECK6M-NEXT:    bx lr
3007801d796SDavid Green;
3017801d796SDavid Green; CHECK7M-LABEL: icmpasreq:
3027801d796SDavid Green; CHECK7M:       @ %bb.0:
30379845ed6SDavid Green; CHECK7M-NEXT:    cmp r0, #0
30479845ed6SDavid Green; CHECK7M-NEXT:    it pl
30579845ed6SDavid Green; CHECK7M-NEXT:    movpl r1, r2
3067801d796SDavid Green; CHECK7M-NEXT:    mov r0, r1
3077801d796SDavid Green; CHECK7M-NEXT:    bx lr
3087801d796SDavid Green;
3097801d796SDavid Green; CHECK81M-LABEL: icmpasreq:
3107801d796SDavid Green; CHECK81M:       @ %bb.0:
31179845ed6SDavid Green; CHECK81M-NEXT:    cmp r0, #0
31279845ed6SDavid Green; CHECK81M-NEXT:    csel r0, r1, r2, mi
3137801d796SDavid Green; CHECK81M-NEXT:    bx lr
3147801d796SDavid Green  %sh = ashr i32 %input, 31
3157801d796SDavid Green  %c = icmp eq i32 %sh, -1
3167801d796SDavid Green  %s = select i1 %c, i32 %a, i32 %b
3177801d796SDavid Green  ret i32 %s
3187801d796SDavid Green}
3197801d796SDavid Green
3207801d796SDavid Greendefine i32 @icmpasrne(i32 %input, i32 %a, i32 %b) {
3217801d796SDavid Green; CHECK7A-LABEL: icmpasrne:
3227801d796SDavid Green; CHECK7A:       @ %bb.0:
323*d8d24c64SDavid Green; CHECK7A-NEXT:    cmn r0, #1
32479845ed6SDavid Green; CHECK7A-NEXT:    movle r1, r2
3257801d796SDavid Green; CHECK7A-NEXT:    mov r0, r1
3267801d796SDavid Green; CHECK7A-NEXT:    bx lr
3277801d796SDavid Green;
3287801d796SDavid Green; CHECK6M-LABEL: icmpasrne:
3297801d796SDavid Green; CHECK6M:       @ %bb.0:
33079845ed6SDavid Green; CHECK6M-NEXT:    cmp r0, #0
331*d8d24c64SDavid Green; CHECK6M-NEXT:    bge .LBB9_2
3327801d796SDavid Green; CHECK6M-NEXT:  @ %bb.1:
3337801d796SDavid Green; CHECK6M-NEXT:    mov r1, r2
3347801d796SDavid Green; CHECK6M-NEXT:  .LBB9_2:
3357801d796SDavid Green; CHECK6M-NEXT:    mov r0, r1
3367801d796SDavid Green; CHECK6M-NEXT:    bx lr
3377801d796SDavid Green;
3387801d796SDavid Green; CHECK7M-LABEL: icmpasrne:
3397801d796SDavid Green; CHECK7M:       @ %bb.0:
340*d8d24c64SDavid Green; CHECK7M-NEXT:    cmp.w r0, #-1
34179845ed6SDavid Green; CHECK7M-NEXT:    it le
34279845ed6SDavid Green; CHECK7M-NEXT:    movle r1, r2
3437801d796SDavid Green; CHECK7M-NEXT:    mov r0, r1
3447801d796SDavid Green; CHECK7M-NEXT:    bx lr
3457801d796SDavid Green;
3467801d796SDavid Green; CHECK81M-LABEL: icmpasrne:
3477801d796SDavid Green; CHECK81M:       @ %bb.0:
348*d8d24c64SDavid Green; CHECK81M-NEXT:    cmp.w r0, #-1
34979845ed6SDavid Green; CHECK81M-NEXT:    csel r0, r1, r2, gt
3507801d796SDavid Green; CHECK81M-NEXT:    bx lr
3517801d796SDavid Green  %sh = ashr i32 %input, 31
3527801d796SDavid Green  %c = icmp ne i32 %sh, -1
3537801d796SDavid Green  %s = select i1 %c, i32 %a, i32 %b
3547801d796SDavid Green  ret i32 %s
3557801d796SDavid Green}
3567801d796SDavid Green
3577801d796SDavid Greendefine i32 @oneusecmp(i32 %a, i32 %b, i32 %d) {
3587801d796SDavid Green; CHECK7A-LABEL: oneusecmp:
3597801d796SDavid Green; CHECK7A:       @ %bb.0:
3607801d796SDavid Green; CHECK7A-NEXT:    cmp r0, #0
3617801d796SDavid Green; CHECK7A-NEXT:    movmi r1, r2
3621b83aaaeSDavid Green; CHECK7A-NEXT:    mov r2, #127
3631b83aaaeSDavid Green; CHECK7A-NEXT:    eor r0, r2, r0, asr #31
3647801d796SDavid Green; CHECK7A-NEXT:    add r0, r0, r1
3657801d796SDavid Green; CHECK7A-NEXT:    bx lr
3667801d796SDavid Green;
3677801d796SDavid Green; CHECK6M-LABEL: oneusecmp:
3687801d796SDavid Green; CHECK6M:       @ %bb.0:
3697801d796SDavid Green; CHECK6M-NEXT:    cmp r0, #0
3707801d796SDavid Green; CHECK6M-NEXT:    bmi .LBB10_2
3717801d796SDavid Green; CHECK6M-NEXT:  @ %bb.1:
3727801d796SDavid Green; CHECK6M-NEXT:    mov r2, r1
3737801d796SDavid Green; CHECK6M-NEXT:  .LBB10_2:
3741b83aaaeSDavid Green; CHECK6M-NEXT:    asrs r0, r0, #31
3757801d796SDavid Green; CHECK6M-NEXT:    movs r1, #127
3761b83aaaeSDavid Green; CHECK6M-NEXT:    eors r1, r0
3777801d796SDavid Green; CHECK6M-NEXT:    adds r0, r1, r2
3787801d796SDavid Green; CHECK6M-NEXT:    bx lr
3797801d796SDavid Green;
3807801d796SDavid Green; CHECK7M-LABEL: oneusecmp:
3817801d796SDavid Green; CHECK7M:       @ %bb.0:
3827801d796SDavid Green; CHECK7M-NEXT:    cmp r0, #0
3837801d796SDavid Green; CHECK7M-NEXT:    it mi
3847801d796SDavid Green; CHECK7M-NEXT:    movmi r1, r2
3851b83aaaeSDavid Green; CHECK7M-NEXT:    movs r2, #127
3861b83aaaeSDavid Green; CHECK7M-NEXT:    eor.w r0, r2, r0, asr #31
3877801d796SDavid Green; CHECK7M-NEXT:    add r0, r1
3887801d796SDavid Green; CHECK7M-NEXT:    bx lr
3897801d796SDavid Green;
3907801d796SDavid Green; CHECK81M-LABEL: oneusecmp:
3917801d796SDavid Green; CHECK81M:       @ %bb.0:
3927801d796SDavid Green; CHECK81M-NEXT:    cmp r0, #0
3931b83aaaeSDavid Green; CHECK81M-NEXT:    csel r1, r2, r1, mi
3941b83aaaeSDavid Green; CHECK81M-NEXT:    movs r2, #127
3951b83aaaeSDavid Green; CHECK81M-NEXT:    eor.w r0, r2, r0, asr #31
3967801d796SDavid Green; CHECK81M-NEXT:    add r0, r1
3977801d796SDavid Green; CHECK81M-NEXT:    bx lr
3987801d796SDavid Green  %c = icmp sle i32 %a, -1
3997801d796SDavid Green  %s = select i1 %c, i32 -128, i32 127
4007801d796SDavid Green  %s2 = select i1 %c, i32 %d, i32 %b
4017801d796SDavid Green  %x = add i32 %s, %s2
4027801d796SDavid Green  ret i32 %x
4037801d796SDavid Green}
404