blob: 8435529d68118e5d2e711abe91bb9fc53622e163 [file] [log] [blame]
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +00001; RUN: llc -mtriple=thumb-eabi -mcpu=cortex-m0 %s -verify-machineinstrs -o - | FileCheck %s
2
3define i32 @test1a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +00004entry:
5 %cmp = icmp ne i32 %a, %b
6 %cond = zext i1 %cmp to i32
7 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +00008; CHECK-LABEL: test1a:
9; CHECK-NOT: b{{(ne)|(eq)}}
10; CHECK: subs r0, r0, r1
11; CHECK-NEXT: subs r1, r0, #1
12; CHECK-NEXT: sbcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000013}
14
15define i32 @test1b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000016entry:
17 %cmp = icmp eq i32 %a, %b
18 %cond = zext i1 %cmp to i32
19 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000020; CHECK-LABEL: test1b:
21; CHECK-NOT: b{{(ne)|(eq)}}
22; CHECK: subs r1, r0, r1
23; CHECK-NEXT: movs r0, #0
24; CHECK-NEXT: subs r0, r0, r1
25; CHECK-NEXT: adcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000026}
27
28define i32 @test2a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000029entry:
30 %cmp = icmp eq i32 %a, %b
31 %cond = zext i1 %cmp to i32
32 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000033; CHECK-LABEL: test2a:
34; CHECK-NOT: b{{(ne)|(eq)}}
35; CHECK: subs r1, r0, r1
36; CHECK-NEXT: movs r0, #0
37; CHECK-NEXT: subs r0, r0, r1
38; CHECK-NEXT: adcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000039}
40
41define i32 @test2b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000042entry:
43 %cmp = icmp ne i32 %a, %b
44 %cond = zext i1 %cmp to i32
45 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000046; CHECK-LABEL: test2b:
47; CHECK-NOT: b{{(ne)|(eq)}}
48; CHECK: subs r0, r0, r1
49; CHECK-NEXT: subs r1, r0, #1
50; CHECK-NEXT: sbcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000051}
52
53define i32 @test3a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000054entry:
55 %cmp = icmp eq i32 %a, %b
56 %cond = select i1 %cmp, i32 0, i32 4
57 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000058; CHECK-LABEL: test3a:
59; CHECK-NOT: b{{(ne)|(eq)}}
60; CHECK: subs r0, r0, r1
61; CHECK-NEXT: subs r1, r0, #1
62; CHECK-NEXT: sbcs r0, r1
63; CHECK-NEXT: lsls r0, r0, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000064}
65
66define i32 @test3b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000067entry:
68 %cmp = icmp eq i32 %a, %b
69 %cond = select i1 %cmp, i32 4, i32 0
70 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000071; CHECK-LABEL: test3b:
72; CHECK-NOT: b{{(ne)|(eq)}}
73; CHECK: subs r0, r0, r1
74; CHECK-NEXT: movs r1, #0
75; CHECK-NEXT: subs r1, r1, r0
76; CHECK-NEXT: adcs r1, r0
77; CHECK-NEXT: lsls r0, r1, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000078}
79
80; FIXME: This one hasn't changed actually
81; but could look like test3b
82define i32 @test4a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000083entry:
84 %cmp = icmp ne i32 %a, %b
85 %cond = select i1 %cmp, i32 0, i32 4
86 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000087; CHECK-LABEL: test4a:
Eli Friedman2ac11622018-10-26 19:32:24 +000088; CHECK: bb.0:
89; CHECK-NEXT: cmp r0, r1
90; CHECK-NEXT: bne .LBB6_2
91; CHECK-NEXT: bb.1:
92; CHECK-NEXT: movs r0, #4
93; CHECK-NEXT: bx lr
94; CHECK-NEXT: .LBB6_2:
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000095; CHECK-NEXT: movs r0, #0
Eli Friedman2ac11622018-10-26 19:32:24 +000096; CHECK-NEXT: bx lr
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000097}
98
99define i32 @test4b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +0000100entry:
101 %cmp = icmp ne i32 %a, %b
102 %cond = select i1 %cmp, i32 4, i32 0
103 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +0000104; CHECK-LABEL: test4b:
105; CHECK-NOT: b{{(ne)|(eq)}}
106; CHECK: subs r0, r0, r1
107; CHECK-NEXT: subs r1, r0, #1
108; CHECK-NEXT: sbcs r0, r1
109; CHECK-NEXT: lsls r0, r0, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +0000110}