1; RUN: llc -march=hexagon -mcpu=hexagonv5 -O3 < %s | FileCheck %s
2
3; CHECK-LABEL: f0:
4; CHECK: loop0
5; a < b
6define void @f0(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
7b0:
8  %v0 = icmp sle i32 28395, %a2
9  br i1 %v0, label %b1, label %b3
10
11b1:                                               ; preds = %b0
12  br label %b2
13
14b2:                                               ; preds = %b2, %b1
15  %v1 = phi i32 [ 28395, %b1 ], [ %v7, %b2 ]
16  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
17  %v3 = load i8, i8* %v2, align 1
18  %v4 = zext i8 %v3 to i32
19  %v5 = add nsw i32 %v4, 1
20  %v6 = trunc i32 %v5 to i8
21  store i8 %v6, i8* %v2, align 1
22  %v7 = add nsw i32 %v1, 1
23  %v8 = icmp sle i32 %v7, %a2
24  br i1 %v8, label %b2, label %b3
25
26b3:                                               ; preds = %b2, %b0
27  ret void
28}
29
30; CHECK-LABEL: f1:
31; CHECK: loop0
32; a < b
33define void @f1(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
34b0:
35  %v0 = icmp sle i32 9073, %a2
36  br i1 %v0, label %b1, label %b3
37
38b1:                                               ; preds = %b0
39  br label %b2
40
41b2:                                               ; preds = %b2, %b1
42  %v1 = phi i32 [ 9073, %b1 ], [ %v7, %b2 ]
43  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
44  %v3 = load i8, i8* %v2, align 1
45  %v4 = zext i8 %v3 to i32
46  %v5 = add nsw i32 %v4, 1
47  %v6 = trunc i32 %v5 to i8
48  store i8 %v6, i8* %v2, align 1
49  %v7 = add nsw i32 %v1, 2
50  %v8 = icmp sle i32 %v7, %a2
51  br i1 %v8, label %b2, label %b3
52
53b3:                                               ; preds = %b2, %b0
54  ret void
55}
56
57; CHECK-LABEL: f2:
58; CHECK: loop0
59; a < b
60define void @f2(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
61b0:
62  %v0 = icmp sle i32 21956, %a2
63  br i1 %v0, label %b1, label %b3
64
65b1:                                               ; preds = %b0
66  br label %b2
67
68b2:                                               ; preds = %b2, %b1
69  %v1 = phi i32 [ 21956, %b1 ], [ %v7, %b2 ]
70  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
71  %v3 = load i8, i8* %v2, align 1
72  %v4 = zext i8 %v3 to i32
73  %v5 = add nsw i32 %v4, 1
74  %v6 = trunc i32 %v5 to i8
75  store i8 %v6, i8* %v2, align 1
76  %v7 = add nsw i32 %v1, 4
77  %v8 = icmp sle i32 %v7, %a2
78  br i1 %v8, label %b2, label %b3
79
80b3:                                               ; preds = %b2, %b0
81  ret void
82}
83
84; CHECK-LABEL: f3:
85; CHECK: loop0
86; a < b
87define void @f3(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
88b0:
89  %v0 = icmp sle i32 16782, %a2
90  br i1 %v0, label %b1, label %b3
91
92b1:                                               ; preds = %b0
93  br label %b2
94
95b2:                                               ; preds = %b2, %b1
96  %v1 = phi i32 [ 16782, %b1 ], [ %v7, %b2 ]
97  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
98  %v3 = load i8, i8* %v2, align 1
99  %v4 = zext i8 %v3 to i32
100  %v5 = add nsw i32 %v4, 1
101  %v6 = trunc i32 %v5 to i8
102  store i8 %v6, i8* %v2, align 1
103  %v7 = add nsw i32 %v1, 8
104  %v8 = icmp sle i32 %v7, %a2
105  br i1 %v8, label %b2, label %b3
106
107b3:                                               ; preds = %b2, %b0
108  ret void
109}
110
111; CHECK-LABEL: f4:
112; CHECK: loop0
113; a < b
114define void @f4(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
115b0:
116  %v0 = icmp sle i32 19097, %a2
117  br i1 %v0, label %b1, label %b3
118
119b1:                                               ; preds = %b0
120  br label %b2
121
122b2:                                               ; preds = %b2, %b1
123  %v1 = phi i32 [ 19097, %b1 ], [ %v7, %b2 ]
124  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
125  %v3 = load i8, i8* %v2, align 1
126  %v4 = zext i8 %v3 to i32
127  %v5 = add nsw i32 %v4, 1
128  %v6 = trunc i32 %v5 to i8
129  store i8 %v6, i8* %v2, align 1
130  %v7 = add nsw i32 %v1, 16
131  %v8 = icmp sle i32 %v7, %a2
132  br i1 %v8, label %b2, label %b3
133
134b3:                                               ; preds = %b2, %b0
135  ret void
136}
137
138; CHECK-LABEL: f5:
139; CHECK: loop0
140; a < b
141define void @f5(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
142b0:
143  %v0 = icmp sle i32 %a1, 14040
144  br i1 %v0, label %b1, label %b3
145
146b1:                                               ; preds = %b0
147  br label %b2
148
149b2:                                               ; preds = %b2, %b1
150  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
151  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
152  %v3 = load i8, i8* %v2, align 1
153  %v4 = zext i8 %v3 to i32
154  %v5 = add nsw i32 %v4, 1
155  %v6 = trunc i32 %v5 to i8
156  store i8 %v6, i8* %v2, align 1
157  %v7 = add nsw i32 %v1, 1
158  %v8 = icmp sle i32 %v7, 14040
159  br i1 %v8, label %b2, label %b3
160
161b3:                                               ; preds = %b2, %b0
162  ret void
163}
164
165; CHECK-LABEL: f6:
166; CHECK: loop0
167; a < b
168define void @f6(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
169b0:
170  %v0 = icmp sle i32 %a1, 13710
171  br i1 %v0, label %b1, label %b3
172
173b1:                                               ; preds = %b0
174  br label %b2
175
176b2:                                               ; preds = %b2, %b1
177  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
178  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
179  %v3 = load i8, i8* %v2, align 1
180  %v4 = zext i8 %v3 to i32
181  %v5 = add nsw i32 %v4, 1
182  %v6 = trunc i32 %v5 to i8
183  store i8 %v6, i8* %v2, align 1
184  %v7 = add nsw i32 %v1, 2
185  %v8 = icmp sle i32 %v7, 13710
186  br i1 %v8, label %b2, label %b3
187
188b3:                                               ; preds = %b2, %b0
189  ret void
190}
191
192; CHECK-LABEL: f7:
193; CHECK: loop0
194; a < b
195define void @f7(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
196b0:
197  %v0 = icmp sle i32 %a1, 9920
198  br i1 %v0, label %b1, label %b3
199
200b1:                                               ; preds = %b0
201  br label %b2
202
203b2:                                               ; preds = %b2, %b1
204  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
205  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
206  %v3 = load i8, i8* %v2, align 1
207  %v4 = zext i8 %v3 to i32
208  %v5 = add nsw i32 %v4, 1
209  %v6 = trunc i32 %v5 to i8
210  store i8 %v6, i8* %v2, align 1
211  %v7 = add nsw i32 %v1, 4
212  %v8 = icmp sle i32 %v7, 9920
213  br i1 %v8, label %b2, label %b3
214
215b3:                                               ; preds = %b2, %b0
216  ret void
217}
218
219; CHECK-LABEL: f8:
220; CHECK: loop0
221; a < b
222define void @f8(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
223b0:
224  %v0 = icmp sle i32 %a1, 18924
225  br i1 %v0, label %b1, label %b3
226
227b1:                                               ; preds = %b0
228  br label %b2
229
230b2:                                               ; preds = %b2, %b1
231  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
232  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
233  %v3 = load i8, i8* %v2, align 1
234  %v4 = zext i8 %v3 to i32
235  %v5 = add nsw i32 %v4, 1
236  %v6 = trunc i32 %v5 to i8
237  store i8 %v6, i8* %v2, align 1
238  %v7 = add nsw i32 %v1, 8
239  %v8 = icmp sle i32 %v7, 18924
240  br i1 %v8, label %b2, label %b3
241
242b3:                                               ; preds = %b2, %b0
243  ret void
244}
245
246; CHECK-LABEL: f9:
247; CHECK: loop0
248; a < b
249define void @f9(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
250b0:
251  %v0 = icmp sle i32 %a1, 11812
252  br i1 %v0, label %b1, label %b3
253
254b1:                                               ; preds = %b0
255  br label %b2
256
257b2:                                               ; preds = %b2, %b1
258  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
259  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
260  %v3 = load i8, i8* %v2, align 1
261  %v4 = zext i8 %v3 to i32
262  %v5 = add nsw i32 %v4, 1
263  %v6 = trunc i32 %v5 to i8
264  store i8 %v6, i8* %v2, align 1
265  %v7 = add nsw i32 %v1, 16
266  %v8 = icmp sle i32 %v7, 11812
267  br i1 %v8, label %b2, label %b3
268
269b3:                                               ; preds = %b2, %b0
270  ret void
271}
272
273; CHECK-LABEL: f10:
274; CHECK: loop0
275; a < b
276define void @f10(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
277b0:
278  %v0 = icmp sle i32 %a1, %a2
279  br i1 %v0, label %b1, label %b3
280
281b1:                                               ; preds = %b0
282  br label %b2
283
284b2:                                               ; preds = %b2, %b1
285  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
286  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
287  %v3 = load i8, i8* %v2, align 1
288  %v4 = zext i8 %v3 to i32
289  %v5 = add nsw i32 %v4, 1
290  %v6 = trunc i32 %v5 to i8
291  store i8 %v6, i8* %v2, align 1
292  %v7 = add nsw i32 %v1, 1
293  %v8 = icmp sle i32 %v7, %a2
294  br i1 %v8, label %b2, label %b3
295
296b3:                                               ; preds = %b2, %b0
297  ret void
298}
299
300; CHECK-LABEL: f11:
301; CHECK: loop0
302; a < b
303define void @f11(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
304b0:
305  %v0 = icmp sle i32 %a1, %a2
306  br i1 %v0, label %b1, label %b3
307
308b1:                                               ; preds = %b0
309  br label %b2
310
311b2:                                               ; preds = %b2, %b1
312  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
313  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
314  %v3 = load i8, i8* %v2, align 1
315  %v4 = zext i8 %v3 to i32
316  %v5 = add nsw i32 %v4, 1
317  %v6 = trunc i32 %v5 to i8
318  store i8 %v6, i8* %v2, align 1
319  %v7 = add nsw i32 %v1, 2
320  %v8 = icmp sle i32 %v7, %a2
321  br i1 %v8, label %b2, label %b3
322
323b3:                                               ; preds = %b2, %b0
324  ret void
325}
326
327; CHECK-LABEL: f12:
328; CHECK: loop0
329; a < b
330define void @f12(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
331b0:
332  %v0 = icmp sle i32 %a1, %a2
333  br i1 %v0, label %b1, label %b3
334
335b1:                                               ; preds = %b0
336  br label %b2
337
338b2:                                               ; preds = %b2, %b1
339  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
340  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
341  %v3 = load i8, i8* %v2, align 1
342  %v4 = zext i8 %v3 to i32
343  %v5 = add nsw i32 %v4, 1
344  %v6 = trunc i32 %v5 to i8
345  store i8 %v6, i8* %v2, align 1
346  %v7 = add nsw i32 %v1, 4
347  %v8 = icmp sle i32 %v7, %a2
348  br i1 %v8, label %b2, label %b3
349
350b3:                                               ; preds = %b2, %b0
351  ret void
352}
353
354; CHECK-LABEL: f13:
355; CHECK: loop0
356; a < b
357define void @f13(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
358b0:
359  %v0 = icmp sle i32 %a1, %a2
360  br i1 %v0, label %b1, label %b3
361
362b1:                                               ; preds = %b0
363  br label %b2
364
365b2:                                               ; preds = %b2, %b1
366  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
367  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
368  %v3 = load i8, i8* %v2, align 1
369  %v4 = zext i8 %v3 to i32
370  %v5 = add nsw i32 %v4, 1
371  %v6 = trunc i32 %v5 to i8
372  store i8 %v6, i8* %v2, align 1
373  %v7 = add nsw i32 %v1, 8
374  %v8 = icmp sle i32 %v7, %a2
375  br i1 %v8, label %b2, label %b3
376
377b3:                                               ; preds = %b2, %b0
378  ret void
379}
380
381; CHECK-LABEL: f14:
382; CHECK: loop0
383; a < b
384define void @f14(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
385b0:
386  %v0 = icmp sle i32 %a1, %a2
387  br i1 %v0, label %b1, label %b3
388
389b1:                                               ; preds = %b0
390  br label %b2
391
392b2:                                               ; preds = %b2, %b1
393  %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ]
394  %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1
395  %v3 = load i8, i8* %v2, align 1
396  %v4 = zext i8 %v3 to i32
397  %v5 = add nsw i32 %v4, 1
398  %v6 = trunc i32 %v5 to i8
399  store i8 %v6, i8* %v2, align 1
400  %v7 = add nsw i32 %v1, 16
401  %v8 = icmp sle i32 %v7, %a2
402  br i1 %v8, label %b2, label %b3
403
404b3:                                               ; preds = %b2, %b0
405  ret void
406}
407
408attributes #0 = { nounwind "target-cpu"="hexagonv5" }
409