blob: a9dc42c1c971e609b2511756b528a215183b86d5 [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
Hal Finkel34974ed2014-04-12 21:52:38 +00005; XFAIL: *
6; SE needs improvement
7
Hal Finkel25c19922013-05-15 21:37:41 +00008; CHECK: test_pos1_ir_slt
9; CHECK: bdnz
10; a < b
11define void @test_pos1_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
12entry:
13 %cmp3 = icmp slt i32 8531, %b
14 br i1 %cmp3, label %for.body.lr.ph, label %for.end
15
16for.body.lr.ph: ; preds = %entry
17 br label %for.body
18
19for.body: ; preds = %for.body.lr.ph, %for.body
20 %i.04 = phi i32 [ 8531, %for.body.lr.ph ], [ %inc, %for.body ]
21 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
22 %0 = load i8* %arrayidx, align 1
23 %conv = zext i8 %0 to i32
24 %add = add nsw i32 %conv, 1
25 %conv1 = trunc i32 %add to i8
26 store i8 %conv1, i8* %arrayidx, align 1
27 %inc = add nsw i32 %i.04, 1
28 %cmp = icmp slt i32 %inc, %b
29 br i1 %cmp, label %for.body, label %for.end
30
31for.end: ; preds = %for.body, %entry
32 ret void
33}
34
35
36
37; CHECK: test_pos2_ir_slt
38; FIXME: Support this loop!
Andrew Trick1bda7212013-10-19 00:14:04 +000039; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +000040; a < b
41define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
42entry:
43 %cmp3 = icmp slt i32 9152, %b
44 br i1 %cmp3, label %for.body.lr.ph, label %for.end
45
46for.body.lr.ph: ; preds = %entry
47 br label %for.body
48
49for.body: ; preds = %for.body.lr.ph, %for.body
50 %i.04 = phi i32 [ 9152, %for.body.lr.ph ], [ %inc, %for.body ]
51 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
52 %0 = load i8* %arrayidx, align 1
53 %conv = zext i8 %0 to i32
54 %add = add nsw i32 %conv, 1
55 %conv1 = trunc i32 %add to i8
56 store i8 %conv1, i8* %arrayidx, align 1
57 %inc = add nsw i32 %i.04, 2
58 %cmp = icmp slt i32 %inc, %b
59 br i1 %cmp, label %for.body, label %for.end
60
61for.end: ; preds = %for.body, %entry
62 ret void
63}
64
65
66
67; CHECK: test_pos4_ir_slt
68; FIXME: Support this loop!
Andrew Trick1bda7212013-10-19 00:14:04 +000069; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +000070; a < b
71define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
72entry:
73 %cmp3 = icmp slt i32 18851, %b
74 br i1 %cmp3, label %for.body.lr.ph, label %for.end
75
76for.body.lr.ph: ; preds = %entry
77 br label %for.body
78
79for.body: ; preds = %for.body.lr.ph, %for.body
80 %i.04 = phi i32 [ 18851, %for.body.lr.ph ], [ %inc, %for.body ]
81 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
82 %0 = load i8* %arrayidx, align 1
83 %conv = zext i8 %0 to i32
84 %add = add nsw i32 %conv, 1
85 %conv1 = trunc i32 %add to i8
86 store i8 %conv1, i8* %arrayidx, align 1
87 %inc = add nsw i32 %i.04, 4
88 %cmp = icmp slt i32 %inc, %b
89 br i1 %cmp, label %for.body, label %for.end
90
91for.end: ; preds = %for.body, %entry
92 ret void
93}
94
95
96
97; CHECK: test_pos8_ir_slt
Andrew Trick1bda7212013-10-19 00:14:04 +000098; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +000099; a < b
100define void @test_pos8_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
101entry:
102 %cmp3 = icmp slt i32 25466, %b
103 br i1 %cmp3, label %for.body.lr.ph, label %for.end
104
105for.body.lr.ph: ; preds = %entry
106 br label %for.body
107
108for.body: ; preds = %for.body.lr.ph, %for.body
109 %i.04 = phi i32 [ 25466, %for.body.lr.ph ], [ %inc, %for.body ]
110 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
111 %0 = load i8* %arrayidx, align 1
112 %conv = zext i8 %0 to i32
113 %add = add nsw i32 %conv, 1
114 %conv1 = trunc i32 %add to i8
115 store i8 %conv1, i8* %arrayidx, align 1
116 %inc = add nsw i32 %i.04, 8
117 %cmp = icmp slt i32 %inc, %b
118 br i1 %cmp, label %for.body, label %for.end
119
120for.end: ; preds = %for.body, %entry
121 ret void
122}
123
124
125
126; CHECK: test_pos16_ir_slt
Andrew Trick1bda7212013-10-19 00:14:04 +0000127; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +0000128; a < b
129define void @test_pos16_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
130entry:
131 %cmp3 = icmp slt i32 9295, %b
132 br i1 %cmp3, label %for.body.lr.ph, label %for.end
133
134for.body.lr.ph: ; preds = %entry
135 br label %for.body
136
137for.body: ; preds = %for.body.lr.ph, %for.body
138 %i.04 = phi i32 [ 9295, %for.body.lr.ph ], [ %inc, %for.body ]
139 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
140 %0 = load i8* %arrayidx, align 1
141 %conv = zext i8 %0 to i32
142 %add = add nsw i32 %conv, 1
143 %conv1 = trunc i32 %add to i8
144 store i8 %conv1, i8* %arrayidx, align 1
145 %inc = add nsw i32 %i.04, 16
146 %cmp = icmp slt i32 %inc, %b
147 br i1 %cmp, label %for.body, label %for.end
148
149for.end: ; preds = %for.body, %entry
150 ret void
151}
152
153
154
155; CHECK: test_pos1_ri_slt
156; CHECK: bdnz
157; a < b
158define void @test_pos1_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
159entry:
160 %cmp3 = icmp slt i32 %a, 31236
161 br i1 %cmp3, label %for.body.lr.ph, label %for.end
162
163for.body.lr.ph: ; preds = %entry
164 br label %for.body
165
166for.body: ; preds = %for.body.lr.ph, %for.body
167 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
168 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
169 %0 = load i8* %arrayidx, align 1
170 %conv = zext i8 %0 to i32
171 %add = add nsw i32 %conv, 1
172 %conv1 = trunc i32 %add to i8
173 store i8 %conv1, i8* %arrayidx, align 1
174 %inc = add nsw i32 %i.04, 1
175 %cmp = icmp slt i32 %inc, 31236
176 br i1 %cmp, label %for.body, label %for.end
177
178for.end: ; preds = %for.body, %entry
179 ret void
180}
181
182
183
184; CHECK: test_pos2_ri_slt
185; CHECK: bdnz
186; a < b
187define void @test_pos2_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
188entry:
189 %cmp3 = icmp slt i32 %a, 22653
190 br i1 %cmp3, label %for.body.lr.ph, label %for.end
191
192for.body.lr.ph: ; preds = %entry
193 br label %for.body
194
195for.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* %p, i32 %i.04
198 %0 = load 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 slt i32 %inc, 22653
205 br i1 %cmp, label %for.body, label %for.end
206
207for.end: ; preds = %for.body, %entry
208 ret void
209}
210
211
212
213; CHECK: test_pos4_ri_slt
214; CHECK: bdnz
215; a < b
216define void @test_pos4_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
217entry:
218 %cmp3 = icmp slt i32 %a, 1431
219 br i1 %cmp3, label %for.body.lr.ph, label %for.end
220
221for.body.lr.ph: ; preds = %entry
222 br label %for.body
223
224for.body: ; preds = %for.body.lr.ph, %for.body
225 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
226 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
227 %0 = load i8* %arrayidx, align 1
228 %conv = zext i8 %0 to i32
229 %add = add nsw i32 %conv, 1
230 %conv1 = trunc i32 %add to i8
231 store i8 %conv1, i8* %arrayidx, align 1
232 %inc = add nsw i32 %i.04, 4
233 %cmp = icmp slt i32 %inc, 1431
234 br i1 %cmp, label %for.body, label %for.end
235
236for.end: ; preds = %for.body, %entry
237 ret void
238}
239
240
241
242; CHECK: test_pos8_ri_slt
243; CHECK: bdnz
244; a < b
245define void @test_pos8_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
246entry:
247 %cmp3 = icmp slt i32 %a, 22403
248 br i1 %cmp3, label %for.body.lr.ph, label %for.end
249
250for.body.lr.ph: ; preds = %entry
251 br label %for.body
252
253for.body: ; preds = %for.body.lr.ph, %for.body
254 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
255 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
256 %0 = load i8* %arrayidx, align 1
257 %conv = zext i8 %0 to i32
258 %add = add nsw i32 %conv, 1
259 %conv1 = trunc i32 %add to i8
260 store i8 %conv1, i8* %arrayidx, align 1
261 %inc = add nsw i32 %i.04, 8
262 %cmp = icmp slt i32 %inc, 22403
263 br i1 %cmp, label %for.body, label %for.end
264
265for.end: ; preds = %for.body, %entry
266 ret void
267}
268
269
270
271; CHECK: test_pos16_ri_slt
272; CHECK: bdnz
273; a < b
274define void @test_pos16_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
275entry:
276 %cmp3 = icmp slt i32 %a, 21715
277 br i1 %cmp3, label %for.body.lr.ph, label %for.end
278
279for.body.lr.ph: ; preds = %entry
280 br label %for.body
281
282for.body: ; preds = %for.body.lr.ph, %for.body
283 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
284 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
285 %0 = load i8* %arrayidx, align 1
286 %conv = zext i8 %0 to i32
287 %add = add nsw i32 %conv, 1
288 %conv1 = trunc i32 %add to i8
289 store i8 %conv1, i8* %arrayidx, align 1
290 %inc = add nsw i32 %i.04, 16
291 %cmp = icmp slt i32 %inc, 21715
292 br i1 %cmp, label %for.body, label %for.end
293
294for.end: ; preds = %for.body, %entry
295 ret void
296}
297
298
299
300; CHECK: test_pos1_rr_slt
301; CHECK: bdnz
302; a < b
303define void @test_pos1_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
304entry:
305 %cmp3 = icmp slt i32 %a, %b
306 br i1 %cmp3, label %for.body.lr.ph, label %for.end
307
308for.body.lr.ph: ; preds = %entry
309 br label %for.body
310
311for.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 slt i32 %inc, %b
321 br i1 %cmp, label %for.body, label %for.end
322
323for.end: ; preds = %for.body, %entry
324 ret void
325}
326
327
328
329; CHECK: test_pos2_rr_slt
Andrew Trick1bda7212013-10-19 00:14:04 +0000330; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +0000331; 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
Andrew Trick1bda7212013-10-19 00:14:04 +0000359; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +0000360; a < b
361define void @test_pos4_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
362entry:
363 %cmp3 = icmp slt i32 %a, %b
364 br i1 %cmp3, label %for.body.lr.ph, label %for.end
365
366for.body.lr.ph: ; preds = %entry
367 br label %for.body
368
369for.body: ; preds = %for.body.lr.ph, %for.body
370 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
371 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
372 %0 = load i8* %arrayidx, align 1
373 %conv = zext i8 %0 to i32
374 %add = add nsw i32 %conv, 1
375 %conv1 = trunc i32 %add to i8
376 store i8 %conv1, i8* %arrayidx, align 1
377 %inc = add nsw i32 %i.04, 4
378 %cmp = icmp slt i32 %inc, %b
379 br i1 %cmp, label %for.body, label %for.end
380
381for.end: ; preds = %for.body, %entry
382 ret void
383}
384
385
386
387; CHECK: test_pos8_rr_slt
Andrew Trick1bda7212013-10-19 00:14:04 +0000388; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +0000389; a < b
390define void @test_pos8_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
391entry:
392 %cmp3 = icmp slt i32 %a, %b
393 br i1 %cmp3, label %for.body.lr.ph, label %for.end
394
395for.body.lr.ph: ; preds = %entry
396 br label %for.body
397
398for.body: ; preds = %for.body.lr.ph, %for.body
399 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
400 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
401 %0 = load i8* %arrayidx, align 1
402 %conv = zext i8 %0 to i32
403 %add = add nsw i32 %conv, 1
404 %conv1 = trunc i32 %add to i8
405 store i8 %conv1, i8* %arrayidx, align 1
406 %inc = add nsw i32 %i.04, 8
407 %cmp = icmp slt i32 %inc, %b
408 br i1 %cmp, label %for.body, label %for.end
409
410for.end: ; preds = %for.body, %entry
411 ret void
412}
413
414
415
416; CHECK: test_pos16_rr_slt
Andrew Trick1bda7212013-10-19 00:14:04 +0000417; CHECK: bdnz
Hal Finkel25c19922013-05-15 21:37:41 +0000418; a < b
419define void @test_pos16_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
420entry:
421 %cmp3 = icmp slt 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 slt i32 %inc, %b
437 br i1 %cmp, label %for.body, label %for.end
438
439for.end: ; preds = %for.body, %entry
440 ret void
441}