blob: 448716d6f419797c436f3b5b9be790902aa26655 [file] [log] [blame]
Hal Finkelb1fd3cd2013-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_slt
6; CHECK: bdnz
7; a < b
8define void @test_pos1_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
9entry:
10 %cmp3 = icmp slt i32 8531, %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 [ 8531, %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 slt 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_slt
35; FIXME: Support this loop!
36; CHECK-NOT: bdnz
37; a < b
38define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
39entry:
40 %cmp3 = icmp slt i32 9152, %b
41 br i1 %cmp3, label %for.body.lr.ph, label %for.end
42
43for.body.lr.ph: ; preds = %entry
44 br label %for.body
45
46for.body: ; preds = %for.body.lr.ph, %for.body
47 %i.04 = phi i32 [ 9152, %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 slt i32 %inc, %b
56 br i1 %cmp, label %for.body, label %for.end
57
58for.end: ; preds = %for.body, %entry
59 ret void
60}
61
62
63
64; CHECK: test_pos4_ir_slt
65; FIXME: Support this loop!
66; CHECK-NOT: bdnz
67; a < b
68define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
69entry:
70 %cmp3 = icmp slt i32 18851, %b
71 br i1 %cmp3, label %for.body.lr.ph, label %for.end
72
73for.body.lr.ph: ; preds = %entry
74 br label %for.body
75
76for.body: ; preds = %for.body.lr.ph, %for.body
77 %i.04 = phi i32 [ 18851, %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 slt i32 %inc, %b
86 br i1 %cmp, label %for.body, label %for.end
87
88for.end: ; preds = %for.body, %entry
89 ret void
90}
91
92
93
94; CHECK: test_pos8_ir_slt
95; FIXME: Support this loop!
96; CHECK-NOT: bdnz
97; a < b
98define void @test_pos8_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
99entry:
100 %cmp3 = icmp slt i32 25466, %b
101 br i1 %cmp3, label %for.body.lr.ph, label %for.end
102
103for.body.lr.ph: ; preds = %entry
104 br label %for.body
105
106for.body: ; preds = %for.body.lr.ph, %for.body
107 %i.04 = phi i32 [ 25466, %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 slt i32 %inc, %b
116 br i1 %cmp, label %for.body, label %for.end
117
118for.end: ; preds = %for.body, %entry
119 ret void
120}
121
122
123
124; CHECK: test_pos16_ir_slt
125; FIXME: Support this loop!
126; CHECK-NOT: bdnz
127; a < b
128define void @test_pos16_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
129entry:
130 %cmp3 = icmp slt i32 9295, %b
131 br i1 %cmp3, label %for.body.lr.ph, label %for.end
132
133for.body.lr.ph: ; preds = %entry
134 br label %for.body
135
136for.body: ; preds = %for.body.lr.ph, %for.body
137 %i.04 = phi i32 [ 9295, %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 slt i32 %inc, %b
146 br i1 %cmp, label %for.body, label %for.end
147
148for.end: ; preds = %for.body, %entry
149 ret void
150}
151
152
153
154; CHECK: test_pos1_ri_slt
155; CHECK: bdnz
156; a < b
157define void @test_pos1_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
158entry:
159 %cmp3 = icmp slt i32 %a, 31236
160 br i1 %cmp3, label %for.body.lr.ph, label %for.end
161
162for.body.lr.ph: ; preds = %entry
163 br label %for.body
164
165for.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 slt i32 %inc, 31236
175 br i1 %cmp, label %for.body, label %for.end
176
177for.end: ; preds = %for.body, %entry
178 ret void
179}
180
181
182
183; CHECK: test_pos2_ri_slt
184; CHECK: bdnz
185; a < b
186define void @test_pos2_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
187entry:
188 %cmp3 = icmp slt i32 %a, 22653
189 br i1 %cmp3, label %for.body.lr.ph, label %for.end
190
191for.body.lr.ph: ; preds = %entry
192 br label %for.body
193
194for.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 slt i32 %inc, 22653
204 br i1 %cmp, label %for.body, label %for.end
205
206for.end: ; preds = %for.body, %entry
207 ret void
208}
209
210
211
212; CHECK: test_pos4_ri_slt
213; CHECK: bdnz
214; a < b
215define void @test_pos4_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
216entry:
217 %cmp3 = icmp slt i32 %a, 1431
218 br i1 %cmp3, label %for.body.lr.ph, label %for.end
219
220for.body.lr.ph: ; preds = %entry
221 br label %for.body
222
223for.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 slt i32 %inc, 1431
233 br i1 %cmp, label %for.body, label %for.end
234
235for.end: ; preds = %for.body, %entry
236 ret void
237}
238
239
240
241; CHECK: test_pos8_ri_slt
242; CHECK: bdnz
243; a < b
244define void @test_pos8_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
245entry:
246 %cmp3 = icmp slt i32 %a, 22403
247 br i1 %cmp3, label %for.body.lr.ph, label %for.end
248
249for.body.lr.ph: ; preds = %entry
250 br label %for.body
251
252for.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 slt i32 %inc, 22403
262 br i1 %cmp, label %for.body, label %for.end
263
264for.end: ; preds = %for.body, %entry
265 ret void
266}
267
268
269
270; CHECK: test_pos16_ri_slt
271; CHECK: bdnz
272; a < b
273define void @test_pos16_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
274entry:
275 %cmp3 = icmp slt i32 %a, 21715
276 br i1 %cmp3, label %for.body.lr.ph, label %for.end
277
278for.body.lr.ph: ; preds = %entry
279 br label %for.body
280
281for.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 slt i32 %inc, 21715
291 br i1 %cmp, label %for.body, label %for.end
292
293for.end: ; preds = %for.body, %entry
294 ret void
295}
296
297
298
299; CHECK: test_pos1_rr_slt
300; CHECK: bdnz
301; a < b
302define void @test_pos1_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
303entry:
304 %cmp3 = icmp slt i32 %a, %b
305 br i1 %cmp3, label %for.body.lr.ph, label %for.end
306
307for.body.lr.ph: ; preds = %entry
308 br label %for.body
309
310for.body: ; preds = %for.body.lr.ph, %for.body
311 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
312 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
313 %0 = load i8* %arrayidx, align 1
314 %conv = zext i8 %0 to i32
315 %add = add nsw i32 %conv, 1
316 %conv1 = trunc i32 %add to i8
317 store i8 %conv1, i8* %arrayidx, align 1
318 %inc = add nsw i32 %i.04, 1
319 %cmp = icmp slt i32 %inc, %b
320 br i1 %cmp, label %for.body, label %for.end
321
322for.end: ; preds = %for.body, %entry
323 ret void
324}
325
326
327
328; CHECK: test_pos2_rr_slt
329; FIXME: Support this loop!
330; CHECK-NOT: bdnz
331; a < b
332define void @test_pos2_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
333entry:
334 %cmp3 = icmp slt i32 %a, %b
335 br i1 %cmp3, label %for.body.lr.ph, label %for.end
336
337for.body.lr.ph: ; preds = %entry
338 br label %for.body
339
340for.body: ; preds = %for.body.lr.ph, %for.body
341 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
342 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
343 %0 = load i8* %arrayidx, align 1
344 %conv = zext i8 %0 to i32
345 %add = add nsw i32 %conv, 1
346 %conv1 = trunc i32 %add to i8
347 store i8 %conv1, i8* %arrayidx, align 1
348 %inc = add nsw i32 %i.04, 2
349 %cmp = icmp slt i32 %inc, %b
350 br i1 %cmp, label %for.body, label %for.end
351
352for.end: ; preds = %for.body, %entry
353 ret void
354}
355
356
357
358; CHECK: test_pos4_rr_slt
359; FIXME: Support this loop!
360; CHECK-NOT: bdnz
361; a < b
362define void @test_pos4_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
363entry:
364 %cmp3 = icmp slt i32 %a, %b
365 br i1 %cmp3, label %for.body.lr.ph, label %for.end
366
367for.body.lr.ph: ; preds = %entry
368 br label %for.body
369
370for.body: ; preds = %for.body.lr.ph, %for.body
371 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
372 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
373 %0 = load i8* %arrayidx, align 1
374 %conv = zext i8 %0 to i32
375 %add = add nsw i32 %conv, 1
376 %conv1 = trunc i32 %add to i8
377 store i8 %conv1, i8* %arrayidx, align 1
378 %inc = add nsw i32 %i.04, 4
379 %cmp = icmp slt i32 %inc, %b
380 br i1 %cmp, label %for.body, label %for.end
381
382for.end: ; preds = %for.body, %entry
383 ret void
384}
385
386
387
388; CHECK: test_pos8_rr_slt
389; FIXME: Support this loop!
390; CHECK-NOT: bdnz
391; a < b
392define void @test_pos8_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
393entry:
394 %cmp3 = icmp slt i32 %a, %b
395 br i1 %cmp3, label %for.body.lr.ph, label %for.end
396
397for.body.lr.ph: ; preds = %entry
398 br label %for.body
399
400for.body: ; preds = %for.body.lr.ph, %for.body
401 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
402 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
403 %0 = load i8* %arrayidx, align 1
404 %conv = zext i8 %0 to i32
405 %add = add nsw i32 %conv, 1
406 %conv1 = trunc i32 %add to i8
407 store i8 %conv1, i8* %arrayidx, align 1
408 %inc = add nsw i32 %i.04, 8
409 %cmp = icmp slt i32 %inc, %b
410 br i1 %cmp, label %for.body, label %for.end
411
412for.end: ; preds = %for.body, %entry
413 ret void
414}
415
416
417
418; CHECK: test_pos16_rr_slt
419; FIXME: Support this loop!
420; CHECK-NOT: bdnz
421; a < b
422define void @test_pos16_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
423entry:
424 %cmp3 = icmp slt i32 %a, %b
425 br i1 %cmp3, label %for.body.lr.ph, label %for.end
426
427for.body.lr.ph: ; preds = %entry
428 br label %for.body
429
430for.body: ; preds = %for.body.lr.ph, %for.body
431 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
432 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
433 %0 = load i8* %arrayidx, align 1
434 %conv = zext i8 %0 to i32
435 %add = add nsw i32 %conv, 1
436 %conv1 = trunc i32 %add to i8
437 store i8 %conv1, i8* %arrayidx, align 1
438 %inc = add nsw i32 %i.04, 16
439 %cmp = icmp slt i32 %inc, %b
440 br i1 %cmp, label %for.body, label %for.end
441
442for.end: ; preds = %for.body, %entry
443 ret void
444}
445