Fix typo.
[oota-llvm.git] / test / CodeGen / PowerPC / ctrloop-ne.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_ne
6 ; CHECK: bdnz
7 ; a < b
8 define void @test_pos1_ir_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
9 entry:
10   %cmp3 = icmp slt i32 32623, %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 [ 32623, %for.body.lr.ph ], [ %inc, %for.body ]
18   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
19   %0 = load i8, 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 ne 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_ne
35 ; FIXME: Support this loop!
36 ; CHECK-NOT: bdnz
37 ; a < b
38 define void @test_pos2_ir_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
39 entry:
40   %cmp3 = icmp slt i32 29554, %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 [ 29554, %for.body.lr.ph ], [ %inc, %for.body ]
48   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
49   %0 = load i8, 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 ne 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_ne
65 ; FIXME: Support this loop!
66 ; CHECK-NOT: bdnz
67 ; a < b
68 define void @test_pos4_ir_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
69 entry:
70   %cmp3 = icmp slt i32 15692, %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 [ 15692, %for.body.lr.ph ], [ %inc, %for.body ]
78   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
79   %0 = load i8, 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 ne 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_ne
95 ; FIXME: Support this loop!
96 ; CHECK-NOT: bdnz
97 ; a < b
98 define void @test_pos8_ir_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
99 entry:
100   %cmp3 = icmp slt i32 10449, %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 [ 10449, %for.body.lr.ph ], [ %inc, %for.body ]
108   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
109   %0 = load i8, 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 ne 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_ne
125 ; FIXME: Support this loop!
126 ; CHECK-NOT: bdnz
127 ; a < b
128 define void @test_pos16_ir_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
129 entry:
130   %cmp3 = icmp slt i32 32087, %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 [ 32087, %for.body.lr.ph ], [ %inc, %for.body ]
138   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
139   %0 = load i8, 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 ne 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_ne
155 ; CHECK: bdnz
156 ; a < b
157 define void @test_pos1_ri_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
158 entry:
159   %cmp3 = icmp slt i32 %a, 3472
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, i8* %p, i32 %i.04
168   %0 = load i8, 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 ne i32 %inc, 3472
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_ne
184 ; FIXME: Support this loop!
185 ; CHECK-NOT: bdnz
186 ; a < b
187 define void @test_pos2_ri_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
188 entry:
189   %cmp3 = icmp slt i32 %a, 8730
190   br i1 %cmp3, label %for.body.lr.ph, label %for.end
191
192 for.body.lr.ph:                                   ; preds = %entry
193   br label %for.body
194
195 for.body:                                         ; preds = %for.body.lr.ph, %for.body
196   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
197   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
198   %0 = load i8, i8* %arrayidx, align 1
199   %conv = zext i8 %0 to i32
200   %add = add nsw i32 %conv, 1
201   %conv1 = trunc i32 %add to i8
202   store i8 %conv1, i8* %arrayidx, align 1
203   %inc = add nsw i32 %i.04, 2
204   %cmp = icmp ne i32 %inc, 8730
205   br i1 %cmp, label %for.body, label %for.end
206
207 for.end:                                          ; preds = %for.body, %entry
208   ret void
209 }
210
211
212
213 ; CHECK: test_pos4_ri_ne
214 ; FIXME: Support this loop!
215 ; CHECK-NOT: bdnz
216 ; a < b
217 define void @test_pos4_ri_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
218 entry:
219   %cmp3 = icmp slt i32 %a, 1493
220   br i1 %cmp3, label %for.body.lr.ph, label %for.end
221
222 for.body.lr.ph:                                   ; preds = %entry
223   br label %for.body
224
225 for.body:                                         ; preds = %for.body.lr.ph, %for.body
226   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
227   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
228   %0 = load i8, i8* %arrayidx, align 1
229   %conv = zext i8 %0 to i32
230   %add = add nsw i32 %conv, 1
231   %conv1 = trunc i32 %add to i8
232   store i8 %conv1, i8* %arrayidx, align 1
233   %inc = add nsw i32 %i.04, 4
234   %cmp = icmp ne i32 %inc, 1493
235   br i1 %cmp, label %for.body, label %for.end
236
237 for.end:                                          ; preds = %for.body, %entry
238   ret void
239 }
240
241
242
243 ; CHECK: test_pos8_ri_ne
244 ; FIXME: Support this loop!
245 ; CHECK-NOT: bdnz
246 ; a < b
247 define void @test_pos8_ri_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
248 entry:
249   %cmp3 = icmp slt i32 %a, 1706
250   br i1 %cmp3, label %for.body.lr.ph, label %for.end
251
252 for.body.lr.ph:                                   ; preds = %entry
253   br label %for.body
254
255 for.body:                                         ; preds = %for.body.lr.ph, %for.body
256   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
257   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
258   %0 = load i8, i8* %arrayidx, align 1
259   %conv = zext i8 %0 to i32
260   %add = add nsw i32 %conv, 1
261   %conv1 = trunc i32 %add to i8
262   store i8 %conv1, i8* %arrayidx, align 1
263   %inc = add nsw i32 %i.04, 8
264   %cmp = icmp ne i32 %inc, 1706
265   br i1 %cmp, label %for.body, label %for.end
266
267 for.end:                                          ; preds = %for.body, %entry
268   ret void
269 }
270
271
272
273 ; CHECK: test_pos16_ri_ne
274 ; FIXME: Support this loop!
275 ; CHECK-NOT: bdnz
276 ; a < b
277 define void @test_pos16_ri_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
278 entry:
279   %cmp3 = icmp slt i32 %a, 1886
280   br i1 %cmp3, label %for.body.lr.ph, label %for.end
281
282 for.body.lr.ph:                                   ; preds = %entry
283   br label %for.body
284
285 for.body:                                         ; preds = %for.body.lr.ph, %for.body
286   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
287   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
288   %0 = load i8, i8* %arrayidx, align 1
289   %conv = zext i8 %0 to i32
290   %add = add nsw i32 %conv, 1
291   %conv1 = trunc i32 %add to i8
292   store i8 %conv1, i8* %arrayidx, align 1
293   %inc = add nsw i32 %i.04, 16
294   %cmp = icmp ne i32 %inc, 1886
295   br i1 %cmp, label %for.body, label %for.end
296
297 for.end:                                          ; preds = %for.body, %entry
298   ret void
299 }
300
301
302
303 ; CHECK: test_pos1_rr_ne
304 ; CHECK: bdnz
305 ; a < b
306 define void @test_pos1_rr_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
307 entry:
308   %cmp3 = icmp slt i32 %a, %b
309   br i1 %cmp3, label %for.body.lr.ph, label %for.end
310
311 for.body.lr.ph:                                   ; preds = %entry
312   br label %for.body
313
314 for.body:                                         ; preds = %for.body.lr.ph, %for.body
315   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
316   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
317   %0 = load i8, i8* %arrayidx, align 1
318   %conv = zext i8 %0 to i32
319   %add = add nsw i32 %conv, 1
320   %conv1 = trunc i32 %add to i8
321   store i8 %conv1, i8* %arrayidx, align 1
322   %inc = add nsw i32 %i.04, 1
323   %cmp = icmp ne i32 %inc, %b
324   br i1 %cmp, label %for.body, label %for.end
325
326 for.end:                                          ; preds = %for.body, %entry
327   ret void
328 }
329
330
331
332 ; CHECK: test_pos2_rr_ne
333 ; FIXME: Support this loop!
334 ; CHECK-NOT: bdnz
335 ; a < b
336 define void @test_pos2_rr_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
337 entry:
338   %cmp3 = icmp slt i32 %a, %b
339   br i1 %cmp3, label %for.body.lr.ph, label %for.end
340
341 for.body.lr.ph:                                   ; preds = %entry
342   br label %for.body
343
344 for.body:                                         ; preds = %for.body.lr.ph, %for.body
345   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
346   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
347   %0 = load i8, i8* %arrayidx, align 1
348   %conv = zext i8 %0 to i32
349   %add = add nsw i32 %conv, 1
350   %conv1 = trunc i32 %add to i8
351   store i8 %conv1, i8* %arrayidx, align 1
352   %inc = add nsw i32 %i.04, 2
353   %cmp = icmp ne i32 %inc, %b
354   br i1 %cmp, label %for.body, label %for.end
355
356 for.end:                                          ; preds = %for.body, %entry
357   ret void
358 }
359
360
361
362 ; CHECK: test_pos4_rr_ne
363 ; FIXME: Support this loop!
364 ; CHECK-NOT: bdnz
365 ; a < b
366 define void @test_pos4_rr_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
367 entry:
368   %cmp3 = icmp slt i32 %a, %b
369   br i1 %cmp3, label %for.body.lr.ph, label %for.end
370
371 for.body.lr.ph:                                   ; preds = %entry
372   br label %for.body
373
374 for.body:                                         ; preds = %for.body.lr.ph, %for.body
375   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
376   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
377   %0 = load i8, i8* %arrayidx, align 1
378   %conv = zext i8 %0 to i32
379   %add = add nsw i32 %conv, 1
380   %conv1 = trunc i32 %add to i8
381   store i8 %conv1, i8* %arrayidx, align 1
382   %inc = add nsw i32 %i.04, 4
383   %cmp = icmp ne i32 %inc, %b
384   br i1 %cmp, label %for.body, label %for.end
385
386 for.end:                                          ; preds = %for.body, %entry
387   ret void
388 }
389
390
391
392 ; CHECK: test_pos8_rr_ne
393 ; FIXME: Support this loop!
394 ; CHECK-NOT: bdnz
395 ; a < b
396 define void @test_pos8_rr_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
397 entry:
398   %cmp3 = icmp slt i32 %a, %b
399   br i1 %cmp3, label %for.body.lr.ph, label %for.end
400
401 for.body.lr.ph:                                   ; preds = %entry
402   br label %for.body
403
404 for.body:                                         ; preds = %for.body.lr.ph, %for.body
405   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
406   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
407   %0 = load i8, i8* %arrayidx, align 1
408   %conv = zext i8 %0 to i32
409   %add = add nsw i32 %conv, 1
410   %conv1 = trunc i32 %add to i8
411   store i8 %conv1, i8* %arrayidx, align 1
412   %inc = add nsw i32 %i.04, 8
413   %cmp = icmp ne i32 %inc, %b
414   br i1 %cmp, label %for.body, label %for.end
415
416 for.end:                                          ; preds = %for.body, %entry
417   ret void
418 }
419
420
421
422 ; CHECK: test_pos16_rr_ne
423 ; FIXME: Support this loop!
424 ; CHECK-NOT: bdnz
425 ; a < b
426 define void @test_pos16_rr_ne(i8* nocapture %p, i32 %a, i32 %b) nounwind {
427 entry:
428   %cmp3 = icmp slt i32 %a, %b
429   br i1 %cmp3, label %for.body.lr.ph, label %for.end
430
431 for.body.lr.ph:                                   ; preds = %entry
432   br label %for.body
433
434 for.body:                                         ; preds = %for.body.lr.ph, %for.body
435   %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
436   %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
437   %0 = load i8, i8* %arrayidx, align 1
438   %conv = zext i8 %0 to i32
439   %add = add nsw i32 %conv, 1
440   %conv1 = trunc i32 %add to i8
441   store i8 %conv1, i8* %arrayidx, align 1
442   %inc = add nsw i32 %i.04, 16
443   %cmp = icmp ne i32 %inc, %b
444   br i1 %cmp, label %for.body, label %for.end
445
446 for.end:                                          ; preds = %for.body, %entry
447   ret void
448 }
449