blob: 6d700997ada2a242286bde1cdd86333944075c73 [file] [log] [blame]
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=thumb-eabi -mcpu=cortex-m0 %s -verify-machineinstrs -o - | FileCheck %s
3
4define i32 @test1a(i32 %a, i32 %b) {
5; CHECK-LABEL: test1a:
6; CHECK: @ %bb.0: @ %entry
7; CHECK-NEXT: mov r2, r0
8; CHECK-NEXT: movs r0, #1
9; CHECK-NEXT: movs r3, #0
10; CHECK-NEXT: cmp r2, r1
11; CHECK-NEXT: bne .LBB0_2
12; CHECK-NEXT: @ %bb.1: @ %entry
13; CHECK-NEXT: mov r0, r3
14; CHECK-NEXT: .LBB0_2: @ %entry
15; CHECK-NEXT: bx lr
16entry:
17 %cmp = icmp ne i32 %a, %b
18 %cond = zext i1 %cmp to i32
19 ret i32 %cond
20}
21
22define i32 @test1b(i32 %a, i32 %b) {
23; CHECK-LABEL: test1b:
24; CHECK: @ %bb.0: @ %entry
25; CHECK-NEXT: mov r2, r0
26; CHECK-NEXT: movs r0, #1
27; CHECK-NEXT: movs r3, #0
28; CHECK-NEXT: cmp r2, r1
29; CHECK-NEXT: beq .LBB1_2
30; CHECK-NEXT: @ %bb.1: @ %entry
31; CHECK-NEXT: mov r0, r3
32; CHECK-NEXT: .LBB1_2: @ %entry
33; CHECK-NEXT: bx lr
34entry:
35 %cmp = icmp eq i32 %a, %b
36 %cond = zext i1 %cmp to i32
37 ret i32 %cond
38}
39
40define i32 @test2a(i32 %a, i32 %b) {
41; CHECK-LABEL: test2a:
42; CHECK: @ %bb.0: @ %entry
43; CHECK-NEXT: mov r2, r0
44; CHECK-NEXT: movs r0, #1
45; CHECK-NEXT: movs r3, #0
46; CHECK-NEXT: cmp r2, r1
47; CHECK-NEXT: beq .LBB2_2
48; CHECK-NEXT: @ %bb.1: @ %entry
49; CHECK-NEXT: mov r0, r3
50; CHECK-NEXT: .LBB2_2: @ %entry
51; CHECK-NEXT: bx lr
52entry:
53 %cmp = icmp eq i32 %a, %b
54 %cond = zext i1 %cmp to i32
55 ret i32 %cond
56}
57
58define i32 @test2b(i32 %a, i32 %b) {
59; CHECK-LABEL: test2b:
60; CHECK: @ %bb.0: @ %entry
61; CHECK-NEXT: mov r2, r0
62; CHECK-NEXT: movs r0, #1
63; CHECK-NEXT: movs r3, #0
64; CHECK-NEXT: cmp r2, r1
65; CHECK-NEXT: bne .LBB3_2
66; CHECK-NEXT: @ %bb.1: @ %entry
67; CHECK-NEXT: mov r0, r3
68; CHECK-NEXT: .LBB3_2: @ %entry
69; CHECK-NEXT: bx lr
70entry:
71 %cmp = icmp ne i32 %a, %b
72 %cond = zext i1 %cmp to i32
73 ret i32 %cond
74}
75
76define i32 @test3a(i32 %a, i32 %b) {
77; CHECK-LABEL: test3a:
78; CHECK: @ %bb.0: @ %entry
79; CHECK-NEXT: mov r2, r0
80; CHECK-NEXT: movs r0, #0
81; CHECK-NEXT: movs r3, #4
82; CHECK-NEXT: cmp r2, r1
83; CHECK-NEXT: beq .LBB4_2
84; CHECK-NEXT: @ %bb.1: @ %entry
85; CHECK-NEXT: mov r0, r3
86; CHECK-NEXT: .LBB4_2: @ %entry
87; CHECK-NEXT: bx lr
88entry:
89 %cmp = icmp eq i32 %a, %b
90 %cond = select i1 %cmp, i32 0, i32 4
91 ret i32 %cond
92}
93
94define i32 @test3b(i32 %a, i32 %b) {
95; CHECK-LABEL: test3b:
96; CHECK: @ %bb.0: @ %entry
97; CHECK-NEXT: movs r2, #1
98; CHECK-NEXT: movs r3, #0
99; CHECK-NEXT: cmp r0, r1
100; CHECK-NEXT: beq .LBB5_2
101; CHECK-NEXT: @ %bb.1: @ %entry
102; CHECK-NEXT: mov r2, r3
103; CHECK-NEXT: .LBB5_2: @ %entry
104; CHECK-NEXT: lsls r0, r2, #2
105; CHECK-NEXT: bx lr
106entry:
107 %cmp = icmp eq i32 %a, %b
108 %cond = select i1 %cmp, i32 4, i32 0
109 ret i32 %cond
110}
111
112; FIXME: This one hasn't changed actually
113; but could look like test3b
114define i32 @test4a(i32 %a, i32 %b) {
115; CHECK-LABEL: test4a:
116; CHECK: @ %bb.0: @ %entry
117; CHECK-NEXT: mov r2, r0
118; CHECK-NEXT: movs r0, #0
119; CHECK-NEXT: movs r3, #4
120; CHECK-NEXT: cmp r2, r1
121; CHECK-NEXT: bne .LBB6_2
122; CHECK-NEXT: @ %bb.1: @ %entry
123; CHECK-NEXT: mov r0, r3
124; CHECK-NEXT: .LBB6_2: @ %entry
125; CHECK-NEXT: bx lr
126entry:
127 %cmp = icmp ne i32 %a, %b
128 %cond = select i1 %cmp, i32 0, i32 4
129 ret i32 %cond
130}
131
132define i32 @test4b(i32 %a, i32 %b) {
133; CHECK-LABEL: test4b:
134; CHECK: @ %bb.0: @ %entry
135; CHECK-NEXT: movs r2, #1
136; CHECK-NEXT: movs r3, #0
137; CHECK-NEXT: cmp r0, r1
138; CHECK-NEXT: bne .LBB7_2
139; CHECK-NEXT: @ %bb.1: @ %entry
140; CHECK-NEXT: mov r2, r3
141; CHECK-NEXT: .LBB7_2: @ %entry
142; CHECK-NEXT: lsls r0, r2, #2
143; CHECK-NEXT: bx lr
144entry:
145 %cmp = icmp ne i32 %a, %b
146 %cond = select i1 %cmp, i32 4, i32 0
147 ret i32 %cond
148}
149