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