1d6482df6SDavid Green; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2d6482df6SDavid Green; RUN: llc < %s -mtriple=thumbv6m-none-eabi | FileCheck %s --check-prefix=CHECKV6M 3d6482df6SDavid Green; RUN: llc < %s -mtriple=thumbv7m-none-eabi | FileCheck %s --check-prefix=CHECKV7M 4d6482df6SDavid Green; RUN: llc < %s -mtriple=thumbv7a-none-eabi | FileCheck %s --check-prefix=CHECKV7A 5d6482df6SDavid Green 6d6482df6SDavid Greendefine i32 @icmp64_sge_0(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 7d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_sge_0: 8d6482df6SDavid Green; CHECKV6M: @ %bb.0: 9d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #8] 10d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 11d6482df6SDavid Green; CHECKV6M-NEXT: ldr r2, [sp, #4] 12d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp] 13d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB0_4 14d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 15d6482df6SDavid Green; CHECKV6M-NEXT: cmp r3, #0 16d6482df6SDavid Green; CHECKV6M-NEXT: mov r3, r0 17d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB0_7 18d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 19d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 20d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB0_8 21d6482df6SDavid Green; CHECKV6M-NEXT: .LBB0_3: @ %then 22d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 23d6482df6SDavid Green; CHECKV6M-NEXT: bx lr 24d6482df6SDavid Green; CHECKV6M-NEXT: .LBB0_4: @ %else 25d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 26d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB0_6 27d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.5: @ %else 28d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r2 29d6482df6SDavid Green; CHECKV6M-NEXT: .LBB0_6: @ %else 30d6482df6SDavid Green; CHECKV6M-NEXT: bx lr 31d6482df6SDavid Green; CHECKV6M-NEXT: .LBB0_7: @ %then 32d6482df6SDavid Green; CHECKV6M-NEXT: mov r3, r2 33d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 34d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB0_3 35d6482df6SDavid Green; CHECKV6M-NEXT: .LBB0_8: @ %then 36d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r2 37d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 38d6482df6SDavid Green; CHECKV6M-NEXT: bx lr 39d6482df6SDavid Green; 40d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_sge_0: 41d6482df6SDavid Green; CHECKV7M: @ %bb.0: 42d6482df6SDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #8] 43d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 44d6482df6SDavid Green; CHECKV7M-NEXT: ldrd r2, r0, [sp] 45d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB0_2 46d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 47d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r3, #-1 48d6482df6SDavid Green; CHECKV7M-NEXT: mov r3, r0 49d6482df6SDavid Green; CHECKV7M-NEXT: it gt 50d6482df6SDavid Green; CHECKV7M-NEXT: movgt r3, r2 51d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 52d6482df6SDavid Green; CHECKV7M-NEXT: it gt 53d6482df6SDavid Green; CHECKV7M-NEXT: movgt r0, r2 54d6482df6SDavid Green; CHECKV7M-NEXT: add r0, r3 55d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 56d6482df6SDavid Green; CHECKV7M-NEXT: .LBB0_2: @ %else 57d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 58d6482df6SDavid Green; CHECKV7M-NEXT: it gt 59d6482df6SDavid Green; CHECKV7M-NEXT: movgt r0, r2 60d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 61d6482df6SDavid Green; 62d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_sge_0: 63d6482df6SDavid Green; CHECKV7A: @ %bb.0: 64d6482df6SDavid Green; CHECKV7A-NEXT: ldr r2, [sp, #8] 65d6482df6SDavid Green; CHECKV7A-NEXT: ldrd r12, r0, [sp] 66d6482df6SDavid Green; CHECKV7A-NEXT: lsls r2, r2, #31 67d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB0_2 68d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 69d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r3, #-1 70d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 71d6482df6SDavid Green; CHECKV7A-NEXT: it gt 72d6482df6SDavid Green; CHECKV7A-NEXT: movgt r2, r12 73d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 74d6482df6SDavid Green; CHECKV7A-NEXT: it gt 75d6482df6SDavid Green; CHECKV7A-NEXT: movgt r0, r12 76d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 77d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 78d6482df6SDavid Green; CHECKV7A-NEXT: .LBB0_2: @ %else 79d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 80d6482df6SDavid Green; CHECKV7A-NEXT: it gt 81d6482df6SDavid Green; CHECKV7A-NEXT: movgt r0, r12 82d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 83d6482df6SDavid Green br i1 %c, label %then, label %else 84d6482df6SDavid Greenthen: 85d6482df6SDavid Green %c1 = icmp sge i64 %x, 0 86d6482df6SDavid Green %c2 = icmp sge i64 %y, 0 87d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 88d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 89d6482df6SDavid Green %r = add i32 %s1, %s2 90d6482df6SDavid Green ret i32 %r 91d6482df6SDavid Greenelse: 92d6482df6SDavid Green %c3 = icmp sge i64 %x, 0 93d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 94d6482df6SDavid Green ret i32 %s3 95d6482df6SDavid Green} 96d6482df6SDavid Green 97d6482df6SDavid Greendefine i32 @icmp64_sgt_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 98d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_sgt_m1: 99d6482df6SDavid Green; CHECKV6M: @ %bb.0: 10020b1a16aSDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #8] 101d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 10220b1a16aSDavid Green; CHECKV6M-NEXT: ldr r2, [sp, #4] 10320b1a16aSDavid Green; CHECKV6M-NEXT: ldr r0, [sp] 10420b1a16aSDavid Green; CHECKV6M-NEXT: beq .LBB1_4 105d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 10620b1a16aSDavid Green; CHECKV6M-NEXT: cmp r3, #0 10720b1a16aSDavid Green; CHECKV6M-NEXT: mov r3, r0 10820b1a16aSDavid Green; CHECKV6M-NEXT: blt .LBB1_7 109d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 11020b1a16aSDavid Green; CHECKV6M-NEXT: cmp r1, #0 111d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB1_8 11220b1a16aSDavid Green; CHECKV6M-NEXT: .LBB1_3: @ %then 11320b1a16aSDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 11420b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 11520b1a16aSDavid Green; CHECKV6M-NEXT: .LBB1_4: @ %else 11620b1a16aSDavid Green; CHECKV6M-NEXT: cmp r3, #0 11720b1a16aSDavid Green; CHECKV6M-NEXT: bge .LBB1_6 11820b1a16aSDavid Green; CHECKV6M-NEXT: @ %bb.5: @ %else 11920b1a16aSDavid Green; CHECKV6M-NEXT: mov r0, r2 12020b1a16aSDavid Green; CHECKV6M-NEXT: .LBB1_6: @ %else 12120b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 12220b1a16aSDavid Green; CHECKV6M-NEXT: .LBB1_7: @ %then 12320b1a16aSDavid Green; CHECKV6M-NEXT: mov r3, r2 12420b1a16aSDavid Green; CHECKV6M-NEXT: cmp r1, #0 12520b1a16aSDavid Green; CHECKV6M-NEXT: bge .LBB1_3 12620b1a16aSDavid Green; CHECKV6M-NEXT: .LBB1_8: @ %then 12720b1a16aSDavid Green; CHECKV6M-NEXT: mov r0, r2 12820b1a16aSDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 12920b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 130d6482df6SDavid Green; 131d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_sgt_m1: 132d6482df6SDavid Green; CHECKV7M: @ %bb.0: 13320b1a16aSDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #8] 134d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 13520b1a16aSDavid Green; CHECKV7M-NEXT: ldrd r2, r0, [sp] 136d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB1_2 137d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 13820b1a16aSDavid Green; CHECKV7M-NEXT: cmp.w r3, #-1 13920b1a16aSDavid Green; CHECKV7M-NEXT: mov r3, r0 14020b1a16aSDavid Green; CHECKV7M-NEXT: it gt 14120b1a16aSDavid Green; CHECKV7M-NEXT: movgt r3, r2 14220b1a16aSDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 14320b1a16aSDavid Green; CHECKV7M-NEXT: it gt 14420b1a16aSDavid Green; CHECKV7M-NEXT: movgt r0, r2 14520b1a16aSDavid Green; CHECKV7M-NEXT: add r0, r3 14620b1a16aSDavid Green; CHECKV7M-NEXT: bx lr 147d6482df6SDavid Green; CHECKV7M-NEXT: .LBB1_2: @ %else 14820b1a16aSDavid Green; CHECKV7M-NEXT: cmp.w r3, #-1 14920b1a16aSDavid Green; CHECKV7M-NEXT: it gt 15020b1a16aSDavid Green; CHECKV7M-NEXT: movgt r0, r2 15120b1a16aSDavid Green; CHECKV7M-NEXT: bx lr 152d6482df6SDavid Green; 153d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_sgt_m1: 154d6482df6SDavid Green; CHECKV7A: @ %bb.0: 15520b1a16aSDavid Green; CHECKV7A-NEXT: ldr r2, [sp, #8] 15620b1a16aSDavid Green; CHECKV7A-NEXT: ldrd r12, r0, [sp] 15720b1a16aSDavid Green; CHECKV7A-NEXT: lsls r2, r2, #31 158d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB1_2 159d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 16020b1a16aSDavid Green; CHECKV7A-NEXT: cmp.w r3, #-1 161d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 16220b1a16aSDavid Green; CHECKV7A-NEXT: it gt 16320b1a16aSDavid Green; CHECKV7A-NEXT: movgt r2, r12 16420b1a16aSDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 16520b1a16aSDavid Green; CHECKV7A-NEXT: it gt 16620b1a16aSDavid Green; CHECKV7A-NEXT: movgt r0, r12 167d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 16820b1a16aSDavid Green; CHECKV7A-NEXT: bx lr 169d6482df6SDavid Green; CHECKV7A-NEXT: .LBB1_2: @ %else 17020b1a16aSDavid Green; CHECKV7A-NEXT: cmp.w r3, #-1 17120b1a16aSDavid Green; CHECKV7A-NEXT: it gt 17220b1a16aSDavid Green; CHECKV7A-NEXT: movgt r0, r12 17320b1a16aSDavid Green; CHECKV7A-NEXT: bx lr 174d6482df6SDavid Green br i1 %c, label %then, label %else 175d6482df6SDavid Greenthen: 176d6482df6SDavid Green %c1 = icmp sgt i64 %x, -1 177d6482df6SDavid Green %c2 = icmp sgt i64 %y, -1 178d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 179d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 180d6482df6SDavid Green %r = add i32 %s1, %s2 181d6482df6SDavid Green ret i32 %r 182d6482df6SDavid Greenelse: 183d6482df6SDavid Green %c3 = icmp sgt i64 %y, -1 184d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 185d6482df6SDavid Green ret i32 %s3 186d6482df6SDavid Green} 187d6482df6SDavid Green 188d6482df6SDavid Greendefine i32 @icmp32_sge_0(i32 %x, i32 %y, i32 %a, i32 %b, i1 %c) { 189d6482df6SDavid Green; CHECKV6M-LABEL: icmp32_sge_0: 190d6482df6SDavid Green; CHECKV6M: @ %bb.0: 191d6482df6SDavid Green; CHECKV6M-NEXT: .save {r4, lr} 192d6482df6SDavid Green; CHECKV6M-NEXT: push {r4, lr} 193d6482df6SDavid Green; CHECKV6M-NEXT: ldr r4, [sp, #8] 194d6482df6SDavid Green; CHECKV6M-NEXT: lsls r4, r4, #31 195d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB2_4 196d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 197d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 198d6482df6SDavid Green; CHECKV6M-NEXT: mov r1, r2 199d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB2_7 200d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 201d6482df6SDavid Green; CHECKV6M-NEXT: cmp r0, #0 202d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB2_8 203d6482df6SDavid Green; CHECKV6M-NEXT: .LBB2_3: @ %then 204d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r2, r1 205d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 206d6482df6SDavid Green; CHECKV6M-NEXT: .LBB2_4: @ %else 207d6482df6SDavid Green; CHECKV6M-NEXT: cmp r0, #0 208d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB2_6 209d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.5: @ %else 210d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r3 211d6482df6SDavid Green; CHECKV6M-NEXT: .LBB2_6: @ %else 212d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r2 213d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 214d6482df6SDavid Green; CHECKV6M-NEXT: .LBB2_7: @ %then 215d6482df6SDavid Green; CHECKV6M-NEXT: mov r1, r3 216d6482df6SDavid Green; CHECKV6M-NEXT: cmp r0, #0 217d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB2_3 218d6482df6SDavid Green; CHECKV6M-NEXT: .LBB2_8: @ %then 219d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r3 220d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r2, r1 221d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 222d6482df6SDavid Green; 223d6482df6SDavid Green; CHECKV7M-LABEL: icmp32_sge_0: 224d6482df6SDavid Green; CHECKV7M: @ %bb.0: 225d6482df6SDavid Green; CHECKV7M-NEXT: mov r12, r3 226d6482df6SDavid Green; CHECKV7M-NEXT: ldr r3, [sp] 227d6482df6SDavid Green; CHECKV7M-NEXT: lsls r3, r3, #31 228d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB2_2 229d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 230d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 231d6482df6SDavid Green; CHECKV7M-NEXT: mov r1, r12 232d6482df6SDavid Green; CHECKV7M-NEXT: it gt 233d6482df6SDavid Green; CHECKV7M-NEXT: movgt r1, r2 234d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r0, #-1 235d6482df6SDavid Green; CHECKV7M-NEXT: it gt 236d6482df6SDavid Green; CHECKV7M-NEXT: movgt r12, r2 237d6482df6SDavid Green; CHECKV7M-NEXT: add.w r0, r12, r1 238d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 239d6482df6SDavid Green; CHECKV7M-NEXT: .LBB2_2: @ %else 240d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r0, #-1 241d6482df6SDavid Green; CHECKV7M-NEXT: it gt 242d6482df6SDavid Green; CHECKV7M-NEXT: movgt r12, r2 243d6482df6SDavid Green; CHECKV7M-NEXT: mov r0, r12 244d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 245d6482df6SDavid Green; 246d6482df6SDavid Green; CHECKV7A-LABEL: icmp32_sge_0: 247d6482df6SDavid Green; CHECKV7A: @ %bb.0: 248d6482df6SDavid Green; CHECKV7A-NEXT: mov r12, r3 249d6482df6SDavid Green; CHECKV7A-NEXT: ldr r3, [sp] 250d6482df6SDavid Green; CHECKV7A-NEXT: lsls r3, r3, #31 251d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB2_2 252d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 253d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 254d6482df6SDavid Green; CHECKV7A-NEXT: mov r1, r12 255d6482df6SDavid Green; CHECKV7A-NEXT: it gt 256d6482df6SDavid Green; CHECKV7A-NEXT: movgt r1, r2 257d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r0, #-1 258d6482df6SDavid Green; CHECKV7A-NEXT: it gt 259d6482df6SDavid Green; CHECKV7A-NEXT: movgt r12, r2 260d6482df6SDavid Green; CHECKV7A-NEXT: add.w r0, r12, r1 261d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 262d6482df6SDavid Green; CHECKV7A-NEXT: .LBB2_2: @ %else 263d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r0, #-1 264d6482df6SDavid Green; CHECKV7A-NEXT: it gt 265d6482df6SDavid Green; CHECKV7A-NEXT: movgt r12, r2 266d6482df6SDavid Green; CHECKV7A-NEXT: mov r0, r12 267d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 268d6482df6SDavid Green br i1 %c, label %then, label %else 269d6482df6SDavid Greenthen: 270d6482df6SDavid Green %c1 = icmp sge i32 %x, 0 271d6482df6SDavid Green %c2 = icmp sge i32 %y, 0 272d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 273d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 274d6482df6SDavid Green %r = add i32 %s1, %s2 275d6482df6SDavid Green ret i32 %r 276d6482df6SDavid Greenelse: 277d6482df6SDavid Green %c3 = icmp sge i32 %x, 0 278d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 279d6482df6SDavid Green ret i32 %s3 280d6482df6SDavid Green} 281d6482df6SDavid Green 282d6482df6SDavid Greendefine i32 @icmp32_sgt_m1(i32 %x, i32 %y, i32 %a, i32 %b, i1 %c) { 283d6482df6SDavid Green; CHECKV6M-LABEL: icmp32_sgt_m1: 284d6482df6SDavid Green; CHECKV6M: @ %bb.0: 285d6482df6SDavid Green; CHECKV6M-NEXT: .save {r4, lr} 286d6482df6SDavid Green; CHECKV6M-NEXT: push {r4, lr} 287d6482df6SDavid Green; CHECKV6M-NEXT: ldr r4, [sp, #8] 288d6482df6SDavid Green; CHECKV6M-NEXT: lsls r4, r4, #31 289d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB3_4 290d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 291d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 292d6482df6SDavid Green; CHECKV6M-NEXT: mov r1, r2 293d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB3_7 294d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 295d6482df6SDavid Green; CHECKV6M-NEXT: cmp r0, #0 296d6482df6SDavid Green; CHECKV6M-NEXT: blt .LBB3_8 297d6482df6SDavid Green; CHECKV6M-NEXT: .LBB3_3: @ %then 298d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r2, r1 299d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 300d6482df6SDavid Green; CHECKV6M-NEXT: .LBB3_4: @ %else 301d6482df6SDavid Green; CHECKV6M-NEXT: cmp r1, #0 302d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB3_6 303d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.5: @ %else 304d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r3 305d6482df6SDavid Green; CHECKV6M-NEXT: .LBB3_6: @ %else 306d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r2 307d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 308d6482df6SDavid Green; CHECKV6M-NEXT: .LBB3_7: @ %then 309d6482df6SDavid Green; CHECKV6M-NEXT: mov r1, r3 310d6482df6SDavid Green; CHECKV6M-NEXT: cmp r0, #0 311d6482df6SDavid Green; CHECKV6M-NEXT: bge .LBB3_3 312d6482df6SDavid Green; CHECKV6M-NEXT: .LBB3_8: @ %then 313d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r3 314d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r2, r1 315d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, pc} 316d6482df6SDavid Green; 317d6482df6SDavid Green; CHECKV7M-LABEL: icmp32_sgt_m1: 318d6482df6SDavid Green; CHECKV7M: @ %bb.0: 319d6482df6SDavid Green; CHECKV7M-NEXT: mov r12, r3 320d6482df6SDavid Green; CHECKV7M-NEXT: ldr r3, [sp] 321d6482df6SDavid Green; CHECKV7M-NEXT: lsls r3, r3, #31 322d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB3_2 323d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 324d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 325d6482df6SDavid Green; CHECKV7M-NEXT: mov r1, r12 326d6482df6SDavid Green; CHECKV7M-NEXT: it gt 327d6482df6SDavid Green; CHECKV7M-NEXT: movgt r1, r2 328d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r0, #-1 329d6482df6SDavid Green; CHECKV7M-NEXT: it gt 330d6482df6SDavid Green; CHECKV7M-NEXT: movgt r12, r2 331d6482df6SDavid Green; CHECKV7M-NEXT: add.w r0, r12, r1 332d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 333d6482df6SDavid Green; CHECKV7M-NEXT: .LBB3_2: @ %else 334d6482df6SDavid Green; CHECKV7M-NEXT: cmp.w r1, #-1 335d6482df6SDavid Green; CHECKV7M-NEXT: it gt 336d6482df6SDavid Green; CHECKV7M-NEXT: movgt r12, r2 337d6482df6SDavid Green; CHECKV7M-NEXT: mov r0, r12 338d6482df6SDavid Green; CHECKV7M-NEXT: bx lr 339d6482df6SDavid Green; 340d6482df6SDavid Green; CHECKV7A-LABEL: icmp32_sgt_m1: 341d6482df6SDavid Green; CHECKV7A: @ %bb.0: 342d6482df6SDavid Green; CHECKV7A-NEXT: mov r12, r3 343d6482df6SDavid Green; CHECKV7A-NEXT: ldr r3, [sp] 344d6482df6SDavid Green; CHECKV7A-NEXT: lsls r3, r3, #31 345d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB3_2 346d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 347d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 348d6482df6SDavid Green; CHECKV7A-NEXT: mov r1, r12 349d6482df6SDavid Green; CHECKV7A-NEXT: it gt 350d6482df6SDavid Green; CHECKV7A-NEXT: movgt r1, r2 351d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r0, #-1 352d6482df6SDavid Green; CHECKV7A-NEXT: it gt 353d6482df6SDavid Green; CHECKV7A-NEXT: movgt r12, r2 354d6482df6SDavid Green; CHECKV7A-NEXT: add.w r0, r12, r1 355d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 356d6482df6SDavid Green; CHECKV7A-NEXT: .LBB3_2: @ %else 357d6482df6SDavid Green; CHECKV7A-NEXT: cmp.w r1, #-1 358d6482df6SDavid Green; CHECKV7A-NEXT: it gt 359d6482df6SDavid Green; CHECKV7A-NEXT: movgt r12, r2 360d6482df6SDavid Green; CHECKV7A-NEXT: mov r0, r12 361d6482df6SDavid Green; CHECKV7A-NEXT: bx lr 362d6482df6SDavid Green br i1 %c, label %then, label %else 363d6482df6SDavid Greenthen: 364d6482df6SDavid Green %c1 = icmp sgt i32 %x, -1 365d6482df6SDavid Green %c2 = icmp sgt i32 %y, -1 366d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 367d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 368d6482df6SDavid Green %r = add i32 %s1, %s2 369d6482df6SDavid Green ret i32 %r 370d6482df6SDavid Greenelse: 371d6482df6SDavid Green %c3 = icmp sgt i32 %y, -1 372d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 373d6482df6SDavid Green ret i32 %s3 374d6482df6SDavid Green} 375d6482df6SDavid Green 376d6482df6SDavid Greendefine i32 @icmp64_sle_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 377d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_sle_m1: 378d6482df6SDavid Green; CHECKV6M: @ %bb.0: 37920b1a16aSDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #8] 380d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 38120b1a16aSDavid Green; CHECKV6M-NEXT: ldr r2, [sp, #4] 38220b1a16aSDavid Green; CHECKV6M-NEXT: ldr r0, [sp] 38320b1a16aSDavid Green; CHECKV6M-NEXT: beq .LBB4_4 384d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 38520b1a16aSDavid Green; CHECKV6M-NEXT: cmp r3, #0 38620b1a16aSDavid Green; CHECKV6M-NEXT: mov r3, r0 38720b1a16aSDavid Green; CHECKV6M-NEXT: bpl .LBB4_7 388d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 38920b1a16aSDavid Green; CHECKV6M-NEXT: cmp r1, #0 39020b1a16aSDavid Green; CHECKV6M-NEXT: bpl .LBB4_8 391d6482df6SDavid Green; CHECKV6M-NEXT: .LBB4_3: @ %then 39220b1a16aSDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 39320b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 39420b1a16aSDavid Green; CHECKV6M-NEXT: .LBB4_4: @ %else 39520b1a16aSDavid Green; CHECKV6M-NEXT: cmp r3, #0 39620b1a16aSDavid Green; CHECKV6M-NEXT: bmi .LBB4_6 39720b1a16aSDavid Green; CHECKV6M-NEXT: @ %bb.5: @ %else 39820b1a16aSDavid Green; CHECKV6M-NEXT: mov r0, r2 399d6482df6SDavid Green; CHECKV6M-NEXT: .LBB4_6: @ %else 40020b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 40120b1a16aSDavid Green; CHECKV6M-NEXT: .LBB4_7: @ %then 40220b1a16aSDavid Green; CHECKV6M-NEXT: mov r3, r2 40320b1a16aSDavid Green; CHECKV6M-NEXT: cmp r1, #0 40420b1a16aSDavid Green; CHECKV6M-NEXT: bmi .LBB4_3 40520b1a16aSDavid Green; CHECKV6M-NEXT: .LBB4_8: @ %then 40620b1a16aSDavid Green; CHECKV6M-NEXT: mov r0, r2 40720b1a16aSDavid Green; CHECKV6M-NEXT: adds r0, r0, r3 40820b1a16aSDavid Green; CHECKV6M-NEXT: bx lr 409d6482df6SDavid Green; 410d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_sle_m1: 411d6482df6SDavid Green; CHECKV7M: @ %bb.0: 41220b1a16aSDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #8] 413d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 41420b1a16aSDavid Green; CHECKV7M-NEXT: ldrd r2, r0, [sp] 415d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB4_2 416d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 41720b1a16aSDavid Green; CHECKV7M-NEXT: cmp r3, #0 41820b1a16aSDavid Green; CHECKV7M-NEXT: mov r3, r0 41920b1a16aSDavid Green; CHECKV7M-NEXT: it mi 42020b1a16aSDavid Green; CHECKV7M-NEXT: movmi r3, r2 42120b1a16aSDavid Green; CHECKV7M-NEXT: cmp r1, #0 42220b1a16aSDavid Green; CHECKV7M-NEXT: it mi 42320b1a16aSDavid Green; CHECKV7M-NEXT: movmi r0, r2 42420b1a16aSDavid Green; CHECKV7M-NEXT: add r0, r3 42520b1a16aSDavid Green; CHECKV7M-NEXT: bx lr 426d6482df6SDavid Green; CHECKV7M-NEXT: .LBB4_2: @ %else 42720b1a16aSDavid Green; CHECKV7M-NEXT: cmp r3, #0 42820b1a16aSDavid Green; CHECKV7M-NEXT: it mi 42920b1a16aSDavid Green; CHECKV7M-NEXT: movmi r0, r2 43020b1a16aSDavid Green; CHECKV7M-NEXT: bx lr 431d6482df6SDavid Green; 432d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_sle_m1: 433d6482df6SDavid Green; CHECKV7A: @ %bb.0: 43420b1a16aSDavid Green; CHECKV7A-NEXT: ldr r2, [sp, #8] 43520b1a16aSDavid Green; CHECKV7A-NEXT: ldrd r12, r0, [sp] 43620b1a16aSDavid Green; CHECKV7A-NEXT: lsls r2, r2, #31 437d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB4_2 438d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 43920b1a16aSDavid Green; CHECKV7A-NEXT: cmp r3, #0 440d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 44120b1a16aSDavid Green; CHECKV7A-NEXT: it mi 44220b1a16aSDavid Green; CHECKV7A-NEXT: movmi r2, r12 44320b1a16aSDavid Green; CHECKV7A-NEXT: cmp r1, #0 44420b1a16aSDavid Green; CHECKV7A-NEXT: it mi 44520b1a16aSDavid Green; CHECKV7A-NEXT: movmi r0, r12 446d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 44720b1a16aSDavid Green; CHECKV7A-NEXT: bx lr 448d6482df6SDavid Green; CHECKV7A-NEXT: .LBB4_2: @ %else 44920b1a16aSDavid Green; CHECKV7A-NEXT: cmp r3, #0 45020b1a16aSDavid Green; CHECKV7A-NEXT: it mi 45120b1a16aSDavid Green; CHECKV7A-NEXT: movmi r0, r12 45220b1a16aSDavid Green; CHECKV7A-NEXT: bx lr 453d6482df6SDavid Green br i1 %c, label %then, label %else 454d6482df6SDavid Greenthen: 455d6482df6SDavid Green %c1 = icmp sle i64 %x, -1 456d6482df6SDavid Green %c2 = icmp sle i64 %y, -1 457d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 458d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 459d6482df6SDavid Green %r = add i32 %s1, %s2 460d6482df6SDavid Green ret i32 %r 461d6482df6SDavid Greenelse: 462d6482df6SDavid Green %c3 = icmp sle i64 %y, -1 463d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 464d6482df6SDavid Green ret i32 %s3 465d6482df6SDavid Green} 466d6482df6SDavid Green 467d6482df6SDavid Greendefine i32 @icmp64_ule_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 468d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_ule_m1: 469d6482df6SDavid Green; CHECKV6M: @ %bb.0: 470d6482df6SDavid Green; CHECKV6M-NEXT: .save {r4, r5, r6, r7, lr} 471d6482df6SDavid Green; CHECKV6M-NEXT: push {r4, r5, r6, r7, lr} 472d6482df6SDavid Green; CHECKV6M-NEXT: mov r4, r0 473d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #28] 474d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 475d6482df6SDavid Green; CHECKV6M-NEXT: ldr r6, .LCPI5_0 476d6482df6SDavid Green; CHECKV6M-NEXT: ldr r5, [sp, #24] 477d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #20] 478d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB5_6 479d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 480d6482df6SDavid Green; CHECKV6M-NEXT: movs r7, #0 481d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r2, r6 482d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r3, r7 483d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r0 484d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB5_3 485d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 486d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r5 487d6482df6SDavid Green; CHECKV6M-NEXT: .LBB5_3: @ %then 488d6482df6SDavid Green; CHECKV6M-NEXT: subs r3, r4, r6 489d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r1, r7 490d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB5_5 491d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.4: @ %then 492d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 493d6482df6SDavid Green; CHECKV6M-NEXT: .LBB5_5: @ %then 494d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r0, r2 495d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 496d6482df6SDavid Green; CHECKV6M-NEXT: .LBB5_6: @ %else 497d6482df6SDavid Green; CHECKV6M-NEXT: movs r1, #0 498d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r2, r6 499d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r3, r1 500d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB5_8 501d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.7: @ %else 502d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 503d6482df6SDavid Green; CHECKV6M-NEXT: .LBB5_8: @ %else 504d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 505d6482df6SDavid Green; CHECKV6M-NEXT: .p2align 2 506d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.9: 507d6482df6SDavid Green; CHECKV6M-NEXT: .LCPI5_0: 508d6482df6SDavid Green; CHECKV6M-NEXT: .long 131073 @ 0x20001 509d6482df6SDavid Green; 510d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_ule_m1: 511d6482df6SDavid Green; CHECKV7M: @ %bb.0: 512d6482df6SDavid Green; CHECKV7M-NEXT: .save {r4, lr} 513d6482df6SDavid Green; CHECKV7M-NEXT: push {r4, lr} 514d6482df6SDavid Green; CHECKV7M-NEXT: mov r12, r0 515d6482df6SDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #16] 516d6482df6SDavid Green; CHECKV7M-NEXT: movs r4, #1 517d6482df6SDavid Green; CHECKV7M-NEXT: movt r4, #2 518d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 519d6482df6SDavid Green; CHECKV7M-NEXT: ldrd lr, r0, [sp, #8] 520d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB5_2 521d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 522d6482df6SDavid Green; CHECKV7M-NEXT: subs r2, r2, r4 523d6482df6SDavid Green; CHECKV7M-NEXT: sbcs r2, r3, #0 524d6482df6SDavid Green; CHECKV7M-NEXT: mov r2, r0 525d6482df6SDavid Green; CHECKV7M-NEXT: it lo 526d6482df6SDavid Green; CHECKV7M-NEXT: movlo r2, lr 527d6482df6SDavid Green; CHECKV7M-NEXT: subs.w r3, r12, r4 528d6482df6SDavid Green; CHECKV7M-NEXT: sbcs r1, r1, #0 529d6482df6SDavid Green; CHECKV7M-NEXT: it lo 530d6482df6SDavid Green; CHECKV7M-NEXT: movlo r0, lr 531d6482df6SDavid Green; CHECKV7M-NEXT: add r0, r2 532d6482df6SDavid Green; CHECKV7M-NEXT: pop {r4, pc} 533d6482df6SDavid Green; CHECKV7M-NEXT: .LBB5_2: @ %else 534d6482df6SDavid Green; CHECKV7M-NEXT: subs r1, r2, r4 535d6482df6SDavid Green; CHECKV7M-NEXT: sbcs r1, r3, #0 536d6482df6SDavid Green; CHECKV7M-NEXT: it lo 537d6482df6SDavid Green; CHECKV7M-NEXT: movlo r0, lr 538d6482df6SDavid Green; CHECKV7M-NEXT: pop {r4, pc} 539d6482df6SDavid Green; 540d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_ule_m1: 541d6482df6SDavid Green; CHECKV7A: @ %bb.0: 542d6482df6SDavid Green; CHECKV7A-NEXT: .save {r4, lr} 543d6482df6SDavid Green; CHECKV7A-NEXT: push {r4, lr} 544d6482df6SDavid Green; CHECKV7A-NEXT: ldr r4, [sp, #16] 545d6482df6SDavid Green; CHECKV7A-NEXT: mov r12, r0 546d6482df6SDavid Green; CHECKV7A-NEXT: ldrd lr, r0, [sp, #8] 547d6482df6SDavid Green; CHECKV7A-NEXT: lsls r4, r4, #31 548d6482df6SDavid Green; CHECKV7A-NEXT: movw r4, #1 549d6482df6SDavid Green; CHECKV7A-NEXT: movt r4, #2 550d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB5_2 551d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 552d6482df6SDavid Green; CHECKV7A-NEXT: subs r2, r2, r4 553d6482df6SDavid Green; CHECKV7A-NEXT: sbcs r2, r3, #0 554d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 555d6482df6SDavid Green; CHECKV7A-NEXT: it lo 556d6482df6SDavid Green; CHECKV7A-NEXT: movlo r2, lr 557d6482df6SDavid Green; CHECKV7A-NEXT: subs.w r3, r12, r4 558d6482df6SDavid Green; CHECKV7A-NEXT: sbcs r1, r1, #0 559d6482df6SDavid Green; CHECKV7A-NEXT: it lo 560d6482df6SDavid Green; CHECKV7A-NEXT: movlo r0, lr 561d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 562d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, pc} 563d6482df6SDavid Green; CHECKV7A-NEXT: .LBB5_2: @ %else 564d6482df6SDavid Green; CHECKV7A-NEXT: subs r1, r2, r4 565d6482df6SDavid Green; CHECKV7A-NEXT: sbcs r1, r3, #0 566d6482df6SDavid Green; CHECKV7A-NEXT: it lo 567d6482df6SDavid Green; CHECKV7A-NEXT: movlo r0, lr 568d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, pc} 569d6482df6SDavid Green br i1 %c, label %then, label %else 570d6482df6SDavid Greenthen: 571d6482df6SDavid Green %c1 = icmp ult i64 %x, 131073 572d6482df6SDavid Green %c2 = icmp ult i64 %y, 131073 573d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 574d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 575d6482df6SDavid Green %r = add i32 %s1, %s2 576d6482df6SDavid Green ret i32 %r 577d6482df6SDavid Greenelse: 578d6482df6SDavid Green %c3 = icmp ult i64 %y, 131073 579d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 580d6482df6SDavid Green ret i32 %s3 581d6482df6SDavid Green} 582d6482df6SDavid Green 583d6482df6SDavid Greendefine i32 @icmp64_uge_m2(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 584d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_uge_m2: 585d6482df6SDavid Green; CHECKV6M: @ %bb.0: 586d6482df6SDavid Green; CHECKV6M-NEXT: .save {r4, r5, r6, r7, lr} 587d6482df6SDavid Green; CHECKV6M-NEXT: push {r4, r5, r6, r7, lr} 588d6482df6SDavid Green; CHECKV6M-NEXT: mov r4, r0 589d6482df6SDavid Green; CHECKV6M-NEXT: movs r0, #1 590d6482df6SDavid Green; CHECKV6M-NEXT: lsls r6, r0, #17 591d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #28] 592d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 593d6482df6SDavid Green; CHECKV6M-NEXT: ldr r5, [sp, #24] 594d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #20] 595d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB6_6 596d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 597d6482df6SDavid Green; CHECKV6M-NEXT: movs r7, #0 598d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r2, r6 599d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r3, r7 600d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r0 601d6482df6SDavid Green; CHECKV6M-NEXT: bhs .LBB6_3 602d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 603d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r5 604d6482df6SDavid Green; CHECKV6M-NEXT: .LBB6_3: @ %then 605d6482df6SDavid Green; CHECKV6M-NEXT: subs r3, r4, r6 606d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r1, r7 607d6482df6SDavid Green; CHECKV6M-NEXT: bhs .LBB6_5 608d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.4: @ %then 609d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 610d6482df6SDavid Green; CHECKV6M-NEXT: .LBB6_5: @ %then 611d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r0, r2 612d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 613d6482df6SDavid Green; CHECKV6M-NEXT: .LBB6_6: @ %else 614d6482df6SDavid Green; CHECKV6M-NEXT: movs r1, #0 615d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r2, r6 616d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r3, r1 617d6482df6SDavid Green; CHECKV6M-NEXT: bhs .LBB6_8 618d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.7: @ %else 619d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 620d6482df6SDavid Green; CHECKV6M-NEXT: .LBB6_8: @ %else 621d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 622d6482df6SDavid Green; 623d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_uge_m2: 624d6482df6SDavid Green; CHECKV7M: @ %bb.0: 625d6482df6SDavid Green; CHECKV7M-NEXT: .save {r7, lr} 626d6482df6SDavid Green; CHECKV7M-NEXT: push {r7, lr} 627d6482df6SDavid Green; CHECKV7M-NEXT: mov r12, r0 628d6482df6SDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #16] 629d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 630d6482df6SDavid Green; CHECKV7M-NEXT: ldrd lr, r0, [sp, #8] 631d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB6_2 632d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 633*945a1468SFilipp Zhinkin; CHECKV7M-NEXT: orrs.w r2, r3, r2, lsr #17 634d6482df6SDavid Green; CHECKV7M-NEXT: mov r2, r0 635d6482df6SDavid Green; CHECKV7M-NEXT: it ne 636d6482df6SDavid Green; CHECKV7M-NEXT: movne r2, lr 637*945a1468SFilipp Zhinkin; CHECKV7M-NEXT: orrs.w r1, r1, r12, lsr #17 638d6482df6SDavid Green; CHECKV7M-NEXT: it ne 639d6482df6SDavid Green; CHECKV7M-NEXT: movne r0, lr 640d6482df6SDavid Green; CHECKV7M-NEXT: add r0, r2 641d6482df6SDavid Green; CHECKV7M-NEXT: pop {r7, pc} 642d6482df6SDavid Green; CHECKV7M-NEXT: .LBB6_2: @ %else 643*945a1468SFilipp Zhinkin; CHECKV7M-NEXT: orrs.w r1, r3, r2, lsr #17 644d6482df6SDavid Green; CHECKV7M-NEXT: it ne 645d6482df6SDavid Green; CHECKV7M-NEXT: movne r0, lr 646d6482df6SDavid Green; CHECKV7M-NEXT: pop {r7, pc} 647d6482df6SDavid Green; 648d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_uge_m2: 649d6482df6SDavid Green; CHECKV7A: @ %bb.0: 650d6482df6SDavid Green; CHECKV7A-NEXT: .save {r4, lr} 651d6482df6SDavid Green; CHECKV7A-NEXT: push {r4, lr} 652d6482df6SDavid Green; CHECKV7A-NEXT: ldr r4, [sp, #16] 653d6482df6SDavid Green; CHECKV7A-NEXT: mov r12, r0 654d6482df6SDavid Green; CHECKV7A-NEXT: ldrd lr, r0, [sp, #8] 655d6482df6SDavid Green; CHECKV7A-NEXT: lsls r4, r4, #31 656d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB6_2 657d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 658*945a1468SFilipp Zhinkin; CHECKV7A-NEXT: orrs.w r2, r3, r2, lsr #17 659d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 660d6482df6SDavid Green; CHECKV7A-NEXT: it ne 661d6482df6SDavid Green; CHECKV7A-NEXT: movne r2, lr 662*945a1468SFilipp Zhinkin; CHECKV7A-NEXT: orrs.w r1, r1, r12, lsr #17 663d6482df6SDavid Green; CHECKV7A-NEXT: it ne 664d6482df6SDavid Green; CHECKV7A-NEXT: movne r0, lr 665d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 666d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, pc} 667d6482df6SDavid Green; CHECKV7A-NEXT: .LBB6_2: @ %else 668*945a1468SFilipp Zhinkin; CHECKV7A-NEXT: orrs.w r1, r3, r2, lsr #17 669d6482df6SDavid Green; CHECKV7A-NEXT: it ne 670d6482df6SDavid Green; CHECKV7A-NEXT: movne r0, lr 671d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, pc} 672d6482df6SDavid Green br i1 %c, label %then, label %else 673d6482df6SDavid Greenthen: 674d6482df6SDavid Green %c1 = icmp uge i64 %x, 131072 675d6482df6SDavid Green %c2 = icmp uge i64 %y, 131072 676d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 677d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 678d6482df6SDavid Green %r = add i32 %s1, %s2 679d6482df6SDavid Green ret i32 %r 680d6482df6SDavid Greenelse: 681d6482df6SDavid Green %c3 = icmp uge i64 %y, 131072 682d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 683d6482df6SDavid Green ret i32 %s3 684d6482df6SDavid Green} 685d6482df6SDavid Green 686d6482df6SDavid Greendefine i32 @icmp64_ugt_m1(i64 %x, i64 %y, i32 %a, i32 %b, i1 %c) { 687d6482df6SDavid Green; CHECKV6M-LABEL: icmp64_ugt_m1: 688d6482df6SDavid Green; CHECKV6M: @ %bb.0: 689d6482df6SDavid Green; CHECKV6M-NEXT: .save {r4, r5, r6, r7, lr} 690d6482df6SDavid Green; CHECKV6M-NEXT: push {r4, r5, r6, r7, lr} 691d6482df6SDavid Green; CHECKV6M-NEXT: mov r4, r0 692d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #28] 693d6482df6SDavid Green; CHECKV6M-NEXT: lsls r0, r0, #31 694d6482df6SDavid Green; CHECKV6M-NEXT: ldr r6, .LCPI7_0 695d6482df6SDavid Green; CHECKV6M-NEXT: ldr r5, [sp, #24] 696d6482df6SDavid Green; CHECKV6M-NEXT: ldr r0, [sp, #20] 697d6482df6SDavid Green; CHECKV6M-NEXT: beq .LBB7_6 698d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.1: @ %then 699d6482df6SDavid Green; CHECKV6M-NEXT: movs r7, #0 700d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r6, r2 701d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r7 702d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r2, r3 703d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r0 704d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB7_3 705d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.2: @ %then 706d6482df6SDavid Green; CHECKV6M-NEXT: mov r2, r5 707d6482df6SDavid Green; CHECKV6M-NEXT: .LBB7_3: @ %then 708d6482df6SDavid Green; CHECKV6M-NEXT: subs r3, r6, r4 709d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r7, r1 710d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB7_5 711d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.4: @ %then 712d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 713d6482df6SDavid Green; CHECKV6M-NEXT: .LBB7_5: @ %then 714d6482df6SDavid Green; CHECKV6M-NEXT: adds r0, r0, r2 715d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 716d6482df6SDavid Green; CHECKV6M-NEXT: .LBB7_6: @ %else 717d6482df6SDavid Green; CHECKV6M-NEXT: movs r1, #0 718d6482df6SDavid Green; CHECKV6M-NEXT: subs r2, r6, r2 719d6482df6SDavid Green; CHECKV6M-NEXT: sbcs r1, r3 720d6482df6SDavid Green; CHECKV6M-NEXT: blo .LBB7_8 721d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.7: @ %else 722d6482df6SDavid Green; CHECKV6M-NEXT: mov r0, r5 723d6482df6SDavid Green; CHECKV6M-NEXT: .LBB7_8: @ %else 724d6482df6SDavid Green; CHECKV6M-NEXT: pop {r4, r5, r6, r7, pc} 725d6482df6SDavid Green; CHECKV6M-NEXT: .p2align 2 726d6482df6SDavid Green; CHECKV6M-NEXT: @ %bb.9: 727d6482df6SDavid Green; CHECKV6M-NEXT: .LCPI7_0: 728d6482df6SDavid Green; CHECKV6M-NEXT: .long 131073 @ 0x20001 729d6482df6SDavid Green; 730d6482df6SDavid Green; CHECKV7M-LABEL: icmp64_ugt_m1: 731d6482df6SDavid Green; CHECKV7M: @ %bb.0: 732d6482df6SDavid Green; CHECKV7M-NEXT: .save {r4, r5, r7, lr} 733d6482df6SDavid Green; CHECKV7M-NEXT: push {r4, r5, r7, lr} 734d6482df6SDavid Green; CHECKV7M-NEXT: mov r12, r0 735d6482df6SDavid Green; CHECKV7M-NEXT: ldr r0, [sp, #24] 736d6482df6SDavid Green; CHECKV7M-NEXT: movs r4, #1 737d6482df6SDavid Green; CHECKV7M-NEXT: movt r4, #2 738d6482df6SDavid Green; CHECKV7M-NEXT: lsls r0, r0, #31 739d6482df6SDavid Green; CHECKV7M-NEXT: ldrd lr, r0, [sp, #16] 740d6482df6SDavid Green; CHECKV7M-NEXT: beq .LBB7_2 741d6482df6SDavid Green; CHECKV7M-NEXT: @ %bb.1: @ %then 742d6482df6SDavid Green; CHECKV7M-NEXT: subs r2, r4, r2 743d6482df6SDavid Green; CHECKV7M-NEXT: mov.w r5, #0 744d6482df6SDavid Green; CHECKV7M-NEXT: sbcs.w r2, r5, r3 745d6482df6SDavid Green; CHECKV7M-NEXT: mov r2, r0 746d6482df6SDavid Green; CHECKV7M-NEXT: it lo 747d6482df6SDavid Green; CHECKV7M-NEXT: movlo r2, lr 748d6482df6SDavid Green; CHECKV7M-NEXT: subs.w r3, r4, r12 749d6482df6SDavid Green; CHECKV7M-NEXT: sbcs.w r1, r5, r1 750d6482df6SDavid Green; CHECKV7M-NEXT: it lo 751d6482df6SDavid Green; CHECKV7M-NEXT: movlo r0, lr 752d6482df6SDavid Green; CHECKV7M-NEXT: add r0, r2 753d6482df6SDavid Green; CHECKV7M-NEXT: pop {r4, r5, r7, pc} 754d6482df6SDavid Green; CHECKV7M-NEXT: .LBB7_2: @ %else 755d6482df6SDavid Green; CHECKV7M-NEXT: movs r1, #0 756d6482df6SDavid Green; CHECKV7M-NEXT: subs r2, r4, r2 757d6482df6SDavid Green; CHECKV7M-NEXT: sbcs r1, r3 758d6482df6SDavid Green; CHECKV7M-NEXT: it lo 759d6482df6SDavid Green; CHECKV7M-NEXT: movlo r0, lr 760d6482df6SDavid Green; CHECKV7M-NEXT: pop {r4, r5, r7, pc} 761d6482df6SDavid Green; 762d6482df6SDavid Green; CHECKV7A-LABEL: icmp64_ugt_m1: 763d6482df6SDavid Green; CHECKV7A: @ %bb.0: 764d6482df6SDavid Green; CHECKV7A-NEXT: .save {r4, r5, r7, lr} 765d6482df6SDavid Green; CHECKV7A-NEXT: push {r4, r5, r7, lr} 766d6482df6SDavid Green; CHECKV7A-NEXT: ldr r4, [sp, #24] 767d6482df6SDavid Green; CHECKV7A-NEXT: mov r12, r0 768d6482df6SDavid Green; CHECKV7A-NEXT: ldrd lr, r0, [sp, #16] 769d6482df6SDavid Green; CHECKV7A-NEXT: lsls r4, r4, #31 770d6482df6SDavid Green; CHECKV7A-NEXT: movw r4, #1 771d6482df6SDavid Green; CHECKV7A-NEXT: movt r4, #2 772d6482df6SDavid Green; CHECKV7A-NEXT: beq .LBB7_2 773d6482df6SDavid Green; CHECKV7A-NEXT: @ %bb.1: @ %then 774d6482df6SDavid Green; CHECKV7A-NEXT: subs r2, r4, r2 775d6482df6SDavid Green; CHECKV7A-NEXT: mov.w r5, #0 776d6482df6SDavid Green; CHECKV7A-NEXT: sbcs.w r2, r5, r3 777d6482df6SDavid Green; CHECKV7A-NEXT: mov r2, r0 778d6482df6SDavid Green; CHECKV7A-NEXT: it lo 779d6482df6SDavid Green; CHECKV7A-NEXT: movlo r2, lr 780d6482df6SDavid Green; CHECKV7A-NEXT: subs.w r3, r4, r12 781d6482df6SDavid Green; CHECKV7A-NEXT: sbcs.w r1, r5, r1 782d6482df6SDavid Green; CHECKV7A-NEXT: it lo 783d6482df6SDavid Green; CHECKV7A-NEXT: movlo r0, lr 784d6482df6SDavid Green; CHECKV7A-NEXT: add r0, r2 785d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, r5, r7, pc} 786d6482df6SDavid Green; CHECKV7A-NEXT: .LBB7_2: @ %else 787d6482df6SDavid Green; CHECKV7A-NEXT: movs r1, #0 788d6482df6SDavid Green; CHECKV7A-NEXT: subs r2, r4, r2 789d6482df6SDavid Green; CHECKV7A-NEXT: sbcs r1, r3 790d6482df6SDavid Green; CHECKV7A-NEXT: it lo 791d6482df6SDavid Green; CHECKV7A-NEXT: movlo r0, lr 792d6482df6SDavid Green; CHECKV7A-NEXT: pop {r4, r5, r7, pc} 793d6482df6SDavid Green br i1 %c, label %then, label %else 794d6482df6SDavid Greenthen: 795d6482df6SDavid Green %c1 = icmp ugt i64 %x, 131073 796d6482df6SDavid Green %c2 = icmp ugt i64 %y, 131073 797d6482df6SDavid Green %s1 = select i1 %c1, i32 %a, i32 %b 798d6482df6SDavid Green %s2 = select i1 %c2, i32 %a, i32 %b 799d6482df6SDavid Green %r = add i32 %s1, %s2 800d6482df6SDavid Green ret i32 %r 801d6482df6SDavid Greenelse: 802d6482df6SDavid Green %c3 = icmp ugt i64 %y, 131073 803d6482df6SDavid Green %s3 = select i1 %c3, i32 %a, i32 %b 804d6482df6SDavid Green ret i32 %s3 805d6482df6SDavid Green} 806