[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / Hexagon / hwloop-lt.ll
blob8919f265abfe3815e9c983c8a26c9a4816fb4d31
1 ; RUN: llc -march=hexagon -O3 < %s | FileCheck %s
3 ; CHECK-LABEL: @test_pos1_ir_slt
4 ; CHECK: loop0
5 ; a < b
6 define void @test_pos1_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
7 entry:
8   %cmp3 = icmp slt i32 8531, %b
9   br i1 %cmp3, label %for.body.lr.ph, label %for.end
11 for.body.lr.ph:
12   br label %for.body
14 for.body:
15   %i.04 = phi i32 [ 8531, %for.body.lr.ph ], [ %inc, %for.body ]
16   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
17   %0 = load i8, i8* %arrayidx, align 1
18   %conv = zext i8 %0 to i32
19   %add = add nsw i32 %conv, 1
20   %conv1 = trunc i32 %add to i8
21   store i8 %conv1, i8* %arrayidx, align 1
22   %inc = add nsw i32 %i.04, 1
23   %cmp = icmp slt i32 %inc, %b
24   br i1 %cmp, label %for.body, label %for.end
26 for.end:
27   ret void
30 ; CHECK-LABEL: @test_pos2_ir_slt
31 ; CHECK: loop0
32 ; a < b
33 define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
34 entry:
35   %cmp3 = icmp slt i32 9152, %b
36   br i1 %cmp3, label %for.body.lr.ph, label %for.end
38 for.body.lr.ph:
39   br label %for.body
41 for.body:
42   %i.04 = phi i32 [ 9152, %for.body.lr.ph ], [ %inc, %for.body ]
43   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
44   %0 = load i8, i8* %arrayidx, align 1
45   %conv = zext i8 %0 to i32
46   %add = add nsw i32 %conv, 1
47   %conv1 = trunc i32 %add to i8
48   store i8 %conv1, i8* %arrayidx, align 1
49   %inc = add nsw i32 %i.04, 2
50   %cmp = icmp slt i32 %inc, %b
51   br i1 %cmp, label %for.body, label %for.end
53 for.end:
54   ret void
57 ; CHECK-LABEL: @test_pos4_ir_slt
58 ; CHECK: loop0
59 ; a < b
60 define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
61 entry:
62   %cmp3 = icmp slt i32 18851, %b
63   br i1 %cmp3, label %for.body.lr.ph, label %for.end
65 for.body.lr.ph:
66   br label %for.body
68 for.body:
69   %i.04 = phi i32 [ 18851, %for.body.lr.ph ], [ %inc, %for.body ]
70   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
71   %0 = load i8, i8* %arrayidx, align 1
72   %conv = zext i8 %0 to i32
73   %add = add nsw i32 %conv, 1
74   %conv1 = trunc i32 %add to i8
75   store i8 %conv1, i8* %arrayidx, align 1
76   %inc = add nsw i32 %i.04, 4
77   %cmp = icmp slt i32 %inc, %b
78   br i1 %cmp, label %for.body, label %for.end
80 for.end:
81   ret void
84 ; CHECK-LABEL: @test_pos8_ir_slt
85 ; CHECK: loop0
86 ; a < b
87 define void @test_pos8_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
88 entry:
89   %cmp3 = icmp slt i32 25466, %b
90   br i1 %cmp3, label %for.body.lr.ph, label %for.end
92 for.body.lr.ph:
93   br label %for.body
95 for.body:
96   %i.04 = phi i32 [ 25466, %for.body.lr.ph ], [ %inc, %for.body ]
97   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
98   %0 = load i8, i8* %arrayidx, align 1
99   %conv = zext i8 %0 to i32
100   %add = add nsw i32 %conv, 1
101   %conv1 = trunc i32 %add to i8
102   store i8 %conv1, i8* %arrayidx, align 1
103   %inc = add nsw i32 %i.04, 8
104   %cmp = icmp slt i32 %inc, %b
105   br i1 %cmp, label %for.body, label %for.end
107 for.end:
108   ret void
111 ; CHECK-LABEL: @test_pos16_ir_slt
112 ; CHECK: loop0
113 ; a < b
114 define void @test_pos16_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
115 entry:
116   %cmp3 = icmp slt i32 9295, %b
117   br i1 %cmp3, label %for.body.lr.ph, label %for.end
119 for.body.lr.ph:
120   br label %for.body
122 for.body:
123   %i.04 = phi i32 [ 9295, %for.body.lr.ph ], [ %inc, %for.body ]
124   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
125   %0 = load i8, i8* %arrayidx, align 1
126   %conv = zext i8 %0 to i32
127   %add = add nsw i32 %conv, 1
128   %conv1 = trunc i32 %add to i8
129   store i8 %conv1, i8* %arrayidx, align 1
130   %inc = add nsw i32 %i.04, 16
131   %cmp = icmp slt i32 %inc, %b
132   br i1 %cmp, label %for.body, label %for.end
134 for.end:
135   ret void
138 ; CHECK-LABEL: @test_pos1_ri_slt
139 ; CHECK: loop0
140 ; a < b
141 define void @test_pos1_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
142 entry:
143   %cmp3 = icmp slt i32 %a, 31236
144   br i1 %cmp3, label %for.body.lr.ph, label %for.end
146 for.body.lr.ph:
147   br label %for.body
149 for.body:
150   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
151   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
152   %0 = load i8, i8* %arrayidx, align 1
153   %conv = zext i8 %0 to i32
154   %add = add nsw i32 %conv, 1
155   %conv1 = trunc i32 %add to i8
156   store i8 %conv1, i8* %arrayidx, align 1
157   %inc = add nsw i32 %i.04, 1
158   %cmp = icmp slt i32 %inc, 31236
159   br i1 %cmp, label %for.body, label %for.end
161 for.end:
162   ret void
165 ; CHECK-LABEL: @test_pos2_ri_slt
166 ; CHECK: loop0
167 ; a < b
168 define void @test_pos2_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
169 entry:
170   %cmp3 = icmp slt i32 %a, 22653
171   br i1 %cmp3, label %for.body.lr.ph, label %for.end
173 for.body.lr.ph:
174   br label %for.body
176 for.body:
177   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
178   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
179   %0 = load i8, i8* %arrayidx, align 1
180   %conv = zext i8 %0 to i32
181   %add = add nsw i32 %conv, 1
182   %conv1 = trunc i32 %add to i8
183   store i8 %conv1, i8* %arrayidx, align 1
184   %inc = add nsw i32 %i.04, 2
185   %cmp = icmp slt i32 %inc, 22653
186   br i1 %cmp, label %for.body, label %for.end
188 for.end:
189   ret void
192 ; CHECK-LABEL: @test_pos4_ri_slt
193 ; CHECK: loop0
194 ; a < b
195 define void @test_pos4_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
196 entry:
197   %cmp3 = icmp slt i32 %a, 1431
198   br i1 %cmp3, label %for.body.lr.ph, label %for.end
200 for.body.lr.ph:
201   br label %for.body
203 for.body:
204   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
205   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
206   %0 = load i8, i8* %arrayidx, align 1
207   %conv = zext i8 %0 to i32
208   %add = add nsw i32 %conv, 1
209   %conv1 = trunc i32 %add to i8
210   store i8 %conv1, i8* %arrayidx, align 1
211   %inc = add nsw i32 %i.04, 4
212   %cmp = icmp slt i32 %inc, 1431
213   br i1 %cmp, label %for.body, label %for.end
215 for.end:
216   ret void
219 ; CHECK-LABEL: @test_pos8_ri_slt
220 ; CHECK: loop0
221 ; a < b
222 define void @test_pos8_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
223 entry:
224   %cmp3 = icmp slt i32 %a, 22403
225   br i1 %cmp3, label %for.body.lr.ph, label %for.end
227 for.body.lr.ph:
228   br label %for.body
230 for.body:
231   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
232   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
233   %0 = load i8, i8* %arrayidx, align 1
234   %conv = zext i8 %0 to i32
235   %add = add nsw i32 %conv, 1
236   %conv1 = trunc i32 %add to i8
237   store i8 %conv1, i8* %arrayidx, align 1
238   %inc = add nsw i32 %i.04, 8
239   %cmp = icmp slt i32 %inc, 22403
240   br i1 %cmp, label %for.body, label %for.end
242 for.end:
243   ret void
246 ; CHECK-LABEL: @test_pos16_ri_slt
247 ; CHECK: loop0
248 ; a < b
249 define void @test_pos16_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
250 entry:
251   %cmp3 = icmp slt i32 %a, 21715
252   br i1 %cmp3, label %for.body.lr.ph, label %for.end
254 for.body.lr.ph:
255   br label %for.body
257 for.body:
258   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
259   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
260   %0 = load i8, i8* %arrayidx, align 1
261   %conv = zext i8 %0 to i32
262   %add = add nsw i32 %conv, 1
263   %conv1 = trunc i32 %add to i8
264   store i8 %conv1, i8* %arrayidx, align 1
265   %inc = add nsw i32 %i.04, 16
266   %cmp = icmp slt i32 %inc, 21715
267   br i1 %cmp, label %for.body, label %for.end
269 for.end:
270   ret void
273 ; CHECK-LABEL: @test_pos1_rr_slt
274 ; CHECK: loop0
275 ; a < b
276 define void @test_pos1_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
277 entry:
278   %cmp3 = icmp slt i32 %a, %b
279   br i1 %cmp3, label %for.body.lr.ph, label %for.end
281 for.body.lr.ph:
282   br label %for.body
284 for.body:
285   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
286   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
287   %0 = load i8, i8* %arrayidx, align 1
288   %conv = zext i8 %0 to i32
289   %add = add nsw i32 %conv, 1
290   %conv1 = trunc i32 %add to i8
291   store i8 %conv1, i8* %arrayidx, align 1
292   %inc = add nsw i32 %i.04, 1
293   %cmp = icmp slt i32 %inc, %b
294   br i1 %cmp, label %for.body, label %for.end
296 for.end:
297   ret void
300 ; CHECK-LABEL: @test_pos2_rr_slt
301 ; CHECK: loop0
302 ; a < b
303 define void @test_pos2_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
304 entry:
305   %cmp3 = icmp slt i32 %a, %b
306   br i1 %cmp3, label %for.body.lr.ph, label %for.end
308 for.body.lr.ph:
309   br label %for.body
311 for.body:
312   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
313   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
314   %0 = load i8, i8* %arrayidx, align 1
315   %conv = zext i8 %0 to i32
316   %add = add nsw i32 %conv, 1
317   %conv1 = trunc i32 %add to i8
318   store i8 %conv1, i8* %arrayidx, align 1
319   %inc = add nsw i32 %i.04, 2
320   %cmp = icmp slt i32 %inc, %b
321   br i1 %cmp, label %for.body, label %for.end
323 for.end:
324   ret void
327 ; CHECK-LABEL: @test_pos4_rr_slt
328 ; CHECK: loop0
329 ; a < b
330 define void @test_pos4_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
331 entry:
332   %cmp3 = icmp slt i32 %a, %b
333   br i1 %cmp3, label %for.body.lr.ph, label %for.end
335 for.body.lr.ph:
336   br label %for.body
338 for.body:
339   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
340   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
341   %0 = load i8, i8* %arrayidx, align 1
342   %conv = zext i8 %0 to i32
343   %add = add nsw i32 %conv, 1
344   %conv1 = trunc i32 %add to i8
345   store i8 %conv1, i8* %arrayidx, align 1
346   %inc = add nsw i32 %i.04, 4
347   %cmp = icmp slt i32 %inc, %b
348   br i1 %cmp, label %for.body, label %for.end
350 for.end:
351   ret void
354 ; CHECK-LABEL: @test_pos8_rr_slt
355 ; CHECK: loop0
356 ; a < b
357 define void @test_pos8_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
358 entry:
359   %cmp3 = icmp slt i32 %a, %b
360   br i1 %cmp3, label %for.body.lr.ph, label %for.end
362 for.body.lr.ph:
363   br label %for.body
365 for.body:
366   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
367   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
368   %0 = load i8, i8* %arrayidx, align 1
369   %conv = zext i8 %0 to i32
370   %add = add nsw i32 %conv, 1
371   %conv1 = trunc i32 %add to i8
372   store i8 %conv1, i8* %arrayidx, align 1
373   %inc = add nsw i32 %i.04, 8
374   %cmp = icmp slt i32 %inc, %b
375   br i1 %cmp, label %for.body, label %for.end
377 for.end:
378   ret void
381 ; CHECK-LABEL: @test_pos16_rr_slt
382 ; CHECK: loop0
383 ; a < b
384 define void @test_pos16_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
385 entry:
386   %cmp3 = icmp slt i32 %a, %b
387   br i1 %cmp3, label %for.body.lr.ph, label %for.end
389 for.body.lr.ph:
390   br label %for.body
392 for.body:
393   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
394   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
395   %0 = load i8, i8* %arrayidx, align 1
396   %conv = zext i8 %0 to i32
397   %add = add nsw i32 %conv, 1
398   %conv1 = trunc i32 %add to i8
399   store i8 %conv1, i8* %arrayidx, align 1
400   %inc = add nsw i32 %i.04, 16
401   %cmp = icmp slt i32 %inc, %b
402   br i1 %cmp, label %for.body, label %for.end
404 for.end:
405   ret void