Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AVR / cmp.ll
blob715a3f1c9c18e31b6d3b5397e4eb7a9e1060ed69
1 ; RUN: llc < %s -march=avr | FileCheck %s
2 ; RUN: llc < %s -mtriple=avr -mcpu=attiny10 | FileCheck --check-prefix=TINY %s
4 declare void @f1(i8)
5 declare void @f2(i8)
6 define void @cmp8(i8 %a, i8 %b) {
7 ; CHECK-LABEL: cmp8:
8 ; CHECK: cp
9 ; CHECK-NOT: cpc
10   %cmp = icmp eq i8 %a, %b
11   br i1 %cmp, label %if.then, label %if.else
12 if.then:
13   tail call void @f1(i8 %a)
14   br label %if.end
15 if.else:
16   tail call void @f2(i8 %b)
17   br label %if.end
18 if.end:
19   ret void
22 declare void @f3(i16)
23 declare void @f4(i16)
24 define void @cmp16(i16 %a, i16 %b) {
25 ; CHECK-LABEL: cmp16:
26 ; CHECK: cp
27 ; CHECK-NEXT: cpc
28   %cmp = icmp eq i16 %a, %b
29   br i1 %cmp, label %if.then, label %if.else
30 if.then:
31   tail call void @f3(i16 %a)
32   br label %if.end
33 if.else:
34   tail call void @f4(i16 %b)
35   br label %if.end
36 if.end:
37   ret void
40 define void @cmpimm16(i16 %a) {
41 ; CHECK-LABEL: cmpimm16:
42 ; CHECK: cpi
43 ; CHECK-NEXT: cpc
44   %cmp = icmp eq i16 %a, 4567
45   br i1 %cmp, label %if.then, label %if.else
46 if.then:
47   tail call void @f3(i16 %a)
48   br label %if.end
49 if.else:
50   tail call void @f4(i16 %a)
51   br label %if.end
52 if.end:
53   ret void
56 declare void @f5(i32)
57 declare void @f6(i32)
58 define void @cmp32(i32 %a, i32 %b) {
59 ; CHECK-LABEL: cmp32:
60 ; CHECK: cp
61 ; CHECK-NEXT: cpc
62 ; CHECK-NEXT: cpc
63 ; CHECK-NEXT: cpc
64   %cmp = icmp eq i32 %a, %b
65   br i1 %cmp, label %if.then, label %if.else
66 if.then:
67   tail call void @f5(i32 %a)
68   br label %if.end
69 if.else:
70   tail call void @f6(i32 %b)
71   br label %if.end
72 if.end:
73   ret void
76 define void @cmpimm32(i32 %a) {
77 ; CHECK-LABEL: cmpimm32:
78 ; CHECK: cpi
79 ; CHECK-NEXT: cpc
80 ; CHECK-NEXT: cpc
81 ; CHECK-NEXT: cpc
82   %cmp = icmp eq i32 %a, 6789343
83   br i1 %cmp, label %if.then, label %if.else
84 if.then:
85   tail call void @f5(i32 %a)
86   br label %if.end
87 if.else:
88   tail call void @f6(i32 %a)
89   br label %if.end
90 if.end:
91   ret void
94 declare void @f7(i64)
95 declare void @f8(i64)
96 define void @cmp64(i64 %a, i64 %b) {
97 ; CHECK-LABEL: cmp64:
98 ; CHECK: cp
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 ; CHECK-NEXT: cpc
106   %cmp = icmp eq i64 %a, %b
107   br i1 %cmp, label %if.then, label %if.else
108 if.then:
109   tail call void @f7(i64 %a)
110   br label %if.end
111 if.else:
112   tail call void @f8(i64 %b)
113   br label %if.end
114 if.end:
115   ret void
118 define void @cmpimm64(i64 %a) {
119 ; CHECK-LABEL: cmpimm64:
120 ; CHECK: cpi
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 ; CHECK-NEXT: cpc
128   %cmp = icmp eq i64 %a, 234566452
129   br i1 %cmp, label %if.then, label %if.else
130 if.then:
131   tail call void @f7(i64 %a)
132   br label %if.end
133 if.else:
134   tail call void @f8(i64 %a)
135   br label %if.end
136 if.end:
137   ret void
140 declare void @f9()
141 declare void @f10()
143 define void @tst8(i8 %a) {
144 ; CHECK-LABEL: tst8:
145 ; CHECK: tst r24
146 ; CHECK-NEXT: brmi
147   %cmp = icmp sgt i8 %a, -1
148   br i1 %cmp, label %if.then, label %if.else
149 if.then:
150   tail call void @f9()
151   br label %if.end
152 if.else:
153   tail call void @f10()
154   br label %if.end
155 if.end:
156   ret void
159 define void @tst16(i16 %a) {
160 ; CHECK-LABEL: tst16:
161 ; CHECK: tst r25
162 ; CHECK-NEXT: brmi
163   %cmp = icmp sgt i16 %a, -1
164   br i1 %cmp, label %if.then, label %if.else
165 if.then:
166   tail call void @f9()
167   br label %if.end
168 if.else:
169   tail call void @f10()
170   br label %if.end
171 if.end:
172   ret void
175 define void @tst32(i32 %a) {
176 ; CHECK-LABEL: tst32:
177 ; CHECK: tst r25
178 ; CHECK-NEXT: brmi
179   %cmp = icmp sgt i32 %a, -1
180   br i1 %cmp, label %if.then, label %if.else
181 if.then:
182   tail call void @f9()
183   br label %if.end
184 if.else:
185   tail call void @f10()
186   br label %if.end
187 if.end:
188   ret void
191 define void @tst64(i64 %a) {
192 ; CHECK-LABEL: tst64:
193 ; CHECK: tst r25
194 ; CHECK-NEXT: brmi
195   %cmp = icmp sgt i64 %a, -1
196   br i1 %cmp, label %if.then, label %if.else
197 if.then:
198   tail call void @f9()
199   br label %if.end
200 if.else:
201   tail call void @f10()
202   br label %if.end
203 if.end:
204   ret void
207 define i16 @cmp_i16_gt_0(i16 %0) {
208 ; CHECK-LABEL: cmp_i16_gt_0:
209 ; CHECK:       ; %bb.0:
210 ; CHECK-NEXT:    ldi r18, 1
211 ; CHECK-NEXT:    cp r1, r24
212 ; CHECK-NEXT:    cpc r1, r25
213 ; CHECK-NEXT:    brlt .LBB11_2
214 ; CHECK-NEXT:  ; %bb.1:
215 ; CHECK-NEXT:    mov r18, r1
216 ; CHECK-NEXT:  .LBB11_2:
217 ; CHECK-NEXT:    mov r24, r18
218 ; CHECK-NEXT:    clr r25
219 ; CHECK-NEXT:    ret
221 ; TINY-LABEL: cmp_i16_gt_0:
222 ; TINY:       ; %bb.0:
223 ; TINY-NEXT:    ldi r20, 1
224 ; TINY-NEXT:    cp r17, r24
225 ; TINY-NEXT:    cpc r17, r25
226 ; TINY-NEXT:    brlt .LBB11_2
227 ; TINY-NEXT:  ; %bb.1:
228 ; TINY-NEXT:    mov r20, r17
229 ; TINY-NEXT:  .LBB11_2:
230 ; TINY-NEXT:    mov r24, r20
231 ; TINY-NEXT:    clr r25
232 ; TINY-NEXT:    ret
233   %2 = icmp sgt i16 %0, 0
234   %3 = zext i1 %2 to i16
235   ret i16 %3
238 define i16 @cmp_i16_gt_126(i16 %0) {
239 ; CHECK-LABEL: cmp_i16_gt_126:
240 ; CHECK:       ; %bb.0:
241 ; CHECK-NEXT:    ldi r18, 1
242 ; CHECK-NEXT:    cpi r24, 127
243 ; CHECK-NEXT:    cpc r25, r1
244 ; CHECK-NEXT:    brge .LBB12_2
245 ; CHECK-NEXT:  ; %bb.1:
246 ; CHECK-NEXT:    mov r18, r1
247 ; CHECK-NEXT:  .LBB12_2:
248 ; CHECK-NEXT:    mov r24, r18
249 ; CHECK-NEXT:    clr r25
250 ; CHECK-NEXT:    ret
252 ; TINY-LABEL: cmp_i16_gt_126:
253 ; TINY:       ; %bb.0:
254 ; TINY-NEXT:    ldi r20, 1
255 ; TINY-NEXT:    cpi r24, 127
256 ; TINY-NEXT:    cpc r25, r17
257 ; TINY-NEXT:    brge .LBB12_2
258 ; TINY-NEXT:  ; %bb.1:
259 ; TINY-NEXT:    mov r20, r17
260 ; TINY-NEXT:  .LBB12_2:
261 ; TINY-NEXT:    mov r24, r20
262 ; TINY-NEXT:    clr r25
263 ; TINY-NEXT:    ret
264   %2 = icmp sgt i16 %0, 126
265   %3 = zext i1 %2 to i16
266   ret i16 %3
269 define i16 @cmp_i16_gt_1023(i16 %0) {
270 ; CHECK-LABEL: cmp_i16_gt_1023:
271 ; CHECK:       ; %bb.0:
272 ; CHECK-NEXT:    ldi r19, 4
273 ; CHECK-NEXT:    ldi r18, 1
274 ; CHECK-NEXT:    cp r24, r1
275 ; CHECK-NEXT:    cpc r25, r19
276 ; CHECK-NEXT:    brge .LBB13_2
277 ; CHECK-NEXT:  ; %bb.1:
278 ; CHECK-NEXT:    mov r18, r1
279 ; CHECK-NEXT:  .LBB13_2:
280 ; CHECK-NEXT:    mov r24, r18
281 ; CHECK-NEXT:    clr r25
282 ; CHECK-NEXT:    ret
284 ; TINY-LABEL: cmp_i16_gt_1023:
285 ; TINY:       ; %bb.0:
286 ; TINY-NEXT:    ldi r21, 4
287 ; TINY-NEXT:    ldi r20, 1
288 ; TINY-NEXT:    cp r24, r17
289 ; TINY-NEXT:    cpc r25, r21
290 ; TINY-NEXT:    brge .LBB13_2
291 ; TINY-NEXT:  ; %bb.1:
292 ; TINY-NEXT:    mov r20, r17
293 ; TINY-NEXT:  .LBB13_2:
294 ; TINY-NEXT:    mov r24, r20
295 ; TINY-NEXT:    clr r25
296 ; TINY-NEXT:    ret
297   %2 = icmp sgt i16 %0, 1023
298   %3 = zext i1 %2 to i16
299   ret i16 %3