[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / Hexagon / hwloop-ne.ll
blob301a31a7c0b7d1c8904df07c23ca3d68895597a3
1 ; RUN: llc -march=hexagon -O3 < %s | FileCheck %s
3 ; CHECK-LABEL: f0:
4 ; CHECK: loop0
5 ; a < b
6 define void @f0(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
7 b0:
8   %v0 = icmp slt i32 32623, %a2
9   br i1 %v0, label %b1, label %b3
11 b1:                                               ; preds = %b0
12   br label %b2
14 b2:                                               ; preds = %b2, %b1
15   %v1 = phi i32 [ 32623, %b1 ], [ %v7, %b2 ]
16   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
17   %v3 = load i8, i8* %v2, align 1
18   %v4 = zext i8 %v3 to i32
19   %v5 = add nsw i32 %v4, 1
20   %v6 = trunc i32 %v5 to i8
21   store i8 %v6, i8* %v2, align 1
22   %v7 = add nsw i32 %v1, 1
23   %v8 = icmp ne i32 %v7, %a2
24   br i1 %v8, label %b2, label %b3
26 b3:                                               ; preds = %b2, %b0
27   ret void
30 ; CHECK-LABEL: f1:
31 ; CHECK: loop0
32 ; a < b
33 define void @f1(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
34 b0:
35   %v0 = icmp slt i32 29554, %a2
36   br i1 %v0, label %b1, label %b3
38 b1:                                               ; preds = %b0
39   br label %b2
41 b2:                                               ; preds = %b2, %b1
42   %v1 = phi i32 [ 29554, %b1 ], [ %v7, %b2 ]
43   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
44   %v3 = load i8, i8* %v2, align 1
45   %v4 = zext i8 %v3 to i32
46   %v5 = add nsw i32 %v4, 1
47   %v6 = trunc i32 %v5 to i8
48   store i8 %v6, i8* %v2, align 1
49   %v7 = add nsw i32 %v1, 2
50   %v8 = icmp ne i32 %v7, %a2
51   br i1 %v8, label %b2, label %b3
53 b3:                                               ; preds = %b2, %b0
54   ret void
57 ; CHECK-LABEL: f2:
58 ; CHECK: loop0
59 ; a < b
60 define void @f2(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
61 b0:
62   %v0 = icmp slt i32 15692, %a2
63   br i1 %v0, label %b1, label %b3
65 b1:                                               ; preds = %b0
66   br label %b2
68 b2:                                               ; preds = %b2, %b1
69   %v1 = phi i32 [ 15692, %b1 ], [ %v7, %b2 ]
70   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
71   %v3 = load i8, i8* %v2, align 1
72   %v4 = zext i8 %v3 to i32
73   %v5 = add nsw i32 %v4, 1
74   %v6 = trunc i32 %v5 to i8
75   store i8 %v6, i8* %v2, align 1
76   %v7 = add nsw i32 %v1, 4
77   %v8 = icmp ne i32 %v7, %a2
78   br i1 %v8, label %b2, label %b3
80 b3:                                               ; preds = %b2, %b0
81   ret void
84 ; CHECK-LABEL: f3:
85 ; CHECK: loop0
86 ; a < b
87 define void @f3(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
88 b0:
89   %v0 = icmp slt i32 10449, %a2
90   br i1 %v0, label %b1, label %b3
92 b1:                                               ; preds = %b0
93   br label %b2
95 b2:                                               ; preds = %b2, %b1
96   %v1 = phi i32 [ 10449, %b1 ], [ %v7, %b2 ]
97   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
98   %v3 = load i8, i8* %v2, align 1
99   %v4 = zext i8 %v3 to i32
100   %v5 = add nsw i32 %v4, 1
101   %v6 = trunc i32 %v5 to i8
102   store i8 %v6, i8* %v2, align 1
103   %v7 = add nsw i32 %v1, 8
104   %v8 = icmp ne i32 %v7, %a2
105   br i1 %v8, label %b2, label %b3
107 b3:                                               ; preds = %b2, %b0
108   ret void
111 ; CHECK-LABEL: f4:
112 ; CHECK: loop0
113 ; a < b
114 define void @f4(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
116   %v0 = icmp slt i32 32087, %a2
117   br i1 %v0, label %b1, label %b3
119 b1:                                               ; preds = %b0
120   br label %b2
122 b2:                                               ; preds = %b2, %b1
123   %v1 = phi i32 [ 32087, %b1 ], [ %v7, %b2 ]
124   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
125   %v3 = load i8, i8* %v2, align 1
126   %v4 = zext i8 %v3 to i32
127   %v5 = add nsw i32 %v4, 1
128   %v6 = trunc i32 %v5 to i8
129   store i8 %v6, i8* %v2, align 1
130   %v7 = add nsw i32 %v1, 16
131   %v8 = icmp ne i32 %v7, %a2
132   br i1 %v8, label %b2, label %b3
134 b3:                                               ; preds = %b2, %b0
135   ret void
138 ; CHECK-LABEL: f5:
139 ; CHECK: loop0
140 ; a < b
141 define void @f5(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
143   %v0 = icmp slt i32 %a1, 3472
144   br i1 %v0, label %b1, label %b3
146 b1:                                               ; preds = %b0
147   br label %b2
149 b2:                                               ; preds = %b2, %b1
150   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
151   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
152   %v3 = load i8, i8* %v2, align 1
153   %v4 = zext i8 %v3 to i32
154   %v5 = add nsw i32 %v4, 1
155   %v6 = trunc i32 %v5 to i8
156   store i8 %v6, i8* %v2, align 1
157   %v7 = add nsw i32 %v1, 1
158   %v8 = icmp ne i32 %v7, 3472
159   br i1 %v8, label %b2, label %b3
161 b3:                                               ; preds = %b2, %b0
162   ret void
165 ; CHECK-LABEL: f6:
166 ; CHECK: loop0
167 ; a < b
168 define void @f6(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
170   %v0 = icmp slt i32 %a1, 8730
171   br i1 %v0, label %b1, label %b3
173 b1:                                               ; preds = %b0
174   br label %b2
176 b2:                                               ; preds = %b2, %b1
177   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
178   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
179   %v3 = load i8, i8* %v2, align 1
180   %v4 = zext i8 %v3 to i32
181   %v5 = add nsw i32 %v4, 1
182   %v6 = trunc i32 %v5 to i8
183   store i8 %v6, i8* %v2, align 1
184   %v7 = add nsw i32 %v1, 2
185   %v8 = icmp ne i32 %v7, 8730
186   br i1 %v8, label %b2, label %b3
188 b3:                                               ; preds = %b2, %b0
189   ret void
192 ; CHECK-LABEL: f7:
193 ; CHECK: loop0
194 ; a < b
195 define void @f7(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
197   %v0 = icmp slt i32 %a1, 1493
198   br i1 %v0, label %b1, label %b3
200 b1:                                               ; preds = %b0
201   br label %b2
203 b2:                                               ; preds = %b2, %b1
204   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
205   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
206   %v3 = load i8, i8* %v2, align 1
207   %v4 = zext i8 %v3 to i32
208   %v5 = add nsw i32 %v4, 1
209   %v6 = trunc i32 %v5 to i8
210   store i8 %v6, i8* %v2, align 1
211   %v7 = add nsw i32 %v1, 4
212   %v8 = icmp ne i32 %v7, 1493
213   br i1 %v8, label %b2, label %b3
215 b3:                                               ; preds = %b2, %b0
216   ret void
219 ; CHECK-LABEL: f8:
220 ; CHECK: loop0
221 ; a < b
222 define void @f8(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
224   %v0 = icmp slt i32 %a1, 1706
225   br i1 %v0, label %b1, label %b3
227 b1:                                               ; preds = %b0
228   br label %b2
230 b2:                                               ; preds = %b2, %b1
231   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
232   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
233   %v3 = load i8, i8* %v2, align 1
234   %v4 = zext i8 %v3 to i32
235   %v5 = add nsw i32 %v4, 1
236   %v6 = trunc i32 %v5 to i8
237   store i8 %v6, i8* %v2, align 1
238   %v7 = add nsw i32 %v1, 8
239   %v8 = icmp ne i32 %v7, 1706
240   br i1 %v8, label %b2, label %b3
242 b3:                                               ; preds = %b2, %b0
243   ret void
246 ; CHECK-LABEL: f9:
247 ; CHECK: loop0
248 ; a < b
249 define void @f9(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
251   %v0 = icmp slt i32 %a1, 1886
252   br i1 %v0, label %b1, label %b3
254 b1:                                               ; preds = %b0
255   br label %b2
257 b2:                                               ; preds = %b2, %b1
258   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
259   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
260   %v3 = load i8, i8* %v2, align 1
261   %v4 = zext i8 %v3 to i32
262   %v5 = add nsw i32 %v4, 1
263   %v6 = trunc i32 %v5 to i8
264   store i8 %v6, i8* %v2, align 1
265   %v7 = add nsw i32 %v1, 16
266   %v8 = icmp ne i32 %v7, 1886
267   br i1 %v8, label %b2, label %b3
269 b3:                                               ; preds = %b2, %b0
270   ret void
273 ; CHECK-LABEL: f10:
274 ; CHECK: loop0
275 ; a < b
276 define void @f10(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
278   %v0 = icmp slt i32 %a1, %a2
279   br i1 %v0, label %b1, label %b3
281 b1:                                               ; preds = %b0
282   br label %b2
284 b2:                                               ; preds = %b2, %b1
285   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
286   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
287   %v3 = load i8, i8* %v2, align 1
288   %v4 = zext i8 %v3 to i32
289   %v5 = add nsw i32 %v4, 1
290   %v6 = trunc i32 %v5 to i8
291   store i8 %v6, i8* %v2, align 1
292   %v7 = add nsw i32 %v1, 1
293   %v8 = icmp ne i32 %v7, %a2
294   br i1 %v8, label %b2, label %b3
296 b3:                                               ; preds = %b2, %b0
297   ret void
300 ; CHECK-LABEL: f11:
301 ; CHECK: loop0
302 ; a < b
303 define void @f11(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
305   %v0 = icmp slt i32 %a1, %a2
306   br i1 %v0, label %b1, label %b3
308 b1:                                               ; preds = %b0
309   br label %b2
311 b2:                                               ; preds = %b2, %b1
312   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
313   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
314   %v3 = load i8, i8* %v2, align 1
315   %v4 = zext i8 %v3 to i32
316   %v5 = add nsw i32 %v4, 1
317   %v6 = trunc i32 %v5 to i8
318   store i8 %v6, i8* %v2, align 1
319   %v7 = add nsw i32 %v1, 2
320   %v8 = icmp ne i32 %v7, %a2
321   br i1 %v8, label %b2, label %b3
323 b3:                                               ; preds = %b2, %b0
324   ret void
327 ; CHECK-LABEL: f12:
328 ; CHECK: loop0
329 ; a < b
330 define void @f12(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
332   %v0 = icmp slt i32 %a1, %a2
333   br i1 %v0, label %b1, label %b3
335 b1:                                               ; preds = %b0
336   br label %b2
338 b2:                                               ; preds = %b2, %b1
339   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
340   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
341   %v3 = load i8, i8* %v2, align 1
342   %v4 = zext i8 %v3 to i32
343   %v5 = add nsw i32 %v4, 1
344   %v6 = trunc i32 %v5 to i8
345   store i8 %v6, i8* %v2, align 1
346   %v7 = add nsw i32 %v1, 4
347   %v8 = icmp ne i32 %v7, %a2
348   br i1 %v8, label %b2, label %b3
350 b3:                                               ; preds = %b2, %b0
351   ret void
354 ; CHECK-LABEL: f13
355 ; CHECK: loop0
356 ; a < b
357 define void @f13(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
359   %v0 = icmp slt i32 %a1, %a2
360   br i1 %v0, label %b1, label %b3
362 b1:                                               ; preds = %b0
363   br label %b2
365 b2:                                               ; preds = %b2, %b1
366   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
367   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
368   %v3 = load i8, i8* %v2, align 1
369   %v4 = zext i8 %v3 to i32
370   %v5 = add nsw i32 %v4, 1
371   %v6 = trunc i32 %v5 to i8
372   store i8 %v6, i8* %v2, align 1
373   %v7 = add nsw i32 %v1, 8
374   %v8 = icmp ne i32 %v7, %a2
375   br i1 %v8, label %b2, label %b3
377 b3:                                               ; preds = %b2, %b0
378   ret void
381 ; CHECK-LABEL: f14
382 ; CHECK: loop0
383 ; a < b
384 define void @f14(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
386   %v0 = icmp slt i32 %a1, %a2
387   br i1 %v0, label %b1, label %b3
389 b1:                                               ; preds = %b0
390   br label %b2
392 b2:                                               ; preds = %b2, %b1
393   %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
394   %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
395   %v3 = load i8, i8* %v2, align 1
396   %v4 = zext i8 %v3 to i32
397   %v5 = add nsw i32 %v4, 1
398   %v6 = trunc i32 %v5 to i8
399   store i8 %v6, i8* %v2, align 1
400   %v7 = add nsw i32 %v1, 16
401   %v8 = icmp ne i32 %v7, %a2
402   br i1 %v8, label %b2, label %b3
404 b3:                                               ; preds = %b2, %b0
405   ret void
408 attributes #0 = { nounwind "target-cpu"="hexagonv5" }