1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -verify-machineinstrs -mattr=+mve %s -o - | FileCheck %s
4 @var_36 = hidden local_unnamed_addr global i8 0, align 1
5 @arr_61 = hidden local_unnamed_addr global [1 x i32] zeroinitializer, align 4
7 define i32 @test(i8 zeroext %var_2, i16 signext %var_15, ptr %arr_60) {
9 ; CHECK: @ %bb.0: @ %entry
10 ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
11 ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
12 ; CHECK-NEXT: .pad #16
13 ; CHECK-NEXT: sub sp, #16
14 ; CHECK-NEXT: cmp r0, #0
15 ; CHECK-NEXT: beq.w .LBB0_11
16 ; CHECK-NEXT: @ %bb.1: @ %for.cond1.preheader
17 ; CHECK-NEXT: cmp r2, #0
18 ; CHECK-NEXT: beq.w .LBB0_12
19 ; CHECK-NEXT: @ %bb.2: @ %for.cond1.preheader1
20 ; CHECK-NEXT: addw r0, r2, #441
21 ; CHECK-NEXT: str r0, [sp, #8] @ 4-byte Spill
22 ; CHECK-NEXT: addw r0, r2, #419
23 ; CHECK-NEXT: str r0, [sp, #4] @ 4-byte Spill
24 ; CHECK-NEXT: addw r0, r2, #397
25 ; CHECK-NEXT: movw r5, :lower16:var_36
26 ; CHECK-NEXT: str r0, [sp] @ 4-byte Spill
27 ; CHECK-NEXT: movw r0, #27476
28 ; CHECK-NEXT: movt r5, :upper16:var_36
29 ; CHECK-NEXT: sdiv r1, r0, r1
30 ; CHECK-NEXT: str r2, [sp, #12] @ 4-byte Spill
31 ; CHECK-NEXT: .LBB0_3: @ %for.cond1
32 ; CHECK-NEXT: @ =>This Loop Header: Depth=1
33 ; CHECK-NEXT: @ Child Loop BB0_4 Depth 2
34 ; CHECK-NEXT: @ Child Loop BB0_5 Depth 3
35 ; CHECK-NEXT: @ Child Loop BB0_7 Depth 3
36 ; CHECK-NEXT: @ Child Loop BB0_9 Depth 3
37 ; CHECK-NEXT: ldr.w r12, [sp, #8] @ 4-byte Reload
38 ; CHECK-NEXT: mov.w r10, #0
39 ; CHECK-NEXT: ldrd r8, r0, [sp] @ 8-byte Folded Reload
40 ; CHECK-NEXT: .LBB0_4: @ %for.cond6.preheader
41 ; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1
42 ; CHECK-NEXT: @ => This Loop Header: Depth=2
43 ; CHECK-NEXT: @ Child Loop BB0_5 Depth 3
44 ; CHECK-NEXT: @ Child Loop BB0_7 Depth 3
45 ; CHECK-NEXT: @ Child Loop BB0_9 Depth 3
46 ; CHECK-NEXT: movw r3, :lower16:arr_61
47 ; CHECK-NEXT: movt r3, :upper16:arr_61
48 ; CHECK-NEXT: add.w r11, r3, #4
49 ; CHECK-NEXT: movs r3, #11
50 ; CHECK-NEXT: dls lr, r3
51 ; CHECK-NEXT: mov r4, r11
52 ; CHECK-NEXT: mov r3, r8
53 ; CHECK-NEXT: .LBB0_5: @ %for.body10
54 ; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1
55 ; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2
56 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=3
57 ; CHECK-NEXT: str r2, [r4, #-4]
58 ; CHECK-NEXT: ldrb r6, [r3, #-1]
59 ; CHECK-NEXT: cmp r6, #0
61 ; CHECK-NEXT: sxthne.w r9, r1
62 ; CHECK-NEXT: moveq.w r9, #0
63 ; CHECK-NEXT: add.w r6, r2, #396
64 ; CHECK-NEXT: cmp.w r9, #0
65 ; CHECK-NEXT: str r6, [r4]
66 ; CHECK-NEXT: cset r6, ne
67 ; CHECK-NEXT: strb r6, [r5]
68 ; CHECK-NEXT: add.w r2, r2, #792
69 ; CHECK-NEXT: ldrb r6, [r3]
70 ; CHECK-NEXT: adds r4, #8
71 ; CHECK-NEXT: adds r3, #2
72 ; CHECK-NEXT: cmp r6, #0
74 ; CHECK-NEXT: sxthne r6, r1
75 ; CHECK-NEXT: moveq r6, #0
76 ; CHECK-NEXT: cmp r6, #0
77 ; CHECK-NEXT: cset r6, ne
78 ; CHECK-NEXT: strb r6, [r5]
79 ; CHECK-NEXT: le lr, .LBB0_5
80 ; CHECK-NEXT: @ %bb.6: @ %for.cond.cleanup9
81 ; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2
82 ; CHECK-NEXT: movs r2, #11
83 ; CHECK-NEXT: mov r4, r11
84 ; CHECK-NEXT: dls lr, r2
85 ; CHECK-NEXT: mov r3, r0
86 ; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload
87 ; CHECK-NEXT: .LBB0_7: @ %for.body10.1
88 ; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1
89 ; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2
90 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=3
91 ; CHECK-NEXT: str r2, [r4, #-4]
92 ; CHECK-NEXT: add.w r7, r2, #396
93 ; CHECK-NEXT: ldrb r6, [r3, #-1]
94 ; CHECK-NEXT: add.w r2, r2, #792
95 ; CHECK-NEXT: cmp r6, #0
97 ; CHECK-NEXT: sxthne r6, r1
98 ; CHECK-NEXT: moveq r6, #0
99 ; CHECK-NEXT: cmp r6, #0
100 ; CHECK-NEXT: str r7, [r4]
101 ; CHECK-NEXT: cset r6, ne
102 ; CHECK-NEXT: adds r4, #8
103 ; CHECK-NEXT: strb r6, [r5]
104 ; CHECK-NEXT: ldrb r6, [r3]
105 ; CHECK-NEXT: adds r3, #2
106 ; CHECK-NEXT: cmp r6, #0
108 ; CHECK-NEXT: sxthne r6, r1
109 ; CHECK-NEXT: moveq r6, #0
110 ; CHECK-NEXT: cmp r6, #0
111 ; CHECK-NEXT: cset r6, ne
112 ; CHECK-NEXT: strb r6, [r5]
113 ; CHECK-NEXT: le lr, .LBB0_7
114 ; CHECK-NEXT: @ %bb.8: @ %for.cond.cleanup9.1
115 ; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2
116 ; CHECK-NEXT: movs r2, #11
117 ; CHECK-NEXT: mov r3, r12
118 ; CHECK-NEXT: dls lr, r2
119 ; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload
120 ; CHECK-NEXT: .LBB0_9: @ %for.body10.2
121 ; CHECK-NEXT: @ Parent Loop BB0_3 Depth=1
122 ; CHECK-NEXT: @ Parent Loop BB0_4 Depth=2
123 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=3
124 ; CHECK-NEXT: str r2, [r11, #-4]
125 ; CHECK-NEXT: add.w r6, r2, #396
126 ; CHECK-NEXT: ldrb r4, [r3, #-1]
127 ; CHECK-NEXT: add.w r2, r2, #792
128 ; CHECK-NEXT: cmp r4, #0
130 ; CHECK-NEXT: sxthne r4, r1
131 ; CHECK-NEXT: moveq r4, #0
132 ; CHECK-NEXT: cmp r4, #0
133 ; CHECK-NEXT: str.w r6, [r11]
134 ; CHECK-NEXT: cset r4, ne
135 ; CHECK-NEXT: add.w r11, r11, #8
136 ; CHECK-NEXT: strb r4, [r5]
137 ; CHECK-NEXT: ldrb r4, [r3]
138 ; CHECK-NEXT: adds r3, #2
139 ; CHECK-NEXT: cmp r4, #0
141 ; CHECK-NEXT: sxthne r4, r1
142 ; CHECK-NEXT: moveq r4, #0
143 ; CHECK-NEXT: cmp r4, #0
144 ; CHECK-NEXT: cset r4, ne
145 ; CHECK-NEXT: strb r4, [r5]
146 ; CHECK-NEXT: le lr, .LBB0_9
147 ; CHECK-NEXT: @ %bb.10: @ %for.cond.cleanup9.2
148 ; CHECK-NEXT: @ in Loop: Header=BB0_4 Depth=2
149 ; CHECK-NEXT: add.w r2, r10, #3
150 ; CHECK-NEXT: add.w r12, r12, #66
151 ; CHECK-NEXT: adds r0, #66
152 ; CHECK-NEXT: add.w r8, r8, #66
153 ; CHECK-NEXT: uxtb.w r10, r2
154 ; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload
155 ; CHECK-NEXT: cmp.w r10, #18
156 ; CHECK-NEXT: blo.w .LBB0_4
157 ; CHECK-NEXT: b .LBB0_3
158 ; CHECK-NEXT: .LBB0_11: @ %for.cond.cleanup
159 ; CHECK-NEXT: add sp, #16
160 ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
161 ; CHECK-NEXT: .LBB0_12: @ %for.cond1.us.preheader
162 ; CHECK-NEXT: movw r0, :lower16:arr_61
163 ; CHECK-NEXT: movs r1, #0
164 ; CHECK-NEXT: movt r0, :upper16:arr_61
165 ; CHECK-NEXT: str r1, [r0, #84]
166 ; CHECK-NEXT: .inst.n 0xdefe
168 %tobool.not = icmp eq i8 %var_2, 0
169 br i1 %tobool.not, label %for.cond.cleanup, label %for.cond1.preheader
171 for.cond1.preheader: ; preds = %entry
172 %cmp11.not = icmp eq ptr %arr_60, null
173 br i1 %cmp11.not, label %for.cond1.us.preheader, label %for.cond1
175 for.cond1.us.preheader: ; preds = %for.cond1.preheader
176 store i32 0, ptr getelementptr ([1 x i32], ptr @arr_61, i32 21, i32 0), align 4
177 call void @llvm.trap()
180 for.cond.cleanup: ; preds = %entry
183 for.cond1: ; preds = %for.cond.cleanup9.2, %for.cond1.preheader
184 br label %for.cond6.preheader
186 for.cond6.preheader: ; preds = %for.cond.cleanup9.2, %for.cond1
187 %conv45 = phi i32 [ 0, %for.cond1 ], [ %conv.2, %for.cond.cleanup9.2 ]
190 for.cond.cleanup9: ; preds = %cond.end22.1
191 %add27 = add nuw nsw i32 %conv45, 1
192 %conv = and i32 %add27, 255
193 br label %for.body10.1
195 for.body10: ; preds = %cond.end22.1, %for.cond6.preheader
196 %i_15.044 = phi i32 [ 0, %for.cond6.preheader ], [ %add.1, %cond.end22.1 ]
197 %arraydecay = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044, i32 0
198 %0 = ptrtoint ptr %arraydecay to i32
199 %arrayidx13 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044
200 store i32 %0, ptr %arrayidx13, align 4
201 %arrayidx16 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv45, i32 %i_15.044
202 %1 = load i8, ptr %arrayidx16, align 1
203 %tobool18.not = icmp eq i8 %1, 0
204 br i1 %tobool18.not, label %cond.end22, label %cond.true19
206 cond.true19: ; preds = %for.body10
207 %div43 = sdiv i16 27476, %var_15
208 %div.sext = sext i16 %div43 to i32
211 cond.end22: ; preds = %for.body10, %cond.true19
212 %cond23 = phi i32 [ %div.sext, %cond.true19 ], [ 0, %for.body10 ]
213 %tobool24 = icmp ne i32 %cond23, 0
214 %frombool = zext i1 %tobool24 to i8
215 store i8 %frombool, ptr @var_36, align 1
216 %add = or disjoint i32 %i_15.044, 1
217 %arraydecay.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add, i32 0
218 %2 = ptrtoint ptr %arraydecay.1 to i32
219 %arrayidx13.1 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add
220 store i32 %2, ptr %arrayidx13.1, align 4
221 %arrayidx16.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv45, i32 %add
222 %3 = load i8, ptr %arrayidx16.1, align 1
223 %tobool18.not.1 = icmp eq i8 %3, 0
224 br i1 %tobool18.not.1, label %cond.end22.1, label %cond.true19.1
226 cond.true19.1: ; preds = %cond.end22
227 %div43.1 = sdiv i16 27476, %var_15
228 %div.sext.1 = sext i16 %div43.1 to i32
229 br label %cond.end22.1
231 cond.end22.1: ; preds = %cond.true19.1, %cond.end22
232 %cond23.1 = phi i32 [ %div.sext.1, %cond.true19.1 ], [ 0, %cond.end22 ]
233 %tobool24.1 = icmp ne i32 %cond23.1, 0
234 %frombool.1 = zext i1 %tobool24.1 to i8
235 store i8 %frombool.1, ptr @var_36, align 1
236 %add.1 = add nuw nsw i32 %i_15.044, 2
237 %exitcond105.not.1 = icmp eq i32 %add.1, 22
238 br i1 %exitcond105.not.1, label %for.cond.cleanup9, label %for.body10
240 for.body10.1: ; preds = %cond.end22.1.1, %for.cond.cleanup9
241 %i_15.044.1 = phi i32 [ 0, %for.cond.cleanup9 ], [ %add.1.1, %cond.end22.1.1 ]
242 %arraydecay.1108 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044.1, i32 0
243 %4 = ptrtoint ptr %arraydecay.1108 to i32
244 %arrayidx13.1109 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044.1
245 store i32 %4, ptr %arrayidx13.1109, align 4
246 %arrayidx16.1110 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv, i32 %i_15.044.1
247 %5 = load i8, ptr %arrayidx16.1110, align 1
248 %tobool18.not.1111 = icmp eq i8 %5, 0
249 br i1 %tobool18.not.1111, label %cond.end22.1119, label %cond.true19.1114
251 cond.true19.1114: ; preds = %for.body10.1
252 %div43.1112 = sdiv i16 27476, %var_15
253 %div.sext.1113 = sext i16 %div43.1112 to i32
254 br label %cond.end22.1119
256 cond.end22.1119: ; preds = %cond.true19.1114, %for.body10.1
257 %cond23.1115 = phi i32 [ %div.sext.1113, %cond.true19.1114 ], [ 0, %for.body10.1 ]
258 %tobool24.1116 = icmp ne i32 %cond23.1115, 0
259 %frombool.1117 = zext i1 %tobool24.1116 to i8
260 store i8 %frombool.1117, ptr @var_36, align 1
261 %add.1118 = or disjoint i32 %i_15.044.1, 1
262 %arraydecay.1.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add.1118, i32 0
263 %6 = ptrtoint ptr %arraydecay.1.1 to i32
264 %arrayidx13.1.1 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add.1118
265 store i32 %6, ptr %arrayidx13.1.1, align 4
266 %arrayidx16.1.1 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv, i32 %add.1118
267 %7 = load i8, ptr %arrayidx16.1.1, align 1
268 %tobool18.not.1.1 = icmp eq i8 %7, 0
269 br i1 %tobool18.not.1.1, label %cond.end22.1.1, label %cond.true19.1.1
271 cond.true19.1.1: ; preds = %cond.end22.1119
272 %div43.1.1 = sdiv i16 27476, %var_15
273 %div.sext.1.1 = sext i16 %div43.1.1 to i32
274 br label %cond.end22.1.1
276 cond.end22.1.1: ; preds = %cond.true19.1.1, %cond.end22.1119
277 %cond23.1.1 = phi i32 [ %div.sext.1.1, %cond.true19.1.1 ], [ 0, %cond.end22.1119 ]
278 %tobool24.1.1 = icmp ne i32 %cond23.1.1, 0
279 %frombool.1.1 = zext i1 %tobool24.1.1 to i8
280 store i8 %frombool.1.1, ptr @var_36, align 1
281 %add.1.1 = add nuw nsw i32 %i_15.044.1, 2
282 %exitcond105.not.1.1 = icmp eq i32 %add.1.1, 22
283 br i1 %exitcond105.not.1.1, label %for.cond.cleanup9.1, label %for.body10.1
285 for.cond.cleanup9.1: ; preds = %cond.end22.1.1
286 %add27.1 = add nuw nsw i32 %conv45, 2
287 %conv.1 = and i32 %add27.1, 255
288 br label %for.body10.2
290 for.body10.2: ; preds = %cond.end22.1.2, %for.cond.cleanup9.1
291 %i_15.044.2 = phi i32 [ 0, %for.cond.cleanup9.1 ], [ %add.1.2, %cond.end22.1.2 ]
292 %arraydecay.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %i_15.044.2, i32 0
293 %8 = ptrtoint ptr %arraydecay.2 to i32
294 %arrayidx13.2 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %i_15.044.2
295 store i32 %8, ptr %arrayidx13.2, align 4
296 %arrayidx16.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv.1, i32 %i_15.044.2
297 %9 = load i8, ptr %arrayidx16.2, align 1
298 %tobool18.not.2 = icmp eq i8 %9, 0
299 br i1 %tobool18.not.2, label %cond.end22.2, label %cond.true19.2
301 cond.true19.2: ; preds = %for.body10.2
302 %div43.2 = sdiv i16 27476, %var_15
303 %div.sext.2 = sext i16 %div43.2 to i32
304 br label %cond.end22.2
306 cond.end22.2: ; preds = %cond.true19.2, %for.body10.2
307 %cond23.2 = phi i32 [ %div.sext.2, %cond.true19.2 ], [ 0, %for.body10.2 ]
308 %tobool24.2 = icmp ne i32 %cond23.2, 0
309 %frombool.2 = zext i1 %tobool24.2 to i8
310 store i8 %frombool.2, ptr @var_36, align 1
311 %add.2 = or disjoint i32 %i_15.044.2, 1
312 %arraydecay.1.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 %add.2, i32 0
313 %10 = ptrtoint ptr %arraydecay.1.2 to i32
314 %arrayidx13.1.2 = getelementptr inbounds [1 x i32], ptr @arr_61, i32 0, i32 %add.2
315 store i32 %10, ptr %arrayidx13.1.2, align 4
316 %arrayidx16.1.2 = getelementptr inbounds [18 x [22 x i8]], ptr %arr_60, i32 1, i32 %conv.1, i32 %add.2
317 %11 = load i8, ptr %arrayidx16.1.2, align 1
318 %tobool18.not.1.2 = icmp eq i8 %11, 0
319 br i1 %tobool18.not.1.2, label %cond.end22.1.2, label %cond.true19.1.2
321 cond.true19.1.2: ; preds = %cond.end22.2
322 %div43.1.2 = sdiv i16 27476, %var_15
323 %div.sext.1.2 = sext i16 %div43.1.2 to i32
324 br label %cond.end22.1.2
326 cond.end22.1.2: ; preds = %cond.true19.1.2, %cond.end22.2
327 %cond23.1.2 = phi i32 [ %div.sext.1.2, %cond.true19.1.2 ], [ 0, %cond.end22.2 ]
328 %tobool24.1.2 = icmp ne i32 %cond23.1.2, 0
329 %frombool.1.2 = zext i1 %tobool24.1.2 to i8
330 store i8 %frombool.1.2, ptr @var_36, align 1
331 %add.1.2 = add nuw nsw i32 %i_15.044.2, 2
332 %exitcond105.not.1.2 = icmp eq i32 %add.1.2, 22
333 br i1 %exitcond105.not.1.2, label %for.cond.cleanup9.2, label %for.body10.2
335 for.cond.cleanup9.2: ; preds = %cond.end22.1.2
336 %add27.2 = add nuw nsw i32 %conv45, 3
337 %conv.2 = and i32 %add27.2, 255
338 %cmp.2 = icmp ult i32 %conv.2, 18
339 br i1 %cmp.2, label %for.cond6.preheader, label %for.cond1
342 declare void @llvm.trap() #1
345 @b = hidden local_unnamed_addr global i32 0, align 4
346 @a = hidden local_unnamed_addr global i32 0, align 4
347 @c = hidden local_unnamed_addr global [1 x i32] zeroinitializer, align 4
349 define i32 @d(i64 %e, i32 %f, i64 %g, i32 %h) {
351 ; CHECK: @ %bb.0: @ %entry
352 ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
353 ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
354 ; CHECK-NEXT: .pad #4
355 ; CHECK-NEXT: sub sp, #4
356 ; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
357 ; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}
358 ; CHECK-NEXT: .pad #16
359 ; CHECK-NEXT: sub sp, #16
360 ; CHECK-NEXT: mov lr, r0
361 ; CHECK-NEXT: subs r0, #1
362 ; CHECK-NEXT: sbcs r0, r1, #0
363 ; CHECK-NEXT: blt.w .LBB1_28
364 ; CHECK-NEXT: @ %bb.1: @ %for.cond2.preheader.lr.ph
365 ; CHECK-NEXT: movs r0, #1
366 ; CHECK-NEXT: cmp r2, #1
367 ; CHECK-NEXT: csel r7, r2, r0, lt
368 ; CHECK-NEXT: mov r12, r1
369 ; CHECK-NEXT: mov r1, r7
370 ; CHECK-NEXT: cmp r7, #3
372 ; CHECK-NEXT: movls r1, #3
373 ; CHECK-NEXT: mov r4, r2
374 ; CHECK-NEXT: subs r1, r1, r7
375 ; CHECK-NEXT: movw r2, #43691
376 ; CHECK-NEXT: adds r1, #2
377 ; CHECK-NEXT: movt r2, #43690
378 ; CHECK-NEXT: ldr r6, [sp, #128]
379 ; CHECK-NEXT: movw r8, :lower16:c
380 ; CHECK-NEXT: umull r1, r2, r1, r2
381 ; CHECK-NEXT: movt r8, :upper16:c
382 ; CHECK-NEXT: movs r1, #4
383 ; CHECK-NEXT: @ implicit-def: $r10
384 ; CHECK-NEXT: @ implicit-def: $r5
385 ; CHECK-NEXT: @ implicit-def: $r11
386 ; CHECK-NEXT: mov.w r9, #12
387 ; CHECK-NEXT: str r4, [sp, #12] @ 4-byte Spill
388 ; CHECK-NEXT: add.w r1, r1, r2, lsr #1
389 ; CHECK-NEXT: add.w r0, r0, r2, lsr #1
390 ; CHECK-NEXT: bic r3, r1, #3
391 ; CHECK-NEXT: adr r1, .LCPI1_0
392 ; CHECK-NEXT: vldrw.u32 q0, [r1]
393 ; CHECK-NEXT: adr r1, .LCPI1_1
394 ; CHECK-NEXT: vldrw.u32 q5, [r1]
395 ; CHECK-NEXT: vdup.32 q6, r0
396 ; CHECK-NEXT: vadd.i32 q4, q0, r7
397 ; CHECK-NEXT: vdup.32 q7, r0
398 ; CHECK-NEXT: strd r3, r7, [sp, #4] @ 8-byte Folded Spill
399 ; CHECK-NEXT: b .LBB1_6
400 ; CHECK-NEXT: .LBB1_2: @ %for.body6.preheader
401 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
402 ; CHECK-NEXT: mov r0, r11
403 ; CHECK-NEXT: cmn.w r11, #4
405 ; CHECK-NEXT: mvnle r0, #3
406 ; CHECK-NEXT: movw r2, #18725
407 ; CHECK-NEXT: adds r0, #6
408 ; CHECK-NEXT: movt r2, #9362
409 ; CHECK-NEXT: sub.w r1, r0, r11
410 ; CHECK-NEXT: mov r10, r3
411 ; CHECK-NEXT: umull r2, r3, r1, r2
412 ; CHECK-NEXT: subs r2, r1, r3
413 ; CHECK-NEXT: add.w r2, r3, r2, lsr #1
414 ; CHECK-NEXT: lsrs r3, r2, #2
415 ; CHECK-NEXT: lsls r3, r3, #3
416 ; CHECK-NEXT: sub.w r2, r3, r2, lsr #2
417 ; CHECK-NEXT: subs r1, r2, r1
418 ; CHECK-NEXT: mov r3, r10
419 ; CHECK-NEXT: add r0, r1
420 ; CHECK-NEXT: .LBB1_3: @ %for.cond.cleanup5.loopexit134.split.loop.exit139
421 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
422 ; CHECK-NEXT: add.w r11, r0, #7
423 ; CHECK-NEXT: .LBB1_4: @ %for.cond.cleanup5
424 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
425 ; CHECK-NEXT: mov.w r10, #0
426 ; CHECK-NEXT: .LBB1_5: @ %for.cond.cleanup5
427 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
428 ; CHECK-NEXT: adds r5, #2
429 ; CHECK-NEXT: subs.w r1, r5, lr
430 ; CHECK-NEXT: asr.w r0, r5, #31
431 ; CHECK-NEXT: sbcs.w r0, r0, r12
432 ; CHECK-NEXT: bge.w .LBB1_28
433 ; CHECK-NEXT: .LBB1_6: @ %for.cond2.preheader
434 ; CHECK-NEXT: @ =>This Loop Header: Depth=1
435 ; CHECK-NEXT: @ Child Loop BB1_19 Depth 2
436 ; CHECK-NEXT: @ Child Loop BB1_10 Depth 2
437 ; CHECK-NEXT: @ Child Loop BB1_12 Depth 3
438 ; CHECK-NEXT: @ Child Loop BB1_14 Depth 3
439 ; CHECK-NEXT: cmp.w r11, #2
440 ; CHECK-NEXT: bgt .LBB1_5
441 ; CHECK-NEXT: @ %bb.7: @ %for.body6.lr.ph
442 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
443 ; CHECK-NEXT: cmp r7, #5
444 ; CHECK-NEXT: bhi .LBB1_17
445 ; CHECK-NEXT: @ %bb.8: @ %for.body6.us.preheader
446 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
447 ; CHECK-NEXT: ldrd r2, r3, [sp, #120]
448 ; CHECK-NEXT: movs r0, #32
449 ; CHECK-NEXT: movs r1, #0
450 ; CHECK-NEXT: mov r4, r6
451 ; CHECK-NEXT: mov r7, r12
452 ; CHECK-NEXT: mov r6, lr
453 ; CHECK-NEXT: bl __aeabi_ldivmod
454 ; CHECK-NEXT: mov lr, r6
455 ; CHECK-NEXT: mov r6, r4
456 ; CHECK-NEXT: mov r12, r7
457 ; CHECK-NEXT: ldr r3, [sp, #4] @ 4-byte Reload
458 ; CHECK-NEXT: ldr r4, [sp, #12] @ 4-byte Reload
459 ; CHECK-NEXT: vdup.32 q0, r2
460 ; CHECK-NEXT: ldr r7, [sp, #8] @ 4-byte Reload
461 ; CHECK-NEXT: mov r0, r11
462 ; CHECK-NEXT: b .LBB1_10
463 ; CHECK-NEXT: .LBB1_9: @ %for.cond.cleanup17.us
464 ; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2
465 ; CHECK-NEXT: add.w r11, r0, #7
466 ; CHECK-NEXT: cmn.w r0, #4
467 ; CHECK-NEXT: mov.w r10, #0
468 ; CHECK-NEXT: mov r0, r11
469 ; CHECK-NEXT: bge .LBB1_5
470 ; CHECK-NEXT: .LBB1_10: @ %for.body6.us
471 ; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1
472 ; CHECK-NEXT: @ => This Loop Header: Depth=2
473 ; CHECK-NEXT: @ Child Loop BB1_12 Depth 3
474 ; CHECK-NEXT: @ Child Loop BB1_14 Depth 3
475 ; CHECK-NEXT: movs r1, #0
476 ; CHECK-NEXT: cbz r4, .LBB1_13
477 ; CHECK-NEXT: @ %bb.11: @ %for.body13.us51.preheader
478 ; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2
479 ; CHECK-NEXT: movw r2, :lower16:a
480 ; CHECK-NEXT: vmov q1, q4
481 ; CHECK-NEXT: movt r2, :upper16:a
482 ; CHECK-NEXT: str r1, [r2]
483 ; CHECK-NEXT: movw r2, :lower16:b
484 ; CHECK-NEXT: movt r2, :upper16:b
485 ; CHECK-NEXT: str r1, [r2]
486 ; CHECK-NEXT: mov r2, r3
487 ; CHECK-NEXT: .LBB1_12: @ %vector.body111
488 ; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1
489 ; CHECK-NEXT: @ Parent Loop BB1_10 Depth=2
490 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=3
491 ; CHECK-NEXT: vqadd.u32 q2, q5, r1
492 ; CHECK-NEXT: subs r2, #4
493 ; CHECK-NEXT: vcmp.u32 hi, q7, q2
494 ; CHECK-NEXT: vshl.i32 q2, q1, #2
495 ; CHECK-NEXT: add.w r1, r1, #4
496 ; CHECK-NEXT: vadd.i32 q2, q2, r8
497 ; CHECK-NEXT: vadd.i32 q1, q1, r9
499 ; CHECK-NEXT: vstrwt.32 q0, [q2]
500 ; CHECK-NEXT: bne .LBB1_12
501 ; CHECK-NEXT: b .LBB1_15
502 ; CHECK-NEXT: .LBB1_13: @ %vector.body.preheader
503 ; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2
504 ; CHECK-NEXT: mov r2, r3
505 ; CHECK-NEXT: vmov q1, q4
506 ; CHECK-NEXT: .LBB1_14: @ %vector.body
507 ; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1
508 ; CHECK-NEXT: @ Parent Loop BB1_10 Depth=2
509 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=3
510 ; CHECK-NEXT: vqadd.u32 q2, q5, r1
511 ; CHECK-NEXT: subs r2, #4
512 ; CHECK-NEXT: vcmp.u32 hi, q6, q2
513 ; CHECK-NEXT: vshl.i32 q2, q1, #2
514 ; CHECK-NEXT: add.w r1, r1, #4
515 ; CHECK-NEXT: vadd.i32 q2, q2, r8
516 ; CHECK-NEXT: vadd.i32 q1, q1, r9
518 ; CHECK-NEXT: vstrwt.32 q0, [q2]
519 ; CHECK-NEXT: bne .LBB1_14
520 ; CHECK-NEXT: .LBB1_15: @ %for.cond9.for.cond15.preheader_crit_edge.us
521 ; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2
522 ; CHECK-NEXT: cmp r6, #0
523 ; CHECK-NEXT: beq .LBB1_9
524 ; CHECK-NEXT: @ %bb.16: @ %for.cond9.for.cond15.preheader_crit_edge.us
525 ; CHECK-NEXT: @ in Loop: Header=BB1_10 Depth=2
526 ; CHECK-NEXT: eor r1, r10, #1
527 ; CHECK-NEXT: lsls r1, r1, #31
528 ; CHECK-NEXT: bne .LBB1_9
529 ; CHECK-NEXT: b .LBB1_26
530 ; CHECK-NEXT: .LBB1_17: @ %for.body6.lr.ph.split
531 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
532 ; CHECK-NEXT: cmp r6, #0
533 ; CHECK-NEXT: beq.w .LBB1_2
534 ; CHECK-NEXT: @ %bb.18: @ in Loop: Header=BB1_6 Depth=1
535 ; CHECK-NEXT: mov r0, r11
536 ; CHECK-NEXT: .LBB1_19: @ %for.body6.us60
537 ; CHECK-NEXT: @ Parent Loop BB1_6 Depth=1
538 ; CHECK-NEXT: @ => This Inner Loop Header: Depth=2
539 ; CHECK-NEXT: lsls.w r1, r10, #31
540 ; CHECK-NEXT: bne .LBB1_27
541 ; CHECK-NEXT: @ %bb.20: @ %for.cond.cleanup17.us63
542 ; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2
543 ; CHECK-NEXT: cmn.w r0, #4
544 ; CHECK-NEXT: bge.w .LBB1_3
545 ; CHECK-NEXT: @ %bb.21: @ %for.cond.cleanup17.us63.1
546 ; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2
547 ; CHECK-NEXT: cmn.w r0, #12
548 ; CHECK-NEXT: bgt .LBB1_24
549 ; CHECK-NEXT: @ %bb.22: @ %for.cond.cleanup17.us63.2
550 ; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2
551 ; CHECK-NEXT: cmn.w r0, #19
552 ; CHECK-NEXT: bgt .LBB1_25
553 ; CHECK-NEXT: @ %bb.23: @ %for.cond.cleanup17.us63.3
554 ; CHECK-NEXT: @ in Loop: Header=BB1_19 Depth=2
555 ; CHECK-NEXT: add.w r11, r0, #28
556 ; CHECK-NEXT: cmn.w r0, #25
557 ; CHECK-NEXT: mov.w r10, #0
558 ; CHECK-NEXT: mov r0, r11
559 ; CHECK-NEXT: blt .LBB1_19
560 ; CHECK-NEXT: b .LBB1_5
561 ; CHECK-NEXT: .LBB1_24: @ %for.cond.cleanup5.loopexit134.split.loop.exit137
562 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
563 ; CHECK-NEXT: add.w r11, r0, #14
564 ; CHECK-NEXT: b .LBB1_4
565 ; CHECK-NEXT: .LBB1_25: @ %for.cond.cleanup5.loopexit134.split.loop.exit135
566 ; CHECK-NEXT: @ in Loop: Header=BB1_6 Depth=1
567 ; CHECK-NEXT: add.w r11, r0, #21
568 ; CHECK-NEXT: b .LBB1_4
569 ; CHECK-NEXT: .LBB1_26: @ %for.inc19.us
570 ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
571 ; CHECK-NEXT: b .LBB1_26
572 ; CHECK-NEXT: .LBB1_27: @ %for.inc19.us66
573 ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
574 ; CHECK-NEXT: b .LBB1_27
575 ; CHECK-NEXT: .LBB1_28: @ %for.cond.cleanup
576 ; CHECK-NEXT: add sp, #16
577 ; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}
578 ; CHECK-NEXT: add sp, #4
579 ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
580 ; CHECK-NEXT: .p2align 4
581 ; CHECK-NEXT: @ %bb.29:
582 ; CHECK-NEXT: .LCPI1_0:
583 ; CHECK-NEXT: .long 0 @ 0x0
584 ; CHECK-NEXT: .long 3 @ 0x3
585 ; CHECK-NEXT: .long 6 @ 0x6
586 ; CHECK-NEXT: .long 9 @ 0x9
587 ; CHECK-NEXT: .LCPI1_1:
588 ; CHECK-NEXT: .long 0 @ 0x0
589 ; CHECK-NEXT: .long 1 @ 0x1
590 ; CHECK-NEXT: .long 2 @ 0x2
591 ; CHECK-NEXT: .long 3 @ 0x3
593 %cmp47 = icmp sgt i64 %e, 0
594 br i1 %cmp47, label %for.cond2.preheader.lr.ph, label %for.cond.cleanup
596 for.cond2.preheader.lr.ph: ; preds = %entry
597 %cmp7.inv = icmp slt i32 %f, 1
598 %spec.select = select i1 %cmp7.inv, i32 %f, i32 1
599 %cmp1041 = icmp ult i32 %spec.select, 6
600 %tobool.not = icmp eq i32 %f, 0
601 %tobool20.not97 = icmp eq i32 %h, 0
602 %0 = icmp ugt i32 %spec.select, 3
603 %umax = select i1 %0, i32 %spec.select, i32 3
604 %1 = add i32 %umax, 2
605 %2 = sub i32 %1, %spec.select
607 %4 = add nuw nsw i32 %3, 1
608 %5 = icmp ugt i32 %spec.select, 3
609 %umax112 = select i1 %5, i32 %spec.select, i32 3
610 %6 = add i32 %umax112, 2
611 %7 = sub i32 %6, %spec.select
613 %9 = add nuw nsw i32 %8, 1
614 %n.rnd.up114 = add nuw nsw i32 %8, 4
615 %n.vec116 = and i32 %n.rnd.up114, 2147483644
616 %.splatinsert121 = insertelement <4 x i32> poison, i32 %spec.select, i32 0
617 %.splat122 = shufflevector <4 x i32> %.splatinsert121, <4 x i32> poison, <4 x i32> zeroinitializer
618 %induction123 = add <4 x i32> %.splat122, <i32 0, i32 3, i32 6, i32 9>
619 %n.rnd.up = add nuw nsw i32 %3, 4
620 %n.vec = and i32 %n.rnd.up, 2147483644
621 %.splatinsert = insertelement <4 x i32> poison, i32 %spec.select, i32 0
622 %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
623 %induction = add <4 x i32> %.splat, <i32 0, i32 3, i32 6, i32 9>
624 br label %for.cond2.preheader
626 for.cond2.preheader: ; preds = %for.cond2.preheader.lr.ph, %for.cond.cleanup5
627 %l.0.off050 = phi i1 [ undef, %for.cond2.preheader.lr.ph ], [ %l.1.off0.lcssa, %for.cond.cleanup5 ]
628 %i.049 = phi i32 [ undef, %for.cond2.preheader.lr.ph ], [ %add26, %for.cond.cleanup5 ]
629 %j.048 = phi i32 [ undef, %for.cond2.preheader.lr.ph ], [ %j.1.lcssa, %for.cond.cleanup5 ]
630 %cmp343 = icmp slt i32 %j.048, 3
631 br i1 %cmp343, label %for.body6.lr.ph, label %for.cond.cleanup5
633 for.body6.lr.ph: ; preds = %for.cond2.preheader
634 br i1 %cmp1041, label %for.body6.us.preheader, label %for.body6.lr.ph.split
636 for.body6.us.preheader: ; preds = %for.body6.lr.ph
637 %rem.us = srem i64 32, %g
638 %conv14.us = trunc i64 %rem.us to i32
639 %broadcast.splatinsert131 = insertelement <4 x i32> poison, i32 %conv14.us, i32 0
640 %broadcast.splat132 = shufflevector <4 x i32> %broadcast.splatinsert131, <4 x i32> poison, <4 x i32> zeroinitializer
641 %broadcast.splatinsert107 = insertelement <4 x i32> poison, i32 %conv14.us, i32 0
642 %broadcast.splat108 = shufflevector <4 x i32> %broadcast.splatinsert107, <4 x i32> poison, <4 x i32> zeroinitializer
643 br label %for.body6.us
645 for.body6.us: ; preds = %for.body6.us.preheader, %for.cond.cleanup17.us
646 %l.1.off045.us = phi i1 [ false, %for.cond.cleanup17.us ], [ %l.0.off050, %for.body6.us.preheader ]
647 %j.144.us = phi i32 [ %add23.us, %for.cond.cleanup17.us ], [ %j.048, %for.body6.us.preheader ]
648 br i1 %tobool.not, label %vector.body, label %for.body13.us51.preheader
650 vector.body: ; preds = %for.body6.us, %vector.body
651 %index = phi i32 [ %index.next, %vector.body ], [ 0, %for.body6.us ]
652 %vec.ind = phi <4 x i32> [ %vec.ind.next, %vector.body ], [ %induction, %for.body6.us ]
653 %active.lane.mask = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index, i32 %4)
654 %10 = getelementptr inbounds [1 x i32], ptr @c, i32 0, <4 x i32> %vec.ind
655 call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> %broadcast.splat108, <4 x ptr> %10, i32 4, <4 x i1> %active.lane.mask)
656 %index.next = add i32 %index, 4
657 %vec.ind.next = add <4 x i32> %vec.ind, <i32 12, i32 12, i32 12, i32 12>
658 %11 = icmp eq i32 %index.next, %n.vec
659 br i1 %11, label %for.cond9.for.cond15.preheader_crit_edge.us, label %vector.body
661 for.body13.us51.preheader: ; preds = %for.body6.us
662 store i32 0, ptr @b, align 4
663 store i32 0, ptr @a, align 4
664 br label %vector.body111
666 vector.body111: ; preds = %vector.body111, %for.body13.us51.preheader
667 %index117 = phi i32 [ 0, %for.body13.us51.preheader ], [ %index.next118, %vector.body111 ]
668 %vec.ind124 = phi <4 x i32> [ %induction123, %for.body13.us51.preheader ], [ %vec.ind.next125, %vector.body111 ]
669 %active.lane.mask130 = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %index117, i32 %9)
670 %12 = getelementptr inbounds [1 x i32], ptr @c, i32 0, <4 x i32> %vec.ind124
671 call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> %broadcast.splat132, <4 x ptr> %12, i32 4, <4 x i1> %active.lane.mask130)
672 %index.next118 = add i32 %index117, 4
673 %vec.ind.next125 = add <4 x i32> %vec.ind124, <i32 12, i32 12, i32 12, i32 12>
674 %13 = icmp eq i32 %index.next118, %n.vec116
675 br i1 %13, label %for.cond9.for.cond15.preheader_crit_edge.us, label %vector.body111
677 for.cond.cleanup17.us: ; preds = %for.cond9.for.cond15.preheader_crit_edge.us
678 %add23.us = add nsw i32 %j.144.us, 7
679 %cmp3.us = icmp slt i32 %j.144.us, -4
680 br i1 %cmp3.us, label %for.body6.us, label %for.cond.cleanup5
682 for.inc19.us: ; preds = %for.cond9.for.cond15.preheader_crit_edge.us, %for.inc19.us
683 br label %for.inc19.us
685 for.cond9.for.cond15.preheader_crit_edge.us: ; preds = %vector.body111, %vector.body
686 %l.1.off045.us.not = xor i1 %l.1.off045.us, true
687 %brmerge = or i1 %tobool20.not97, %l.1.off045.us.not
688 br i1 %brmerge, label %for.cond.cleanup17.us, label %for.inc19.us
690 for.body6.lr.ph.split: ; preds = %for.body6.lr.ph
691 br i1 %tobool20.not97, label %for.body6.preheader, label %for.body6.us60
693 for.body6.preheader: ; preds = %for.body6.lr.ph.split
694 %14 = icmp sgt i32 %j.048, -4
695 %smax = select i1 %14, i32 %j.048, i32 -4
696 %15 = add nsw i32 %smax, 6
697 %16 = sub i32 %15, %j.048
698 %17 = urem i32 %16, 7
699 %18 = sub i32 %16, %17
700 %19 = add nsw i32 %j.048, 7
701 %20 = add i32 %19, %18
702 br label %for.cond.cleanup5
704 for.body6.us60: ; preds = %for.body6.lr.ph.split, %for.cond.cleanup17.us63.3
705 %l.1.off045.us61 = phi i1 [ false, %for.cond.cleanup17.us63.3 ], [ %l.0.off050, %for.body6.lr.ph.split ]
706 %j.144.us62 = phi i32 [ %add23.us64.3, %for.cond.cleanup17.us63.3 ], [ %j.048, %for.body6.lr.ph.split ]
707 br i1 %l.1.off045.us61, label %for.inc19.us66, label %for.cond.cleanup17.us63
709 for.cond.cleanup17.us63: ; preds = %for.body6.us60
710 %cmp3.us65 = icmp slt i32 %j.144.us62, -4
711 br i1 %cmp3.us65, label %for.cond.cleanup17.us63.1, label %for.cond.cleanup5.loopexit134.split.loop.exit139
713 for.inc19.us66: ; preds = %for.body6.us60, %for.inc19.us66
714 br label %for.inc19.us66
716 for.cond.cleanup: ; preds = %for.cond.cleanup5, %entry
719 for.cond.cleanup5.loopexit134.split.loop.exit135: ; preds = %for.cond.cleanup17.us63.2
720 %add23.us64.2.le = add nsw i32 %j.144.us62, 21
721 br label %for.cond.cleanup5
723 for.cond.cleanup5.loopexit134.split.loop.exit137: ; preds = %for.cond.cleanup17.us63.1
724 %add23.us64.1.le = add nsw i32 %j.144.us62, 14
725 br label %for.cond.cleanup5
727 for.cond.cleanup5.loopexit134.split.loop.exit139: ; preds = %for.cond.cleanup17.us63
728 %add23.us64.le = add nsw i32 %j.144.us62, 7
729 br label %for.cond.cleanup5
731 for.cond.cleanup5: ; preds = %for.cond.cleanup5.loopexit134.split.loop.exit135, %for.cond.cleanup5.loopexit134.split.loop.exit137, %for.cond.cleanup5.loopexit134.split.loop.exit139, %for.cond.cleanup17.us63.3, %for.cond.cleanup17.us, %for.body6.preheader, %for.cond2.preheader
732 %j.1.lcssa = phi i32 [ %j.048, %for.cond2.preheader ], [ %20, %for.body6.preheader ], [ %add23.us, %for.cond.cleanup17.us ], [ %add23.us64.2.le, %for.cond.cleanup5.loopexit134.split.loop.exit135 ], [ %add23.us64.1.le, %for.cond.cleanup5.loopexit134.split.loop.exit137 ], [ %add23.us64.le, %for.cond.cleanup5.loopexit134.split.loop.exit139 ], [ %add23.us64.3, %for.cond.cleanup17.us63.3 ]
733 %l.1.off0.lcssa = phi i1 [ %l.0.off050, %for.cond2.preheader ], [ false, %for.body6.preheader ], [ false, %for.cond.cleanup17.us ], [ false, %for.cond.cleanup17.us63.3 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit139 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit137 ], [ false, %for.cond.cleanup5.loopexit134.split.loop.exit135 ]
734 %add26 = add nsw i32 %i.049, 2
735 %conv = sext i32 %add26 to i64
736 %cmp = icmp slt i64 %conv, %e
737 br i1 %cmp, label %for.cond2.preheader, label %for.cond.cleanup
739 for.cond.cleanup17.us63.1: ; preds = %for.cond.cleanup17.us63
740 %cmp3.us65.1 = icmp slt i32 %j.144.us62, -11
741 br i1 %cmp3.us65.1, label %for.cond.cleanup17.us63.2, label %for.cond.cleanup5.loopexit134.split.loop.exit137
743 for.cond.cleanup17.us63.2: ; preds = %for.cond.cleanup17.us63.1
744 %cmp3.us65.2 = icmp slt i32 %j.144.us62, -18
745 br i1 %cmp3.us65.2, label %for.cond.cleanup17.us63.3, label %for.cond.cleanup5.loopexit134.split.loop.exit135
747 for.cond.cleanup17.us63.3: ; preds = %for.cond.cleanup17.us63.2
748 %add23.us64.3 = add nsw i32 %j.144.us62, 28
749 %cmp3.us65.3 = icmp slt i32 %j.144.us62, -25
750 br i1 %cmp3.us65.3, label %for.body6.us60, label %for.cond.cleanup5
753 declare <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32, i32) #1
754 declare void @llvm.masked.scatter.v4i32.v4p0(<4 x i32>, <4 x ptr>, i32 immarg, <4 x i1>) #2