blob: ed34d630733c7f367f9f0b74f3cf0b1bf958899a [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
Eli Friedman063fd982018-10-31 21:45:48 +000023; CHECK-NEXT: rsbs r0, r1, #0
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000024; CHECK-NEXT: adcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000025}
26
27define i32 @test2a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000028entry:
29 %cmp = icmp eq i32 %a, %b
30 %cond = zext i1 %cmp to i32
31 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000032; CHECK-LABEL: test2a:
33; CHECK-NOT: b{{(ne)|(eq)}}
34; CHECK: subs r1, r0, r1
Eli Friedman063fd982018-10-31 21:45:48 +000035; CHECK-NEXT: rsbs r0, r1, #0
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000036; CHECK-NEXT: adcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000037}
38
39define i32 @test2b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000040entry:
41 %cmp = icmp ne i32 %a, %b
42 %cond = zext i1 %cmp to i32
43 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000044; CHECK-LABEL: test2b:
45; CHECK-NOT: b{{(ne)|(eq)}}
46; CHECK: subs r0, r0, r1
47; CHECK-NEXT: subs r1, r0, #1
48; CHECK-NEXT: sbcs r0, r1
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000049}
50
51define i32 @test3a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000052entry:
53 %cmp = icmp eq i32 %a, %b
54 %cond = select i1 %cmp, i32 0, i32 4
55 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000056; CHECK-LABEL: test3a:
57; CHECK-NOT: b{{(ne)|(eq)}}
58; CHECK: subs r0, r0, r1
59; CHECK-NEXT: subs r1, r0, #1
60; CHECK-NEXT: sbcs r0, r1
61; CHECK-NEXT: lsls r0, r0, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000062}
63
64define i32 @test3b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000065entry:
66 %cmp = icmp eq i32 %a, %b
67 %cond = select i1 %cmp, i32 4, i32 0
68 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000069; CHECK-LABEL: test3b:
70; CHECK-NOT: b{{(ne)|(eq)}}
71; CHECK: subs r0, r0, r1
Eli Friedman063fd982018-10-31 21:45:48 +000072; CHECK-NEXT: rsbs r1, r0, #0
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000073; CHECK-NEXT: adcs r1, r0
74; CHECK-NEXT: lsls r0, r1, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000075}
76
77; FIXME: This one hasn't changed actually
78; but could look like test3b
79define i32 @test4a(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000080entry:
81 %cmp = icmp ne i32 %a, %b
82 %cond = select i1 %cmp, i32 0, i32 4
83 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000084; CHECK-LABEL: test4a:
Eli Friedman2ac11622018-10-26 19:32:24 +000085; CHECK: bb.0:
86; CHECK-NEXT: cmp r0, r1
87; CHECK-NEXT: bne .LBB6_2
88; CHECK-NEXT: bb.1:
89; CHECK-NEXT: movs r0, #4
90; CHECK-NEXT: bx lr
91; CHECK-NEXT: .LBB6_2:
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +000092; CHECK-NEXT: movs r0, #0
Eli Friedman2ac11622018-10-26 19:32:24 +000093; CHECK-NEXT: bx lr
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000094}
95
96define i32 @test4b(i32 %a, i32 %b) {
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +000097entry:
98 %cmp = icmp ne i32 %a, %b
99 %cond = select i1 %cmp, i32 4, i32 0
100 ret i32 %cond
Roger Ferrer Ibanezd41059a2018-02-16 09:23:59 +0000101; CHECK-LABEL: test4b:
102; CHECK-NOT: b{{(ne)|(eq)}}
103; CHECK: subs r0, r0, r1
104; CHECK-NEXT: subs r1, r0, #1
105; CHECK-NEXT: sbcs r0, r1
106; CHECK-NEXT: lsls r0, r0, #2
Roger Ferrer Ibanez9fcc4722017-12-15 09:24:46 +0000107}