• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
39declare void @f5(i32)
40declare void @f6(i32)
41define void @cmp32(i32 %a, i32 %b) {
42; CHECK-LABEL: cmp32:
43; CHECK: cp
44; CHECK-NEXT: cpc
45; CHECK-NEXT: cpc
46; CHECK-NEXT: cpc
47  %cmp = icmp eq i32 %a, %b
48  br i1 %cmp, label %if.then, label %if.else
49if.then:
50  tail call void @f5(i32 %a)
51  br label %if.end
52if.else:
53  tail call void @f6(i32 %b)
54  br label %if.end
55if.end:
56  ret void
57}
58
59declare void @f7(i64)
60declare void @f8(i64)
61define void @cmp64(i64 %a, i64 %b) {
62; CHECK-LABEL: cmp64:
63; CHECK: cp
64; CHECK-NEXT: cpc
65; CHECK-NEXT: cpc
66; CHECK-NEXT: cpc
67; CHECK-NEXT: cpc
68; CHECK-NEXT: cpc
69; CHECK-NEXT: cpc
70; CHECK-NEXT: cpc
71  %cmp = icmp eq i64 %a, %b
72  br i1 %cmp, label %if.then, label %if.else
73if.then:
74  tail call void @f7(i64 %a)
75  br label %if.end
76if.else:
77  tail call void @f8(i64 %b)
78  br label %if.end
79if.end:
80  ret void
81}
82
83declare void @f9()
84declare void @f10()
85
86define void @tst8(i8 %a) {
87; CHECK-LABEL: tst8:
88; CHECK: tst r24
89; CHECK-NEXT: brmi
90  %cmp = icmp sgt i8 %a, -1
91  br i1 %cmp, label %if.then, label %if.else
92if.then:
93  tail call void @f9()
94  br label %if.end
95if.else:
96  tail call void @f10()
97  br label %if.end
98if.end:
99  ret void
100}
101
102define void @tst16(i16 %a) {
103; CHECK-LABEL: tst16:
104; CHECK: tst r25
105; CHECK-NEXT: brmi
106  %cmp = icmp sgt i16 %a, -1
107  br i1 %cmp, label %if.then, label %if.else
108if.then:
109  tail call void @f9()
110  br label %if.end
111if.else:
112  tail call void @f10()
113  br label %if.end
114if.end:
115  ret void
116}
117
118define void @tst32(i32 %a) {
119; CHECK-LABEL: tst32:
120; CHECK: tst r25
121; CHECK-NEXT: brmi
122  %cmp = icmp sgt i32 %a, -1
123  br i1 %cmp, label %if.then, label %if.else
124if.then:
125  tail call void @f9()
126  br label %if.end
127if.else:
128  tail call void @f10()
129  br label %if.end
130if.end:
131  ret void
132}
133
134define void @tst64(i64 %a) {
135; CHECK-LABEL: tst64:
136; CHECK: tst r25
137; CHECK-NEXT: brmi
138  %cmp = icmp sgt i64 %a, -1
139  br i1 %cmp, label %if.then, label %if.else
140if.then:
141  tail call void @f9()
142  br label %if.end
143if.else:
144  tail call void @f10()
145  br label %if.end
146if.end:
147  ret void
148}
149