1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=armv7-unknown-linux < %s | FileCheck --check-prefix=CHECK-ARM %s
3; RUN: llc -mtriple=thumbv6-unknown-linux < %s | FileCheck --check-prefix=CHECK-THUMB1 %s
4; RUN: llc -mtriple=thumbv7-unknown-linux < %s | FileCheck --check-prefix=CHECK-THUMB2 %s
5
6define i32 @test_slt1(i64 %a, i64 %b) {
7; CHECK-ARM-LABEL: test_slt1:
8; CHECK-ARM:       @ %bb.0: @ %entry
9; CHECK-ARM-NEXT:    subs r0, r0, r2
10; CHECK-ARM-NEXT:    mov r12, #2
11; CHECK-ARM-NEXT:    sbcs r0, r1, r3
12; CHECK-ARM-NEXT:    movwlt r12, #1
13; CHECK-ARM-NEXT:    mov r0, r12
14; CHECK-ARM-NEXT:    bx lr
15;
16; CHECK-THUMB1-LABEL: test_slt1:
17; CHECK-THUMB1:       @ %bb.0: @ %entry
18; CHECK-THUMB1-NEXT:    subs r0, r0, r2
19; CHECK-THUMB1-NEXT:    sbcs r1, r3
20; CHECK-THUMB1-NEXT:    bge .LBB0_2
21; CHECK-THUMB1-NEXT:  @ %bb.1: @ %bb1
22; CHECK-THUMB1-NEXT:    movs r0, #1
23; CHECK-THUMB1-NEXT:    bx lr
24; CHECK-THUMB1-NEXT:  .LBB0_2: @ %bb2
25; CHECK-THUMB1-NEXT:    movs r0, #2
26; CHECK-THUMB1-NEXT:    bx lr
27;
28; CHECK-THUMB2-LABEL: test_slt1:
29; CHECK-THUMB2:       @ %bb.0: @ %entry
30; CHECK-THUMB2-NEXT:    subs r0, r0, r2
31; CHECK-THUMB2-NEXT:    mov.w r12, #2
32; CHECK-THUMB2-NEXT:    sbcs.w r0, r1, r3
33; CHECK-THUMB2-NEXT:    it lt
34; CHECK-THUMB2-NEXT:    movlt.w r12, #1
35; CHECK-THUMB2-NEXT:    mov r0, r12
36; CHECK-THUMB2-NEXT:    bx lr
37entry:
38  %cmp = icmp slt i64 %a, %b
39  br i1 %cmp, label %bb1, label %bb2
40bb1:
41  ret i32 1
42bb2:
43  ret i32 2
44}
45
46define void @test_slt2(i64 %a, i64 %b) {
47; CHECK-ARM-LABEL: test_slt2:
48; CHECK-ARM:       @ %bb.0: @ %entry
49; CHECK-ARM-NEXT:    push {r11, lr}
50; CHECK-ARM-NEXT:    subs r0, r0, r2
51; CHECK-ARM-NEXT:    sbcs r0, r1, r3
52; CHECK-ARM-NEXT:    bge .LBB1_2
53; CHECK-ARM-NEXT:  @ %bb.1: @ %bb1
54; CHECK-ARM-NEXT:    bl f
55; CHECK-ARM-NEXT:    pop {r11, pc}
56; CHECK-ARM-NEXT:  .LBB1_2: @ %bb2
57; CHECK-ARM-NEXT:    bl g
58; CHECK-ARM-NEXT:    pop {r11, pc}
59;
60; CHECK-THUMB1-LABEL: test_slt2:
61; CHECK-THUMB1:       @ %bb.0: @ %entry
62; CHECK-THUMB1-NEXT:    push {r7, lr}
63; CHECK-THUMB1-NEXT:    subs r0, r0, r2
64; CHECK-THUMB1-NEXT:    sbcs r1, r3
65; CHECK-THUMB1-NEXT:    bge .LBB1_2
66; CHECK-THUMB1-NEXT:  @ %bb.1: @ %bb1
67; CHECK-THUMB1-NEXT:    bl f
68; CHECK-THUMB1-NEXT:    pop {r7, pc}
69; CHECK-THUMB1-NEXT:  .LBB1_2: @ %bb2
70; CHECK-THUMB1-NEXT:    bl g
71; CHECK-THUMB1-NEXT:    pop {r7, pc}
72;
73; CHECK-THUMB2-LABEL: test_slt2:
74; CHECK-THUMB2:       @ %bb.0: @ %entry
75; CHECK-THUMB2-NEXT:    push {r7, lr}
76; CHECK-THUMB2-NEXT:    subs r0, r0, r2
77; CHECK-THUMB2-NEXT:    sbcs.w r0, r1, r3
78; CHECK-THUMB2-NEXT:    bge .LBB1_2
79; CHECK-THUMB2-NEXT:  @ %bb.1: @ %bb1
80; CHECK-THUMB2-NEXT:    bl f
81; CHECK-THUMB2-NEXT:    pop {r7, pc}
82; CHECK-THUMB2-NEXT:  .LBB1_2: @ %bb2
83; CHECK-THUMB2-NEXT:    bl g
84; CHECK-THUMB2-NEXT:    pop {r7, pc}
85entry:
86  %cmp = icmp slt i64 %a, %b
87  br i1 %cmp, label %bb1, label %bb2
88bb1:
89  call void @f()
90  ret void
91bb2:
92  call void @g()
93  ret void
94}
95
96declare void @f()
97declare void @g()
98