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