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_slt
8 define void @test_pos1_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
10 %cmp3 = icmp slt i32 8531, %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 [ 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
28 for.end: ; preds = %for.body, %entry
34 ; CHECK: test_pos2_ir_slt
35 ; FIXME: Support this loop!
38 define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
40 %cmp3 = icmp slt i32 9152, %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 [ 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
58 for.end: ; preds = %for.body, %entry
64 ; CHECK: test_pos4_ir_slt
65 ; FIXME: Support this loop!
68 define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
70 %cmp3 = icmp slt i32 18851, %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 [ 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
88 for.end: ; preds = %for.body, %entry
94 ; CHECK: test_pos8_ir_slt
97 define void @test_pos8_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
99 %cmp3 = icmp slt i32 25466, %b
100 br i1 %cmp3, label %for.body.lr.ph, label %for.end
102 for.body.lr.ph: ; preds = %entry
105 for.body: ; preds = %for.body.lr.ph, %for.body
106 %i.04 = phi i32 [ 25466, %for.body.lr.ph ], [ %inc, %for.body ]
107 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
108 %0 = load i8* %arrayidx, align 1
109 %conv = zext i8 %0 to i32
110 %add = add nsw i32 %conv, 1
111 %conv1 = trunc i32 %add to i8
112 store i8 %conv1, i8* %arrayidx, align 1
113 %inc = add nsw i32 %i.04, 8
114 %cmp = icmp slt i32 %inc, %b
115 br i1 %cmp, label %for.body, label %for.end
117 for.end: ; preds = %for.body, %entry
123 ; CHECK: test_pos16_ir_slt
126 define void @test_pos16_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
128 %cmp3 = icmp slt i32 9295, %b
129 br i1 %cmp3, label %for.body.lr.ph, label %for.end
131 for.body.lr.ph: ; preds = %entry
134 for.body: ; preds = %for.body.lr.ph, %for.body
135 %i.04 = phi i32 [ 9295, %for.body.lr.ph ], [ %inc, %for.body ]
136 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
137 %0 = load i8* %arrayidx, align 1
138 %conv = zext i8 %0 to i32
139 %add = add nsw i32 %conv, 1
140 %conv1 = trunc i32 %add to i8
141 store i8 %conv1, i8* %arrayidx, align 1
142 %inc = add nsw i32 %i.04, 16
143 %cmp = icmp slt i32 %inc, %b
144 br i1 %cmp, label %for.body, label %for.end
146 for.end: ; preds = %for.body, %entry
152 ; CHECK: test_pos1_ri_slt
155 define void @test_pos1_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
157 %cmp3 = icmp slt i32 %a, 31236
158 br i1 %cmp3, label %for.body.lr.ph, label %for.end
160 for.body.lr.ph: ; preds = %entry
163 for.body: ; preds = %for.body.lr.ph, %for.body
164 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
165 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
166 %0 = load i8* %arrayidx, align 1
167 %conv = zext i8 %0 to i32
168 %add = add nsw i32 %conv, 1
169 %conv1 = trunc i32 %add to i8
170 store i8 %conv1, i8* %arrayidx, align 1
171 %inc = add nsw i32 %i.04, 1
172 %cmp = icmp slt i32 %inc, 31236
173 br i1 %cmp, label %for.body, label %for.end
175 for.end: ; preds = %for.body, %entry
181 ; CHECK: test_pos2_ri_slt
184 define void @test_pos2_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
186 %cmp3 = icmp slt i32 %a, 22653
187 br i1 %cmp3, label %for.body.lr.ph, label %for.end
189 for.body.lr.ph: ; preds = %entry
192 for.body: ; preds = %for.body.lr.ph, %for.body
193 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
194 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
195 %0 = load i8* %arrayidx, align 1
196 %conv = zext i8 %0 to i32
197 %add = add nsw i32 %conv, 1
198 %conv1 = trunc i32 %add to i8
199 store i8 %conv1, i8* %arrayidx, align 1
200 %inc = add nsw i32 %i.04, 2
201 %cmp = icmp slt i32 %inc, 22653
202 br i1 %cmp, label %for.body, label %for.end
204 for.end: ; preds = %for.body, %entry
210 ; CHECK: test_pos4_ri_slt
213 define void @test_pos4_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
215 %cmp3 = icmp slt i32 %a, 1431
216 br i1 %cmp3, label %for.body.lr.ph, label %for.end
218 for.body.lr.ph: ; preds = %entry
221 for.body: ; preds = %for.body.lr.ph, %for.body
222 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
223 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
224 %0 = load i8* %arrayidx, align 1
225 %conv = zext i8 %0 to i32
226 %add = add nsw i32 %conv, 1
227 %conv1 = trunc i32 %add to i8
228 store i8 %conv1, i8* %arrayidx, align 1
229 %inc = add nsw i32 %i.04, 4
230 %cmp = icmp slt i32 %inc, 1431
231 br i1 %cmp, label %for.body, label %for.end
233 for.end: ; preds = %for.body, %entry
239 ; CHECK: test_pos8_ri_slt
242 define void @test_pos8_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
244 %cmp3 = icmp slt i32 %a, 22403
245 br i1 %cmp3, label %for.body.lr.ph, label %for.end
247 for.body.lr.ph: ; preds = %entry
250 for.body: ; preds = %for.body.lr.ph, %for.body
251 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
252 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
253 %0 = load i8* %arrayidx, align 1
254 %conv = zext i8 %0 to i32
255 %add = add nsw i32 %conv, 1
256 %conv1 = trunc i32 %add to i8
257 store i8 %conv1, i8* %arrayidx, align 1
258 %inc = add nsw i32 %i.04, 8
259 %cmp = icmp slt i32 %inc, 22403
260 br i1 %cmp, label %for.body, label %for.end
262 for.end: ; preds = %for.body, %entry
268 ; CHECK: test_pos16_ri_slt
271 define void @test_pos16_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
273 %cmp3 = icmp slt i32 %a, 21715
274 br i1 %cmp3, label %for.body.lr.ph, label %for.end
276 for.body.lr.ph: ; preds = %entry
279 for.body: ; preds = %for.body.lr.ph, %for.body
280 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
281 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
282 %0 = load i8* %arrayidx, align 1
283 %conv = zext i8 %0 to i32
284 %add = add nsw i32 %conv, 1
285 %conv1 = trunc i32 %add to i8
286 store i8 %conv1, i8* %arrayidx, align 1
287 %inc = add nsw i32 %i.04, 16
288 %cmp = icmp slt i32 %inc, 21715
289 br i1 %cmp, label %for.body, label %for.end
291 for.end: ; preds = %for.body, %entry
297 ; CHECK: test_pos1_rr_slt
300 define void @test_pos1_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
302 %cmp3 = icmp slt i32 %a, %b
303 br i1 %cmp3, label %for.body.lr.ph, label %for.end
305 for.body.lr.ph: ; preds = %entry
308 for.body: ; preds = %for.body.lr.ph, %for.body
309 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
310 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
311 %0 = load i8* %arrayidx, align 1
312 %conv = zext i8 %0 to i32
313 %add = add nsw i32 %conv, 1
314 %conv1 = trunc i32 %add to i8
315 store i8 %conv1, i8* %arrayidx, align 1
316 %inc = add nsw i32 %i.04, 1
317 %cmp = icmp slt i32 %inc, %b
318 br i1 %cmp, label %for.body, label %for.end
320 for.end: ; preds = %for.body, %entry
326 ; CHECK: test_pos2_rr_slt
329 define void @test_pos2_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
331 %cmp3 = icmp slt i32 %a, %b
332 br i1 %cmp3, label %for.body.lr.ph, label %for.end
334 for.body.lr.ph: ; preds = %entry
337 for.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 slt i32 %inc, %b
347 br i1 %cmp, label %for.body, label %for.end
349 for.end: ; preds = %for.body, %entry
355 ; CHECK: test_pos4_rr_slt
358 define void @test_pos4_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
360 %cmp3 = icmp slt i32 %a, %b
361 br i1 %cmp3, label %for.body.lr.ph, label %for.end
363 for.body.lr.ph: ; preds = %entry
366 for.body: ; preds = %for.body.lr.ph, %for.body
367 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
368 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
369 %0 = load i8* %arrayidx, align 1
370 %conv = zext i8 %0 to i32
371 %add = add nsw i32 %conv, 1
372 %conv1 = trunc i32 %add to i8
373 store i8 %conv1, i8* %arrayidx, align 1
374 %inc = add nsw i32 %i.04, 4
375 %cmp = icmp slt i32 %inc, %b
376 br i1 %cmp, label %for.body, label %for.end
378 for.end: ; preds = %for.body, %entry
384 ; CHECK: test_pos8_rr_slt
387 define void @test_pos8_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
389 %cmp3 = icmp slt i32 %a, %b
390 br i1 %cmp3, label %for.body.lr.ph, label %for.end
392 for.body.lr.ph: ; preds = %entry
395 for.body: ; preds = %for.body.lr.ph, %for.body
396 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
397 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
398 %0 = load i8* %arrayidx, align 1
399 %conv = zext i8 %0 to i32
400 %add = add nsw i32 %conv, 1
401 %conv1 = trunc i32 %add to i8
402 store i8 %conv1, i8* %arrayidx, align 1
403 %inc = add nsw i32 %i.04, 8
404 %cmp = icmp slt i32 %inc, %b
405 br i1 %cmp, label %for.body, label %for.end
407 for.end: ; preds = %for.body, %entry
413 ; CHECK: test_pos16_rr_slt
416 define void @test_pos16_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
418 %cmp3 = icmp slt i32 %a, %b
419 br i1 %cmp3, label %for.body.lr.ph, label %for.end
421 for.body.lr.ph: ; preds = %entry
424 for.body: ; preds = %for.body.lr.ph, %for.body
425 %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
426 %arrayidx = getelementptr inbounds i8* %p, i32 %i.04
427 %0 = load i8* %arrayidx, align 1
428 %conv = zext i8 %0 to i32
429 %add = add nsw i32 %conv, 1
430 %conv1 = trunc i32 %add to i8
431 store i8 %conv1, i8* %arrayidx, align 1
432 %inc = add nsw i32 %i.04, 16
433 %cmp = icmp slt i32 %inc, %b
434 br i1 %cmp, label %for.body, label %for.end
436 for.end: ; preds = %for.body, %entry