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
5 ; CHECK: test_pos1_ir_sle
8 define void @test_pos1_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
10 %cmp3 = icmp sle i32 28395, %b
11 br i1 %cmp3, label %for.body.lr.ph, label %for.end
13 for.body.lr.ph: ; preds = %entry
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
28 for.end: ; preds = %for.body, %entry
34 ; CHECK: test_pos2_ir_sle
35 ; FIXME: Support this loop!
38 define void @test_pos2_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
40 %cmp3 = icmp sle i32 9073, %b
41 br i1 %cmp3, label %for.body.lr.ph, label %for.end
43 for.body.lr.ph: ; preds = %entry
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
58 for.end: ; preds = %for.body, %entry
64 ; CHECK: test_pos4_ir_sle
65 ; FIXME: Support this loop!
68 define void @test_pos4_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
70 %cmp3 = icmp sle i32 21956, %b
71 br i1 %cmp3, label %for.body.lr.ph, label %for.end
73 for.body.lr.ph: ; preds = %entry
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
88 for.end: ; preds = %for.body, %entry
94 ; CHECK: test_pos8_ir_sle
95 ; FIXME: Support this loop!
98 define void @test_pos8_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
100 %cmp3 = icmp sle i32 16782, %b
101 br i1 %cmp3, label %for.body.lr.ph, label %for.end
103 for.body.lr.ph: ; preds = %entry
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
118 for.end: ; preds = %for.body, %entry
124 ; CHECK: test_pos16_ir_sle
125 ; FIXME: Support this loop!
128 define void @test_pos16_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
130 %cmp3 = icmp sle i32 19097, %b
131 br i1 %cmp3, label %for.body.lr.ph, label %for.end
133 for.body.lr.ph: ; preds = %entry
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
148 for.end: ; preds = %for.body, %entry
154 ; CHECK: test_pos1_ri_sle
157 define void @test_pos1_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
159 %cmp3 = icmp sle i32 %a, 14040
160 br i1 %cmp3, label %for.body.lr.ph, label %for.end
162 for.body.lr.ph: ; preds = %entry
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
177 for.end: ; preds = %for.body, %entry
183 ; CHECK: test_pos2_ri_sle
186 define void @test_pos2_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
188 %cmp3 = icmp sle i32 %a, 13710
189 br i1 %cmp3, label %for.body.lr.ph, label %for.end
191 for.body.lr.ph: ; preds = %entry
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
206 for.end: ; preds = %for.body, %entry
212 ; CHECK: test_pos4_ri_sle
215 define void @test_pos4_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
217 %cmp3 = icmp sle i32 %a, 9920
218 br i1 %cmp3, label %for.body.lr.ph, label %for.end
220 for.body.lr.ph: ; preds = %entry
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
235 for.end: ; preds = %for.body, %entry
241 ; CHECK: test_pos8_ri_sle
244 define void @test_pos8_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
246 %cmp3 = icmp sle i32 %a, 18924
247 br i1 %cmp3, label %for.body.lr.ph, label %for.end
249 for.body.lr.ph: ; preds = %entry
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
264 for.end: ; preds = %for.body, %entry
270 ; CHECK: test_pos16_ri_sle
273 define void @test_pos16_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
275 %cmp3 = icmp sle i32 %a, 11812
276 br i1 %cmp3, label %for.body.lr.ph, label %for.end
278 for.body.lr.ph: ; preds = %entry
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
293 for.end: ; preds = %for.body, %entry
299 ; CHECK: test_pos1_rr_sle
300 ; FIXME: Support this loop!
303 define void @test_pos1_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
305 %cmp3 = icmp sle i32 %a, %b
306 br i1 %cmp3, label %for.body.lr.ph, label %for.end
308 for.body.lr.ph: ; preds = %entry
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
323 for.end: ; preds = %for.body, %entry
329 ; CHECK: test_pos2_rr_sle
330 ; FIXME: Support this loop!
333 define void @test_pos2_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
335 %cmp3 = icmp sle i32 %a, %b
336 br i1 %cmp3, label %for.body.lr.ph, label %for.end
338 for.body.lr.ph: ; preds = %entry
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
353 for.end: ; preds = %for.body, %entry
359 ; CHECK: test_pos4_rr_sle
360 ; FIXME: Support this loop!
363 define void @test_pos4_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
365 %cmp3 = icmp sle i32 %a, %b
366 br i1 %cmp3, label %for.body.lr.ph, label %for.end
368 for.body.lr.ph: ; preds = %entry
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
383 for.end: ; preds = %for.body, %entry
389 ; CHECK: test_pos8_rr_sle
390 ; FIXME: Support this loop!
393 define void @test_pos8_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
395 %cmp3 = icmp sle i32 %a, %b
396 br i1 %cmp3, label %for.body.lr.ph, label %for.end
398 for.body.lr.ph: ; preds = %entry
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
413 for.end: ; preds = %for.body, %entry
419 ; CHECK: test_pos16_rr_sle
420 ; FIXME: Support this loop!
423 define void @test_pos16_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind {
425 %cmp3 = icmp sle i32 %a, %b
426 br i1 %cmp3, label %for.body.lr.ph, label %for.end
428 for.body.lr.ph: ; preds = %entry
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
443 for.end: ; preds = %for.body, %entry