Convert CodeGen/*/*.ll tests to use the new CHECK-LABEL for easier debugging. No...
[oota-llvm.git] / test / CodeGen / PowerPC / ctrloop-le.ll
1 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
2 target triple = "powerpc64-unknown-linux-gnu"
3 ; RUN: llc < %s -march=ppc64 | FileCheck %s
4
5 ; CHECK: test_pos1_ir_sle
6 ; CHECK: bdnz
7 ; a < b
8 define void @test_pos1_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
9 entry:
10   %cmp3 = icmp sle i32 28395, %b
11   br i1 %cmp3, label %for.body.lr.ph, label %for.end
12
13 for.body.lr.ph:                                   ; preds = %entry
14   br label %for.body
15
16 for.body:                                         ; preds = %for.body.lr.ph, %for.body
17   %i.04 = phi i32 [ 28395, %for.body.lr.ph ], [ %inc, %for.body ]
18   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
19   %0 = load i8* %arrayidx, align 1
20   %conv = zext i8 %0 to i32
21   %add = add nsw i32 %conv, 1
22   %conv1 = trunc i32 %add to i8
23   store i8 %conv1, i8* %arrayidx, align 1
24   %inc = add nsw i32 %i.04, 1
25   %cmp = icmp sle i32 %inc, %b
26   br i1 %cmp, label %for.body, label %for.end
27
28 for.end:                                          ; preds = %for.body, %entry
29   ret void
30 }
31
32
33
34 ; CHECK: test_pos2_ir_sle
35 ; FIXME: Support this loop!
36 ; CHECK-NOT: bdnz
37 ; a < b
38 define void @test_pos2_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
39 entry:
40   %cmp3 = icmp sle i32 9073, %b
41   br i1 %cmp3, label %for.body.lr.ph, label %for.end
42
43 for.body.lr.ph:                                   ; preds = %entry
44   br label %for.body
45
46 for.body:                                         ; preds = %for.body.lr.ph, %for.body
47   %i.04 = phi i32 [ 9073, %for.body.lr.ph ], [ %inc, %for.body ]
48   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
49   %0 = load i8* %arrayidx, align 1
50   %conv = zext i8 %0 to i32
51   %add = add nsw i32 %conv, 1
52   %conv1 = trunc i32 %add to i8
53   store i8 %conv1, i8* %arrayidx, align 1
54   %inc = add nsw i32 %i.04, 2
55   %cmp = icmp sle i32 %inc, %b
56   br i1 %cmp, label %for.body, label %for.end
57
58 for.end:                                          ; preds = %for.body, %entry
59   ret void
60 }
61
62
63
64 ; CHECK: test_pos4_ir_sle
65 ; FIXME: Support this loop!
66 ; CHECK-NOT: bdnz
67 ; a < b
68 define void @test_pos4_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
69 entry:
70   %cmp3 = icmp sle i32 21956, %b
71   br i1 %cmp3, label %for.body.lr.ph, label %for.end
72
73 for.body.lr.ph:                                   ; preds = %entry
74   br label %for.body
75
76 for.body:                                         ; preds = %for.body.lr.ph, %for.body
77   %i.04 = phi i32 [ 21956, %for.body.lr.ph ], [ %inc, %for.body ]
78   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
79   %0 = load i8* %arrayidx, align 1
80   %conv = zext i8 %0 to i32
81   %add = add nsw i32 %conv, 1
82   %conv1 = trunc i32 %add to i8
83   store i8 %conv1, i8* %arrayidx, align 1
84   %inc = add nsw i32 %i.04, 4
85   %cmp = icmp sle i32 %inc, %b
86   br i1 %cmp, label %for.body, label %for.end
87
88 for.end:                                          ; preds = %for.body, %entry
89   ret void
90 }
91
92
93
94 ; CHECK: test_pos8_ir_sle
95 ; FIXME: Support this loop!
96 ; CHECK-NOT: bdnz
97 ; a < b
98 define void @test_pos8_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
99 entry:
100   %cmp3 = icmp sle i32 16782, %b
101   br i1 %cmp3, label %for.body.lr.ph, label %for.end
102
103 for.body.lr.ph:                                   ; preds = %entry
104   br label %for.body
105
106 for.body:                                         ; preds = %for.body.lr.ph, %for.body
107   %i.04 = phi i32 [ 16782, %for.body.lr.ph ], [ %inc, %for.body ]
108   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
109   %0 = load i8* %arrayidx, align 1
110   %conv = zext i8 %0 to i32
111   %add = add nsw i32 %conv, 1
112   %conv1 = trunc i32 %add to i8
113   store i8 %conv1, i8* %arrayidx, align 1
114   %inc = add nsw i32 %i.04, 8
115   %cmp = icmp sle i32 %inc, %b
116   br i1 %cmp, label %for.body, label %for.end
117
118 for.end:                                          ; preds = %for.body, %entry
119   ret void
120 }
121
122
123
124 ; CHECK: test_pos16_ir_sle
125 ; FIXME: Support this loop!
126 ; CHECK-NOT: bdnz
127 ; a < b
128 define void @test_pos16_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
129 entry:
130   %cmp3 = icmp sle i32 19097, %b
131   br i1 %cmp3, label %for.body.lr.ph, label %for.end
132
133 for.body.lr.ph:                                   ; preds = %entry
134   br label %for.body
135
136 for.body:                                         ; preds = %for.body.lr.ph, %for.body
137   %i.04 = phi i32 [ 19097, %for.body.lr.ph ], [ %inc, %for.body ]
138   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
139   %0 = load i8* %arrayidx, align 1
140   %conv = zext i8 %0 to i32
141   %add = add nsw i32 %conv, 1
142   %conv1 = trunc i32 %add to i8
143   store i8 %conv1, i8* %arrayidx, align 1
144   %inc = add nsw i32 %i.04, 16
145   %cmp = icmp sle i32 %inc, %b
146   br i1 %cmp, label %for.body, label %for.end
147
148 for.end:                                          ; preds = %for.body, %entry
149   ret void
150 }
151
152
153
154 ; CHECK: test_pos1_ri_sle
155 ; CHECK: bdnz
156 ; a < b
157 define void @test_pos1_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
158 entry:
159   %cmp3 = icmp sle i32 %a, 14040
160   br i1 %cmp3, label %for.body.lr.ph, label %for.end
161
162 for.body.lr.ph:                                   ; preds = %entry
163   br label %for.body
164
165 for.body:                                         ; preds = %for.body.lr.ph, %for.body
166   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
167   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
168   %0 = load i8* %arrayidx, align 1
169   %conv = zext i8 %0 to i32
170   %add = add nsw i32 %conv, 1
171   %conv1 = trunc i32 %add to i8
172   store i8 %conv1, i8* %arrayidx, align 1
173   %inc = add nsw i32 %i.04, 1
174   %cmp = icmp sle i32 %inc, 14040
175   br i1 %cmp, label %for.body, label %for.end
176
177 for.end:                                          ; preds = %for.body, %entry
178   ret void
179 }
180
181
182
183 ; CHECK: test_pos2_ri_sle
184 ; CHECK: bdnz
185 ; a < b
186 define void @test_pos2_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
187 entry:
188   %cmp3 = icmp sle i32 %a, 13710
189   br i1 %cmp3, label %for.body.lr.ph, label %for.end
190
191 for.body.lr.ph:                                   ; preds = %entry
192   br label %for.body
193
194 for.body:                                         ; preds = %for.body.lr.ph, %for.body
195   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
196   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
197   %0 = load i8* %arrayidx, align 1
198   %conv = zext i8 %0 to i32
199   %add = add nsw i32 %conv, 1
200   %conv1 = trunc i32 %add to i8
201   store i8 %conv1, i8* %arrayidx, align 1
202   %inc = add nsw i32 %i.04, 2
203   %cmp = icmp sle i32 %inc, 13710
204   br i1 %cmp, label %for.body, label %for.end
205
206 for.end:                                          ; preds = %for.body, %entry
207   ret void
208 }
209
210
211
212 ; CHECK: test_pos4_ri_sle
213 ; CHECK: bdnz
214 ; a < b
215 define void @test_pos4_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
216 entry:
217   %cmp3 = icmp sle i32 %a, 9920
218   br i1 %cmp3, label %for.body.lr.ph, label %for.end
219
220 for.body.lr.ph:                                   ; preds = %entry
221   br label %for.body
222
223 for.body:                                         ; preds = %for.body.lr.ph, %for.body
224   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
225   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
226   %0 = load i8* %arrayidx, align 1
227   %conv = zext i8 %0 to i32
228   %add = add nsw i32 %conv, 1
229   %conv1 = trunc i32 %add to i8
230   store i8 %conv1, i8* %arrayidx, align 1
231   %inc = add nsw i32 %i.04, 4
232   %cmp = icmp sle i32 %inc, 9920
233   br i1 %cmp, label %for.body, label %for.end
234
235 for.end:                                          ; preds = %for.body, %entry
236   ret void
237 }
238
239
240
241 ; CHECK: test_pos8_ri_sle
242 ; CHECK: bdnz
243 ; a < b
244 define void @test_pos8_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
245 entry:
246   %cmp3 = icmp sle i32 %a, 18924
247   br i1 %cmp3, label %for.body.lr.ph, label %for.end
248
249 for.body.lr.ph:                                   ; preds = %entry
250   br label %for.body
251
252 for.body:                                         ; preds = %for.body.lr.ph, %for.body
253   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
254   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
255   %0 = load i8* %arrayidx, align 1
256   %conv = zext i8 %0 to i32
257   %add = add nsw i32 %conv, 1
258   %conv1 = trunc i32 %add to i8
259   store i8 %conv1, i8* %arrayidx, align 1
260   %inc = add nsw i32 %i.04, 8
261   %cmp = icmp sle i32 %inc, 18924
262   br i1 %cmp, label %for.body, label %for.end
263
264 for.end:                                          ; preds = %for.body, %entry
265   ret void
266 }
267
268
269
270 ; CHECK: test_pos16_ri_sle
271 ; CHECK: bdnz
272 ; a < b
273 define void @test_pos16_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
274 entry:
275   %cmp3 = icmp sle i32 %a, 11812
276   br i1 %cmp3, label %for.body.lr.ph, label %for.end
277
278 for.body.lr.ph:                                   ; preds = %entry
279   br label %for.body
280
281 for.body:                                         ; preds = %for.body.lr.ph, %for.body
282   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
283   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
284   %0 = load i8* %arrayidx, align 1
285   %conv = zext i8 %0 to i32
286   %add = add nsw i32 %conv, 1
287   %conv1 = trunc i32 %add to i8
288   store i8 %conv1, i8* %arrayidx, align 1
289   %inc = add nsw i32 %i.04, 16
290   %cmp = icmp sle i32 %inc, 11812
291   br i1 %cmp, label %for.body, label %for.end
292
293 for.end:                                          ; preds = %for.body, %entry
294   ret void
295 }
296
297
298
299 ; CHECK: test_pos1_rr_sle
300 ; FIXME: Support this loop!
301 ; CHECK-NOT: bdnz
302 ; a < b
303 define void @test_pos1_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
304 entry:
305   %cmp3 = icmp sle i32 %a, %b
306   br i1 %cmp3, label %for.body.lr.ph, label %for.end
307
308 for.body.lr.ph:                                   ; preds = %entry
309   br label %for.body
310
311 for.body:                                         ; preds = %for.body.lr.ph, %for.body
312   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
313   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
314   %0 = load 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, 1
320   %cmp = icmp sle i32 %inc, %b
321   br i1 %cmp, label %for.body, label %for.end
322
323 for.end:                                          ; preds = %for.body, %entry
324   ret void
325 }
326
327
328
329 ; CHECK: test_pos2_rr_sle
330 ; FIXME: Support this loop!
331 ; CHECK-NOT: bdnz
332 ; a < b
333 define void @test_pos2_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
334 entry:
335   %cmp3 = icmp sle i32 %a, %b
336   br i1 %cmp3, label %for.body.lr.ph, label %for.end
337
338 for.body.lr.ph:                                   ; preds = %entry
339   br label %for.body
340
341 for.body:                                         ; preds = %for.body.lr.ph, %for.body
342   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
343   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
344   %0 = load i8* %arrayidx, align 1
345   %conv = zext i8 %0 to i32
346   %add = add nsw i32 %conv, 1
347   %conv1 = trunc i32 %add to i8
348   store i8 %conv1, i8* %arrayidx, align 1
349   %inc = add nsw i32 %i.04, 2
350   %cmp = icmp sle i32 %inc, %b
351   br i1 %cmp, label %for.body, label %for.end
352
353 for.end:                                          ; preds = %for.body, %entry
354   ret void
355 }
356
357
358
359 ; CHECK: test_pos4_rr_sle
360 ; FIXME: Support this loop!
361 ; CHECK-NOT: bdnz
362 ; a < b
363 define void @test_pos4_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
364 entry:
365   %cmp3 = icmp sle i32 %a, %b
366   br i1 %cmp3, label %for.body.lr.ph, label %for.end
367
368 for.body.lr.ph:                                   ; preds = %entry
369   br label %for.body
370
371 for.body:                                         ; preds = %for.body.lr.ph, %for.body
372   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
373   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
374   %0 = load i8* %arrayidx, align 1
375   %conv = zext i8 %0 to i32
376   %add = add nsw i32 %conv, 1
377   %conv1 = trunc i32 %add to i8
378   store i8 %conv1, i8* %arrayidx, align 1
379   %inc = add nsw i32 %i.04, 4
380   %cmp = icmp sle i32 %inc, %b
381   br i1 %cmp, label %for.body, label %for.end
382
383 for.end:                                          ; preds = %for.body, %entry
384   ret void
385 }
386
387
388
389 ; CHECK: test_pos8_rr_sle
390 ; FIXME: Support this loop!
391 ; CHECK-NOT: bdnz
392 ; a < b
393 define void @test_pos8_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
394 entry:
395   %cmp3 = icmp sle i32 %a, %b
396   br i1 %cmp3, label %for.body.lr.ph, label %for.end
397
398 for.body.lr.ph:                                   ; preds = %entry
399   br label %for.body
400
401 for.body:                                         ; preds = %for.body.lr.ph, %for.body
402   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
403   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
404   %0 = load i8* %arrayidx, align 1
405   %conv = zext i8 %0 to i32
406   %add = add nsw i32 %conv, 1
407   %conv1 = trunc i32 %add to i8
408   store i8 %conv1, i8* %arrayidx, align 1
409   %inc = add nsw i32 %i.04, 8
410   %cmp = icmp sle i32 %inc, %b
411   br i1 %cmp, label %for.body, label %for.end
412
413 for.end:                                          ; preds = %for.body, %entry
414   ret void
415 }
416
417
418
419 ; CHECK: test_pos16_rr_sle
420 ; FIXME: Support this loop!
421 ; CHECK-NOT: bdnz
422 ; a < b
423 define void @test_pos16_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
424 entry:
425   %cmp3 = icmp sle i32 %a, %b
426   br i1 %cmp3, label %for.body.lr.ph, label %for.end
427
428 for.body.lr.ph:                                   ; preds = %entry
429   br label %for.body
430
431 for.body:                                         ; preds = %for.body.lr.ph, %for.body
432   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
433   %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
434   %0 = load i8* %arrayidx, align 1
435   %conv = zext i8 %0 to i32
436   %add = add nsw i32 %conv, 1
437   %conv1 = trunc i32 %add to i8
438   store i8 %conv1, i8* %arrayidx, align 1
439   %inc = add nsw i32 %i.04, 16
440   %cmp = icmp sle i32 %inc, %b
441   br i1 %cmp, label %for.body, label %for.end
442
443 for.end:                                          ; preds = %for.body, %entry
444   ret void
445 }
446