1; RUN: llc < %s -march=avr | FileCheck %s
2
3declare void @f1(i8)
4declare void @f2(i8)
5define void @cmp8(i8 %a, i8 %b) {
6; CHECK-LABEL: cmp8:
7; CHECK: cp
8; CHECK-NOT: cpc
9  %cmp = icmp eq i8 %a, %b
10  br i1 %cmp, label %if.then, label %if.else
11if.then:
12  tail call void @f1(i8 %a)
13  br label %if.end
14if.else:
15  tail call void @f2(i8 %b)
16  br label %if.end
17if.end:
18  ret void
19}
20
21declare void @f3(i16)
22declare void @f4(i16)
23define void @cmp16(i16 %a, i16 %b) {
24; CHECK-LABEL: cmp16:
25; CHECK: cp
26; CHECK-NEXT: cpc
27  %cmp = icmp eq i16 %a, %b
28  br i1 %cmp, label %if.then, label %if.else
29if.then:
30  tail call void @f3(i16 %a)
31  br label %if.end
32if.else:
33  tail call void @f4(i16 %b)
34  br label %if.end
35if.end:
36  ret void
37}
38
39define void @cmpimm16(i16 %a) {
40; CHECK-LABEL: cmpimm16:
41; CHECK: cpi
42; CHECK-NEXT: cpc
43  %cmp = icmp eq i16 %a, 4567
44  br i1 %cmp, label %if.then, label %if.else
45if.then:
46  tail call void @f3(i16 %a)
47  br label %if.end
48if.else:
49  tail call void @f4(i16 %a)
50  br label %if.end
51if.end:
52  ret void
53}
54
55declare void @f5(i32)
56declare void @f6(i32)
57define void @cmp32(i32 %a, i32 %b) {
58; CHECK-LABEL: cmp32:
59; CHECK: cp
60; CHECK-NEXT: cpc
61; CHECK-NEXT: cpc
62; CHECK-NEXT: cpc
63  %cmp = icmp eq i32 %a, %b
64  br i1 %cmp, label %if.then, label %if.else
65if.then:
66  tail call void @f5(i32 %a)
67  br label %if.end
68if.else:
69  tail call void @f6(i32 %b)
70  br label %if.end
71if.end:
72  ret void
73}
74
75define void @cmpimm32(i32 %a) {
76; CHECK-LABEL: cmpimm32:
77; CHECK: cpi
78; CHECK-NEXT: cpc
79; CHECK-NEXT: cpc
80; CHECK-NEXT: cpc
81  %cmp = icmp eq i32 %a, 6789343
82  br i1 %cmp, label %if.then, label %if.else
83if.then:
84  tail call void @f5(i32 %a)
85  br label %if.end
86if.else:
87  tail call void @f6(i32 %a)
88  br label %if.end
89if.end:
90  ret void
91}
92
93declare void @f7(i64)
94declare void @f8(i64)
95define void @cmp64(i64 %a, i64 %b) {
96; CHECK-LABEL: cmp64:
97; CHECK: cp
98; CHECK-NEXT: cpc
99; CHECK-NEXT: cpc
100; CHECK-NEXT: cpc
101; CHECK-NEXT: cpc
102; CHECK-NEXT: cpc
103; CHECK-NEXT: cpc
104; CHECK-NEXT: cpc
105  %cmp = icmp eq i64 %a, %b
106  br i1 %cmp, label %if.then, label %if.else
107if.then:
108  tail call void @f7(i64 %a)
109  br label %if.end
110if.else:
111  tail call void @f8(i64 %b)
112  br label %if.end
113if.end:
114  ret void
115}
116
117define void @cmpimm64(i64 %a) {
118; CHECK-LABEL: cmpimm64:
119; CHECK: cpi
120; CHECK-NEXT: cpc
121; CHECK-NEXT: cpc
122; CHECK-NEXT: cpc
123; CHECK-NEXT: cpc
124; CHECK-NEXT: cpc
125; CHECK-NEXT: cpc
126; CHECK-NEXT: cpc
127  %cmp = icmp eq i64 %a, 234566452
128  br i1 %cmp, label %if.then, label %if.else
129if.then:
130  tail call void @f7(i64 %a)
131  br label %if.end
132if.else:
133  tail call void @f8(i64 %a)
134  br label %if.end
135if.end:
136  ret void
137}
138
139declare void @f9()
140declare void @f10()
141
142define void @tst8(i8 %a) {
143; CHECK-LABEL: tst8:
144; CHECK: tst r24
145; CHECK-NEXT: brmi
146  %cmp = icmp sgt i8 %a, -1
147  br i1 %cmp, label %if.then, label %if.else
148if.then:
149  tail call void @f9()
150  br label %if.end
151if.else:
152  tail call void @f10()
153  br label %if.end
154if.end:
155  ret void
156}
157
158define void @tst16(i16 %a) {
159; CHECK-LABEL: tst16:
160; CHECK: tst r25
161; CHECK-NEXT: brmi
162  %cmp = icmp sgt i16 %a, -1
163  br i1 %cmp, label %if.then, label %if.else
164if.then:
165  tail call void @f9()
166  br label %if.end
167if.else:
168  tail call void @f10()
169  br label %if.end
170if.end:
171  ret void
172}
173
174define void @tst32(i32 %a) {
175; CHECK-LABEL: tst32:
176; CHECK: tst r25
177; CHECK-NEXT: brmi
178  %cmp = icmp sgt i32 %a, -1
179  br i1 %cmp, label %if.then, label %if.else
180if.then:
181  tail call void @f9()
182  br label %if.end
183if.else:
184  tail call void @f10()
185  br label %if.end
186if.end:
187  ret void
188}
189
190define void @tst64(i64 %a) {
191; CHECK-LABEL: tst64:
192; CHECK: tst r25
193; CHECK-NEXT: brmi
194  %cmp = icmp sgt i64 %a, -1
195  br i1 %cmp, label %if.then, label %if.else
196if.then:
197  tail call void @f9()
198  br label %if.end
199if.else:
200  tail call void @f10()
201  br label %if.end
202if.end:
203  ret void
204}
205