xref: /llvm-project/llvm/test/CodeGen/ARM/consthoist-icmpimm.ll (revision 945a1468c922573a07b334a130d05f0ecca40926)
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