1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve -run-pass=arm-low-overhead-loops %s -o - --verify-machineinstrs | FileCheck %s
5 define dso_local arm_aapcs_vfpcc void @test1(ptr noalias nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) local_unnamed_addr {
7 %cmp30 = icmp eq i32 %N, 0
10 %2 = shl nuw i32 %1, 2
13 %5 = add nuw nsw i32 %4, 1
14 br i1 %cmp30, label %for.cond.cleanup6, label %vector.ph
16 vector.ph: ; preds = %entry
17 %start1 = call i32 @llvm.start.loop.iterations.i32(i32 %5)
20 vector.body: ; preds = %vector.body, %vector.ph
21 %lsr.iv68 = phi ptr [ %scevgep69, %vector.body ], [ %a, %vector.ph ]
22 %lsr.iv65 = phi ptr [ %scevgep66, %vector.body ], [ %c, %vector.ph ]
23 %lsr.iv62 = phi ptr [ %scevgep63, %vector.body ], [ %b, %vector.ph ]
24 %6 = phi i32 [ %start1, %vector.ph ], [ %11, %vector.body ]
25 %7 = phi i32 [ %N, %vector.ph ], [ %9, %vector.body ]
26 %lsr.iv6870 = bitcast ptr %lsr.iv68 to ptr
27 %lsr.iv6567 = bitcast ptr %lsr.iv65 to ptr
28 %lsr.iv6264 = bitcast ptr %lsr.iv62 to ptr
29 %8 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %7)
31 %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv6264, i32 4, <4 x i1> %8, <4 x i32> undef)
32 %wide.masked.load35 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv6567, i32 4, <4 x i1> %8, <4 x i32> undef)
33 %10 = mul nsw <4 x i32> %wide.masked.load35, %wide.masked.load
34 call void @llvm.masked.store.v4i32.p0(<4 x i32> %10, ptr %lsr.iv6870, i32 4, <4 x i1> %8)
35 %scevgep63 = getelementptr i32, ptr %lsr.iv62, i32 4
36 %scevgep66 = getelementptr i32, ptr %lsr.iv65, i32 4
37 %scevgep69 = getelementptr i32, ptr %lsr.iv68, i32 4
38 %11 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %6, i32 1)
39 %12 = icmp ne i32 %11, 0
40 br i1 %12, label %vector.body, label %for.cond4.preheader
42 for.cond4.preheader: ; preds = %vector.body
43 %13 = icmp eq i32 %N, 0
46 %16 = shl nuw i32 %15, 2
49 %19 = add nuw nsw i32 %18, 1
50 br i1 %13, label %for.cond.cleanup6, label %vector.ph39
52 vector.ph39: ; preds = %for.cond4.preheader
53 %start2 = call i32 @llvm.start.loop.iterations.i32(i32 %19)
54 br label %vector.body38
56 vector.body38: ; preds = %vector.body38, %vector.ph39
57 %lsr.iv59 = phi ptr [ %scevgep60, %vector.body38 ], [ %a, %vector.ph39 ]
58 %lsr.iv56 = phi ptr [ %scevgep57, %vector.body38 ], [ %c, %vector.ph39 ]
59 %lsr.iv = phi ptr [ %scevgep, %vector.body38 ], [ %b, %vector.ph39 ]
60 %20 = phi i32 [ %start2, %vector.ph39 ], [ %26, %vector.body38 ]
61 %21 = phi i32 [ %N, %vector.ph39 ], [ %23, %vector.body38 ]
62 %lsr.iv5961 = bitcast ptr %lsr.iv59 to ptr
63 %lsr.iv5658 = bitcast ptr %lsr.iv56 to ptr
64 %lsr.iv55 = bitcast ptr %lsr.iv to ptr
65 %22 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %21)
67 %wide.masked.load52 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv55, i32 4, <4 x i1> %22, <4 x i32> undef)
68 %wide.masked.load53 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv5658, i32 4, <4 x i1> %22, <4 x i32> undef)
69 %24 = xor <4 x i32> %wide.masked.load53, %wide.masked.load52
70 %wide.masked.load54 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv5961, i32 4, <4 x i1> %22, <4 x i32> undef)
71 %25 = add nsw <4 x i32> %wide.masked.load54, %24
72 call void @llvm.masked.store.v4i32.p0(<4 x i32> %25, ptr %lsr.iv5961, i32 4, <4 x i1> %22)
73 %scevgep = getelementptr i32, ptr %lsr.iv, i32 4
74 %scevgep57 = getelementptr i32, ptr %lsr.iv56, i32 4
75 %scevgep60 = getelementptr i32, ptr %lsr.iv59, i32 4
76 %26 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %20, i32 1)
77 %27 = icmp ne i32 %26, 0
78 br i1 %27, label %vector.body38, label %for.cond.cleanup6
80 for.cond.cleanup6: ; preds = %vector.body38, %entry, %for.cond4.preheader
83 define dso_local arm_aapcs_vfpcc void @test2(ptr noalias nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) local_unnamed_addr {
86 %cmp30 = icmp eq i32 %div, 0
87 %0 = add nuw i32 %div, 3
89 %2 = shl nuw i32 %1, 2
92 %5 = add nuw nsw i32 %4, 1
93 br i1 %cmp30, label %for.cond4.preheader, label %vector.ph
95 vector.ph: ; preds = %entry
96 %start1 = call i32 @llvm.start.loop.iterations.i32(i32 %5)
99 vector.body: ; preds = %vector.body, %vector.ph
100 %lsr.iv68 = phi ptr [ %scevgep69, %vector.body ], [ %a, %vector.ph ]
101 %lsr.iv65 = phi ptr [ %scevgep66, %vector.body ], [ %c, %vector.ph ]
102 %lsr.iv62 = phi ptr [ %scevgep63, %vector.body ], [ %b, %vector.ph ]
103 %6 = phi i32 [ %start1, %vector.ph ], [ %11, %vector.body ]
104 %7 = phi i32 [ %div, %vector.ph ], [ %9, %vector.body ]
105 %lsr.iv6870 = bitcast ptr %lsr.iv68 to ptr
106 %lsr.iv6567 = bitcast ptr %lsr.iv65 to ptr
107 %lsr.iv6264 = bitcast ptr %lsr.iv62 to ptr
108 %8 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %7)
110 %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv6264, i32 4, <4 x i1> %8, <4 x i32> undef)
111 %wide.masked.load35 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv6567, i32 4, <4 x i1> %8, <4 x i32> undef)
112 %10 = mul nsw <4 x i32> %wide.masked.load35, %wide.masked.load
113 call void @llvm.masked.store.v4i32.p0(<4 x i32> %10, ptr %lsr.iv6870, i32 4, <4 x i1> %8)
114 %scevgep63 = getelementptr i32, ptr %lsr.iv62, i32 4
115 %scevgep66 = getelementptr i32, ptr %lsr.iv65, i32 4
116 %scevgep69 = getelementptr i32, ptr %lsr.iv68, i32 4
117 %11 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %6, i32 1)
118 %12 = icmp ne i32 %11, 0
119 br i1 %12, label %vector.body, label %for.cond4.preheader
121 for.cond4.preheader: ; preds = %vector.body, %entry
122 %cmp528 = icmp eq i32 %N, 0
124 %14 = lshr i32 %13, 2
125 %15 = shl nuw i32 %14, 2
126 %16 = add i32 %15, -4
127 %17 = lshr i32 %16, 2
128 %18 = add nuw nsw i32 %17, 1
129 br i1 %cmp528, label %for.cond.cleanup6, label %vector.ph39
131 vector.ph39: ; preds = %for.cond4.preheader
132 %start2 = call i32 @llvm.start.loop.iterations.i32(i32 %18)
133 br label %vector.body38
135 vector.body38: ; preds = %vector.body38, %vector.ph39
136 %lsr.iv59 = phi ptr [ %scevgep60, %vector.body38 ], [ %a, %vector.ph39 ]
137 %lsr.iv56 = phi ptr [ %scevgep57, %vector.body38 ], [ %c, %vector.ph39 ]
138 %lsr.iv = phi ptr [ %scevgep, %vector.body38 ], [ %b, %vector.ph39 ]
139 %19 = phi i32 [ %start2, %vector.ph39 ], [ %25, %vector.body38 ]
140 %20 = phi i32 [ %N, %vector.ph39 ], [ %22, %vector.body38 ]
141 %lsr.iv5961 = bitcast ptr %lsr.iv59 to ptr
142 %lsr.iv5658 = bitcast ptr %lsr.iv56 to ptr
143 %lsr.iv55 = bitcast ptr %lsr.iv to ptr
144 %21 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %20)
146 %wide.masked.load52 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv55, i32 4, <4 x i1> %21, <4 x i32> undef)
147 %wide.masked.load53 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv5658, i32 4, <4 x i1> %21, <4 x i32> undef)
148 %23 = xor <4 x i32> %wide.masked.load53, %wide.masked.load52
149 %wide.masked.load54 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv5961, i32 4, <4 x i1> %21, <4 x i32> undef)
150 %24 = add nsw <4 x i32> %wide.masked.load54, %23
151 call void @llvm.masked.store.v4i32.p0(<4 x i32> %24, ptr %lsr.iv5961, i32 4, <4 x i1> %21)
152 %scevgep = getelementptr i32, ptr %lsr.iv, i32 4
153 %scevgep57 = getelementptr i32, ptr %lsr.iv56, i32 4
154 %scevgep60 = getelementptr i32, ptr %lsr.iv59, i32 4
155 %25 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %19, i32 1)
156 %26 = icmp ne i32 %25, 0
157 br i1 %26, label %vector.body38, label %for.cond.cleanup6
159 for.cond.cleanup6: ; preds = %vector.body38, %for.cond4.preheader
162 define dso_local arm_aapcs_vfpcc void @test3(ptr noalias nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) local_unnamed_addr {
164 %cmp54 = icmp eq i32 %N, 0
167 %2 = shl nuw i32 %1, 2
170 %5 = add nuw nsw i32 %4, 1
171 br i1 %cmp54, label %for.cond.cleanup17, label %vector.ph
173 vector.ph: ; preds = %entry
174 %start1 = call i32 @llvm.start.loop.iterations.i32(i32 %5)
175 br label %vector.body
177 vector.body: ; preds = %vector.body, %vector.ph
178 %lsr.iv123 = phi ptr [ %scevgep124, %vector.body ], [ %a, %vector.ph ]
179 %lsr.iv120 = phi ptr [ %scevgep121, %vector.body ], [ %c, %vector.ph ]
180 %lsr.iv117 = phi ptr [ %scevgep118, %vector.body ], [ %b, %vector.ph ]
181 %6 = phi i32 [ %start1, %vector.ph ], [ %11, %vector.body ]
182 %7 = phi i32 [ %N, %vector.ph ], [ %9, %vector.body ]
183 %lsr.iv123125 = bitcast ptr %lsr.iv123 to ptr
184 %lsr.iv120122 = bitcast ptr %lsr.iv120 to ptr
185 %lsr.iv117119 = bitcast ptr %lsr.iv117 to ptr
186 %8 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %7)
188 %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv117119, i32 4, <4 x i1> %8, <4 x i32> undef)
189 %wide.masked.load62 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv120122, i32 4, <4 x i1> %8, <4 x i32> undef)
190 %10 = mul nsw <4 x i32> %wide.masked.load62, %wide.masked.load
191 call void @llvm.masked.store.v4i32.p0(<4 x i32> %10, ptr %lsr.iv123125, i32 4, <4 x i1> %8)
192 %scevgep118 = getelementptr i32, ptr %lsr.iv117, i32 4
193 %scevgep121 = getelementptr i32, ptr %lsr.iv120, i32 4
194 %scevgep124 = getelementptr i32, ptr %lsr.iv123, i32 4
195 %11 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %6, i32 1)
196 %12 = icmp ne i32 %11, 0
197 br i1 %12, label %vector.body, label %for.cond4.preheader
199 for.cond4.preheader: ; preds = %vector.body
200 %div = lshr i32 %N, 1
201 %cmp552 = icmp eq i32 %div, 0
202 %13 = add nuw i32 %div, 3
203 %14 = lshr i32 %13, 2
204 %15 = shl nuw i32 %14, 2
205 %16 = add i32 %15, -4
206 %17 = lshr i32 %16, 2
207 %18 = add nuw nsw i32 %17, 1
208 br i1 %cmp552, label %for.cond15.preheader, label %vector.ph66
210 vector.ph66: ; preds = %for.cond4.preheader
211 %start2 = call i32 @llvm.start.loop.iterations.i32(i32 %18)
212 br label %vector.body65
214 vector.body65: ; preds = %vector.body65, %vector.ph66
215 %lsr.iv114 = phi ptr [ %scevgep115, %vector.body65 ], [ %a, %vector.ph66 ]
216 %lsr.iv111 = phi ptr [ %scevgep112, %vector.body65 ], [ %c, %vector.ph66 ]
217 %lsr.iv108 = phi ptr [ %scevgep109, %vector.body65 ], [ %b, %vector.ph66 ]
218 %19 = phi i32 [ %start2, %vector.ph66 ], [ %25, %vector.body65 ]
219 %20 = phi i32 [ %div, %vector.ph66 ], [ %22, %vector.body65 ]
220 %lsr.iv114116 = bitcast ptr %lsr.iv114 to ptr
221 %lsr.iv111113 = bitcast ptr %lsr.iv111 to ptr
222 %lsr.iv108110 = bitcast ptr %lsr.iv108 to ptr
223 %21 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %20)
225 %wide.masked.load79 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv108110, i32 4, <4 x i1> %21, <4 x i32> undef)
226 %wide.masked.load80 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv111113, i32 4, <4 x i1> %21, <4 x i32> undef)
227 %23 = xor <4 x i32> %wide.masked.load80, %wide.masked.load79
228 %wide.masked.load81 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv114116, i32 4, <4 x i1> %21, <4 x i32> undef)
229 %24 = add nsw <4 x i32> %wide.masked.load81, %23
230 call void @llvm.masked.store.v4i32.p0(<4 x i32> %24, ptr %lsr.iv114116, i32 4, <4 x i1> %21)
231 %scevgep109 = getelementptr i32, ptr %lsr.iv108, i32 4
232 %scevgep112 = getelementptr i32, ptr %lsr.iv111, i32 4
233 %scevgep115 = getelementptr i32, ptr %lsr.iv114, i32 4
234 %25 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %19, i32 1)
235 %26 = icmp ne i32 %25, 0
236 br i1 %26, label %vector.body65, label %for.cond15.preheader
238 for.cond15.preheader: ; preds = %vector.body65, %for.cond4.preheader
239 %27 = icmp eq i32 %N, 0
241 %29 = lshr i32 %28, 2
242 %30 = shl nuw i32 %29, 2
243 %31 = add i32 %30, -4
244 %32 = lshr i32 %31, 2
245 %33 = add nuw nsw i32 %32, 1
246 br i1 %27, label %for.cond.cleanup17, label %vector.ph85
248 vector.ph85: ; preds = %for.cond15.preheader
249 %start3 = call i32 @llvm.start.loop.iterations.i32(i32 %33)
250 br label %vector.body84
252 vector.body84: ; preds = %vector.body84, %vector.ph85
253 %lsr.iv105 = phi ptr [ %scevgep106, %vector.body84 ], [ %a, %vector.ph85 ]
254 %lsr.iv102 = phi ptr [ %scevgep103, %vector.body84 ], [ %c, %vector.ph85 ]
255 %lsr.iv = phi ptr [ %scevgep, %vector.body84 ], [ %b, %vector.ph85 ]
256 %34 = phi i32 [ %start3, %vector.ph85 ], [ %40, %vector.body84 ]
257 %35 = phi i32 [ %N, %vector.ph85 ], [ %37, %vector.body84 ]
258 %lsr.iv105107 = bitcast ptr %lsr.iv105 to ptr
259 %lsr.iv102104 = bitcast ptr %lsr.iv102 to ptr
260 %lsr.iv101 = bitcast ptr %lsr.iv to ptr
261 %36 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %35)
263 %wide.masked.load98 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv101, i32 4, <4 x i1> %36, <4 x i32> undef)
264 %wide.masked.load99 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv102104, i32 4, <4 x i1> %36, <4 x i32> undef)
265 %wide.masked.load100 = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv105107, i32 4, <4 x i1> %36, <4 x i32> undef)
266 %38 = add <4 x i32> %wide.masked.load99, %wide.masked.load98
267 %39 = sub <4 x i32> %wide.masked.load100, %38
268 call void @llvm.masked.store.v4i32.p0(<4 x i32> %39, ptr %lsr.iv105107, i32 4, <4 x i1> %36)
269 %scevgep = getelementptr i32, ptr %lsr.iv, i32 4
270 %scevgep103 = getelementptr i32, ptr %lsr.iv102, i32 4
271 %scevgep106 = getelementptr i32, ptr %lsr.iv105, i32 4
272 %40 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %34, i32 1)
273 %41 = icmp ne i32 %40, 0
274 br i1 %41, label %vector.body84, label %for.cond.cleanup17
276 for.cond.cleanup17: ; preds = %vector.body84, %entry, %for.cond15.preheader
279 declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>)
280 declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32 immarg, <4 x i1>)
281 declare i32 @llvm.start.loop.iterations.i32(i32)
282 declare i32 @llvm.loop.decrement.reg.i32.i32.i32(i32, i32)
283 declare <4 x i1> @llvm.arm.mve.vctp32(i32)
289 exposesReturnsTwice: false
291 regBankSelected: false
294 tracksRegLiveness: true
298 - { reg: '$r0', virtual-reg: '' }
299 - { reg: '$r1', virtual-reg: '' }
300 - { reg: '$r2', virtual-reg: '' }
301 - { reg: '$r3', virtual-reg: '' }
303 isFrameAddressTaken: false
304 isReturnAddressTaken: false
308 offsetAdjustment: -16
314 cvBytesOfCalleeSavedRegisters: 0
315 hasOpaqueSPAdjustment: false
317 hasMustTailInVarArgFunc: false
323 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
324 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
325 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
326 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
327 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
328 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
329 - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
330 stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true,
331 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
332 - { id: 3, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4,
333 stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true,
334 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
335 - { id: 4, name: '', type: spill-slot, offset: -20, size: 4, alignment: 4,
336 stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true,
337 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
338 - { id: 5, name: '', type: spill-slot, offset: -24, size: 4, alignment: 4,
339 stack-id: default, callee-saved-register: '$r8', callee-saved-restored: true,
340 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
343 machineFunctionInfo: {}
345 ; CHECK-LABEL: name: test1
347 ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.1(0x50000000)
348 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8
350 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
351 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 20
352 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
353 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
354 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -12
355 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -16
356 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -20
357 ; CHECK-NEXT: dead $r7 = frame-setup tADDrSPi $sp, 3, 14 /* CC::al */, $noreg
358 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $r7, 8
359 ; CHECK-NEXT: early-clobber $sp = frame-setup t2STR_PRE killed $r8, $sp, -4, 14 /* CC::al */, $noreg
360 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -24
361 ; CHECK-NEXT: tCMPi8 renamable $r3, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
362 ; CHECK-NEXT: tBcc %bb.6, 0 /* CC::eq */, killed $cpsr
364 ; CHECK-NEXT: bb.1.vector.ph:
365 ; CHECK-NEXT: successors: %bb.2(0x80000000)
366 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
368 ; CHECK-NEXT: $r8 = tMOVr $r0, 14 /* CC::al */, $noreg
369 ; CHECK-NEXT: $r5 = tMOVr $r2, 14 /* CC::al */, $noreg
370 ; CHECK-NEXT: $r4 = tMOVr $r3, 14 /* CC::al */, $noreg
371 ; CHECK-NEXT: $r6 = tMOVr $r1, 14 /* CC::al */, $noreg
372 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r4
374 ; CHECK-NEXT: bb.2.vector.body:
375 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
376 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r5, $r6, $r8
378 ; CHECK-NEXT: renamable $r6, renamable $q0 = MVE_VLDRWU32_post killed renamable $r6, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv6264, align 4)
379 ; CHECK-NEXT: renamable $r5, renamable $q1 = MVE_VLDRWU32_post killed renamable $r5, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv6567, align 4)
380 ; CHECK-NEXT: renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
381 ; CHECK-NEXT: renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv6870, align 4)
382 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
384 ; CHECK-NEXT: bb.3.for.cond4.preheader:
385 ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.4(0x50000000)
386 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
388 ; CHECK-NEXT: tCBZ $r3, %bb.6
390 ; CHECK-NEXT: bb.4.vector.ph39:
391 ; CHECK-NEXT: successors: %bb.5(0x80000000)
392 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
394 ; CHECK-NEXT: $r12 = tMOVr $r0, 14 /* CC::al */, $noreg
395 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r3
397 ; CHECK-NEXT: bb.5.vector.body38:
398 ; CHECK-NEXT: successors: %bb.5(0x7c000000), %bb.6(0x04000000)
399 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r12
401 ; CHECK-NEXT: renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv55, align 4)
402 ; CHECK-NEXT: renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv5658, align 4)
403 ; CHECK-NEXT: renamable $r12, renamable $q2 = MVE_VLDRWU32_post killed renamable $r12, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv5961, align 4)
404 ; CHECK-NEXT: renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
405 ; CHECK-NEXT: renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
406 ; CHECK-NEXT: MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv5961, align 4)
407 ; CHECK-NEXT: $r0 = tMOVr $r12, 14 /* CC::al */, $noreg
408 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.5
410 ; CHECK-NEXT: bb.6.for.cond.cleanup6:
411 ; CHECK-NEXT: $r8, $sp = t2LDR_POST $sp, 4, 14 /* CC::al */, $noreg
412 ; CHECK-NEXT: tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc
414 successors: %bb.6(0x30000000), %bb.1(0x50000000)
415 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr, $r8
417 frame-setup tPUSH 14, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
418 frame-setup CFI_INSTRUCTION def_cfa_offset 20
419 frame-setup CFI_INSTRUCTION offset $lr, -4
420 frame-setup CFI_INSTRUCTION offset $r7, -8
421 frame-setup CFI_INSTRUCTION offset $r6, -12
422 frame-setup CFI_INSTRUCTION offset $r5, -16
423 frame-setup CFI_INSTRUCTION offset $r4, -20
424 $r7 = frame-setup tADDrSPi $sp, 3, 14, $noreg
425 frame-setup CFI_INSTRUCTION def_cfa $r7, 8
426 early-clobber $sp = frame-setup t2STR_PRE killed $r8, $sp, -4, 14, $noreg
427 frame-setup CFI_INSTRUCTION offset $r8, -24
428 tCMPi8 renamable $r3, 0, 14, $noreg, implicit-def $cpsr
429 tBcc %bb.6, 0, killed $cpsr
432 successors: %bb.2(0x80000000)
433 liveins: $r0, $r1, $r2, $r3
435 renamable $r6, dead $cpsr = tADDi3 renamable $r3, 3, 14, $noreg
436 $r8 = tMOVr $r0, 14, $noreg
437 renamable $r6 = t2BICri killed renamable $r6, 3, 14, $noreg, $noreg
438 $r5 = tMOVr $r2, 14, $noreg
439 renamable $r12 = t2SUBri killed renamable $r6, 4, 14, $noreg, $noreg
440 renamable $r6, dead $cpsr = tMOVi8 1, 14, $noreg
441 $r4 = tMOVr $r3, 14, $noreg
442 renamable $lr = nuw nsw t2ADDrs killed renamable $r6, renamable $r12, 19, 14, $noreg, $noreg
443 $r6 = tMOVr $r1, 14, $noreg
444 $lr = t2DoLoopStart renamable $lr
447 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
448 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r12
450 renamable $vpr = MVE_VCTP32 renamable $r4, 0, $noreg, $noreg
451 MVE_VPST 4, implicit $vpr
452 renamable $r6, renamable $q0 = MVE_VLDRWU32_post killed renamable $r6, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv6264, align 4)
453 renamable $r5, renamable $q1 = MVE_VLDRWU32_post killed renamable $r5, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv6567, align 4)
454 renamable $r4, dead $cpsr = tSUBi8 killed renamable $r4, 4, 14, $noreg
455 renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
456 MVE_VPST 8, implicit $vpr
457 renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv6870, align 4)
458 renamable $lr = t2LoopDec killed renamable $lr, 1
459 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
462 bb.3.for.cond4.preheader:
463 successors: %bb.6(0x30000000), %bb.4(0x50000000)
464 liveins: $r0, $r1, $r2, $r3, $r12
469 successors: %bb.5(0x80000000)
470 liveins: $r0, $r1, $r2, $r3, $r12
472 renamable $r6, dead $cpsr = tMOVi8 1, 14, $noreg
473 renamable $lr = nuw nsw t2ADDrs killed renamable $r6, killed renamable $r12, 19, 14, $noreg, $noreg
474 $r12 = tMOVr $r0, 14, $noreg
475 $lr = t2DoLoopStart renamable $lr
478 successors: %bb.5(0x7c000000), %bb.6(0x04000000)
479 liveins: $lr, $r0, $r1, $r2, $r3, $r12
481 renamable $vpr = MVE_VCTP32 renamable $r3, 0, $noreg, $noreg
482 MVE_VPST 2, implicit $vpr
483 renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv55, align 4)
484 renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv5658, align 4)
485 renamable $r12, renamable $q2 = MVE_VLDRWU32_post killed renamable $r12, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv5961, align 4)
486 renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
487 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14, $noreg
488 renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
489 MVE_VPST 8, implicit $vpr
490 MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv5961, align 4)
491 renamable $lr = t2LoopDec killed renamable $lr, 1
492 $r0 = tMOVr $r12, 14, $noreg
493 t2LoopEnd renamable $lr, %bb.5, implicit-def dead $cpsr
496 bb.6.for.cond.cleanup6:
497 $r8, $sp = t2LDR_POST $sp, 4, 14, $noreg
498 tPOP_RET 14, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc
504 exposesReturnsTwice: false
506 regBankSelected: false
509 tracksRegLiveness: true
513 - { reg: '$r0', virtual-reg: '' }
514 - { reg: '$r1', virtual-reg: '' }
515 - { reg: '$r2', virtual-reg: '' }
516 - { reg: '$r3', virtual-reg: '' }
518 isFrameAddressTaken: false
519 isReturnAddressTaken: false
523 offsetAdjustment: -16
529 cvBytesOfCalleeSavedRegisters: 0
530 hasOpaqueSPAdjustment: false
532 hasMustTailInVarArgFunc: false
538 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
539 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
540 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
541 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
542 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
543 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
544 - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
545 stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true,
546 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
547 - { id: 3, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4,
548 stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true,
549 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
550 - { id: 4, name: '', type: spill-slot, offset: -20, size: 4, alignment: 4,
551 stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true,
552 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
553 - { id: 5, name: '', type: spill-slot, offset: -24, size: 4, alignment: 4,
554 stack-id: default, callee-saved-register: '$r8', callee-saved-restored: true,
555 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
558 machineFunctionInfo: {}
560 ; CHECK-LABEL: name: test2
562 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.1(0x50000000)
563 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8
565 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
566 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 20
567 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
568 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
569 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -12
570 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -16
571 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -20
572 ; CHECK-NEXT: dead $r7 = frame-setup tADDrSPi $sp, 3, 14 /* CC::al */, $noreg
573 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $r7, 8
574 ; CHECK-NEXT: early-clobber $sp = frame-setup t2STR_PRE killed $r8, $sp, -4, 14 /* CC::al */, $noreg
575 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -24
576 ; CHECK-NEXT: renamable $r6, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
577 ; CHECK-NEXT: t2CMPrs killed renamable $r6, renamable $r3, 11, 14 /* CC::al */, $noreg, implicit-def $cpsr
578 ; CHECK-NEXT: tBcc %bb.3, 0 /* CC::eq */, killed $cpsr
580 ; CHECK-NEXT: bb.1.vector.ph:
581 ; CHECK-NEXT: successors: %bb.2(0x80000000)
582 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
584 ; CHECK-NEXT: renamable $r4, dead $cpsr = tLSRri renamable $r3, 1, 14 /* CC::al */, $noreg
585 ; CHECK-NEXT: $r8 = tMOVr $r0, 14 /* CC::al */, $noreg
586 ; CHECK-NEXT: $r5 = tMOVr $r1, 14 /* CC::al */, $noreg
587 ; CHECK-NEXT: $r6 = tMOVr $r2, 14 /* CC::al */, $noreg
588 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r4
590 ; CHECK-NEXT: bb.2.vector.body:
591 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
592 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r5, $r6, $r8
594 ; CHECK-NEXT: renamable $r5, renamable $q0 = MVE_VLDRWU32_post killed renamable $r5, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv6264, align 4)
595 ; CHECK-NEXT: renamable $r6, renamable $q1 = MVE_VLDRWU32_post killed renamable $r6, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv6567, align 4)
596 ; CHECK-NEXT: renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
597 ; CHECK-NEXT: renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv6870, align 4)
598 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
600 ; CHECK-NEXT: bb.3.for.cond4.preheader:
601 ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.4(0x50000000)
602 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
604 ; CHECK-NEXT: tCBZ $r3, %bb.6
606 ; CHECK-NEXT: bb.4.vector.ph39:
607 ; CHECK-NEXT: successors: %bb.5(0x80000000)
608 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
610 ; CHECK-NEXT: $r4 = tMOVr $r0, 14 /* CC::al */, $noreg
611 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r3
613 ; CHECK-NEXT: bb.5.vector.body38:
614 ; CHECK-NEXT: successors: %bb.5(0x7c000000), %bb.6(0x04000000)
615 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r4
617 ; CHECK-NEXT: renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv55, align 4)
618 ; CHECK-NEXT: renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv5658, align 4)
619 ; CHECK-NEXT: renamable $r4, renamable $q2 = MVE_VLDRWU32_post killed renamable $r4, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv5961, align 4)
620 ; CHECK-NEXT: renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
621 ; CHECK-NEXT: renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
622 ; CHECK-NEXT: MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv5961, align 4)
623 ; CHECK-NEXT: $r0 = tMOVr $r4, 14 /* CC::al */, $noreg
624 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.5
626 ; CHECK-NEXT: bb.6.for.cond.cleanup6:
627 ; CHECK-NEXT: $r8, $sp = t2LDR_POST $sp, 4, 14 /* CC::al */, $noreg
628 ; CHECK-NEXT: tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc
630 successors: %bb.3(0x30000000), %bb.1(0x50000000)
631 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr, $r8
633 frame-setup tPUSH 14, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
634 frame-setup CFI_INSTRUCTION def_cfa_offset 20
635 frame-setup CFI_INSTRUCTION offset $lr, -4
636 frame-setup CFI_INSTRUCTION offset $r7, -8
637 frame-setup CFI_INSTRUCTION offset $r6, -12
638 frame-setup CFI_INSTRUCTION offset $r5, -16
639 frame-setup CFI_INSTRUCTION offset $r4, -20
640 $r7 = frame-setup tADDrSPi $sp, 3, 14, $noreg
641 frame-setup CFI_INSTRUCTION def_cfa $r7, 8
642 early-clobber $sp = frame-setup t2STR_PRE killed $r8, $sp, -4, 14, $noreg
643 frame-setup CFI_INSTRUCTION offset $r8, -24
644 renamable $r6, dead $cpsr = tMOVi8 0, 14, $noreg
645 renamable $r12 = t2MOVi 1, 14, $noreg, $noreg
646 t2CMPrs killed renamable $r6, renamable $r3, 11, 14, $noreg, implicit-def $cpsr
647 tBcc %bb.3, 0, killed $cpsr
650 successors: %bb.2(0x80000000)
651 liveins: $r0, $r1, $r2, $r3, $r12
653 renamable $r6, dead $cpsr = tMOVi8 3, 14, $noreg
654 renamable $r4, dead $cpsr = tLSRri renamable $r3, 1, 14, $noreg
655 renamable $r6 = nuw t2ADDrs killed renamable $r6, renamable $r3, 11, 14, $noreg, $noreg
656 $r8 = tMOVr $r0, 14, $noreg
657 renamable $r6 = t2BICri killed renamable $r6, 3, 14, $noreg, $noreg
658 $r5 = tMOVr $r1, 14, $noreg
659 renamable $r6, dead $cpsr = tSUBi8 killed renamable $r6, 4, 14, $noreg
660 renamable $lr = nuw nsw t2ADDrs renamable $r12, killed renamable $r6, 19, 14, $noreg, $noreg
661 $r6 = tMOVr $r2, 14, $noreg
662 $lr = t2DoLoopStart renamable $lr
665 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
666 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r12
668 renamable $vpr = MVE_VCTP32 renamable $r4, 0, $noreg, $noreg
669 MVE_VPST 4, implicit $vpr
670 renamable $r5, renamable $q0 = MVE_VLDRWU32_post killed renamable $r5, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv6264, align 4)
671 renamable $r6, renamable $q1 = MVE_VLDRWU32_post killed renamable $r6, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv6567, align 4)
672 renamable $r4, dead $cpsr = tSUBi8 killed renamable $r4, 4, 14, $noreg
673 renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
674 MVE_VPST 8, implicit $vpr
675 renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv6870, align 4)
676 renamable $lr = t2LoopDec killed renamable $lr, 1
677 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
680 bb.3.for.cond4.preheader:
681 successors: %bb.6(0x30000000), %bb.4(0x50000000)
682 liveins: $r0, $r1, $r2, $r3, $r12
687 successors: %bb.5(0x80000000)
688 liveins: $r0, $r1, $r2, $r3, $r12
690 renamable $r6, dead $cpsr = tADDi3 renamable $r3, 3, 14, $noreg
691 $r4 = tMOVr $r0, 14, $noreg
692 renamable $r6 = t2BICri killed renamable $r6, 3, 14, $noreg, $noreg
693 renamable $r6, dead $cpsr = tSUBi8 killed renamable $r6, 4, 14, $noreg
694 renamable $lr = nuw nsw t2ADDrs killed renamable $r12, killed renamable $r6, 19, 14, $noreg, $noreg
695 $lr = t2DoLoopStart renamable $lr
698 successors: %bb.5(0x7c000000), %bb.6(0x04000000)
699 liveins: $lr, $r0, $r1, $r2, $r3, $r4
701 renamable $vpr = MVE_VCTP32 renamable $r3, 0, $noreg, $noreg
702 MVE_VPST 2, implicit $vpr
703 renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv55, align 4)
704 renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv5658, align 4)
705 renamable $r4, renamable $q2 = MVE_VLDRWU32_post killed renamable $r4, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv5961, align 4)
706 renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
707 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14, $noreg
708 renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
709 MVE_VPST 8, implicit $vpr
710 MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv5961, align 4)
711 renamable $lr = t2LoopDec killed renamable $lr, 1
712 $r0 = tMOVr $r4, 14, $noreg
713 t2LoopEnd renamable $lr, %bb.5, implicit-def dead $cpsr
716 bb.6.for.cond.cleanup6:
717 $r8, $sp = t2LDR_POST $sp, 4, 14, $noreg
718 tPOP_RET 14, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc
724 exposesReturnsTwice: false
726 regBankSelected: false
729 tracksRegLiveness: true
733 - { reg: '$r0', virtual-reg: '' }
734 - { reg: '$r1', virtual-reg: '' }
735 - { reg: '$r2', virtual-reg: '' }
736 - { reg: '$r3', virtual-reg: '' }
738 isFrameAddressTaken: false
739 isReturnAddressTaken: false
743 offsetAdjustment: -24
749 cvBytesOfCalleeSavedRegisters: 0
750 hasOpaqueSPAdjustment: false
752 hasMustTailInVarArgFunc: false
758 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
759 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
760 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
761 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
762 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
763 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
764 - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
765 stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true,
766 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
767 - { id: 3, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4,
768 stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true,
769 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
770 - { id: 4, name: '', type: spill-slot, offset: -20, size: 4, alignment: 4,
771 stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true,
772 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
773 - { id: 5, name: '', type: spill-slot, offset: -24, size: 4, alignment: 4,
774 stack-id: default, callee-saved-register: '$r10', callee-saved-restored: true,
775 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
776 - { id: 6, name: '', type: spill-slot, offset: -28, size: 4, alignment: 4,
777 stack-id: default, callee-saved-register: '$r9', callee-saved-restored: true,
778 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
779 - { id: 7, name: '', type: spill-slot, offset: -32, size: 4, alignment: 4,
780 stack-id: default, callee-saved-register: '$r8', callee-saved-restored: true,
781 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
784 machineFunctionInfo: {}
786 ; CHECK-LABEL: name: test3
788 ; CHECK-NEXT: successors: %bb.9(0x30000000), %bb.1(0x50000000)
789 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10
791 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
792 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 20
793 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
794 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
795 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -12
796 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -16
797 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -20
798 ; CHECK-NEXT: dead $r7 = frame-setup tADDrSPi $sp, 3, 14 /* CC::al */, $noreg
799 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $r7, 8
800 ; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r8, killed $r9, killed $r10
801 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r10, -24
802 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r9, -28
803 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -32
804 ; CHECK-NEXT: tCMPi8 renamable $r3, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
805 ; CHECK-NEXT: tBcc %bb.9, 0 /* CC::eq */, killed $cpsr
807 ; CHECK-NEXT: bb.1.vector.ph:
808 ; CHECK-NEXT: successors: %bb.2(0x80000000)
809 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
811 ; CHECK-NEXT: $r8 = tMOVr $r0, 14 /* CC::al */, $noreg
812 ; CHECK-NEXT: $r5 = tMOVr $r2, 14 /* CC::al */, $noreg
813 ; CHECK-NEXT: $r4 = tMOVr $r3, 14 /* CC::al */, $noreg
814 ; CHECK-NEXT: $r6 = tMOVr $r1, 14 /* CC::al */, $noreg
815 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r4
817 ; CHECK-NEXT: bb.2.vector.body:
818 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
819 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r5, $r6, $r8
821 ; CHECK-NEXT: renamable $r6, renamable $q0 = MVE_VLDRWU32_post killed renamable $r6, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv117119, align 4)
822 ; CHECK-NEXT: renamable $r5, renamable $q1 = MVE_VLDRWU32_post killed renamable $r5, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv120122, align 4)
823 ; CHECK-NEXT: renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
824 ; CHECK-NEXT: renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv123125, align 4)
825 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
827 ; CHECK-NEXT: bb.3.for.cond4.preheader:
828 ; CHECK-NEXT: successors: %bb.6(0x30000000), %bb.4(0x50000000)
829 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
831 ; CHECK-NEXT: renamable $r6, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
832 ; CHECK-NEXT: t2CMPrs killed renamable $r6, renamable $r3, 11, 14 /* CC::al */, $noreg, implicit-def $cpsr
833 ; CHECK-NEXT: tBcc %bb.6, 0 /* CC::eq */, killed $cpsr
835 ; CHECK-NEXT: bb.4.vector.ph66:
836 ; CHECK-NEXT: successors: %bb.5(0x80000000)
837 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
839 ; CHECK-NEXT: renamable $r5, dead $cpsr = tLSRri renamable $r3, 1, 14 /* CC::al */, $noreg
840 ; CHECK-NEXT: $r10 = tMOVr $r0, 14 /* CC::al */, $noreg
841 ; CHECK-NEXT: $r9 = tMOVr $r2, 14 /* CC::al */, $noreg
842 ; CHECK-NEXT: $r4 = tMOVr $r1, 14 /* CC::al */, $noreg
843 ; CHECK-NEXT: $r6 = tMOVr $r0, 14 /* CC::al */, $noreg
844 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r5
846 ; CHECK-NEXT: bb.5.vector.body65:
847 ; CHECK-NEXT: successors: %bb.5(0x7c000000), %bb.6(0x04000000)
848 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r6, $r9, $r10
850 ; CHECK-NEXT: renamable $r4, renamable $q0 = MVE_VLDRWU32_post killed renamable $r4, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv108110, align 4)
851 ; CHECK-NEXT: renamable $r9, renamable $q1 = MVE_VLDRWU32_post killed renamable $r9, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv111113, align 4)
852 ; CHECK-NEXT: renamable $r6, renamable $q2 = MVE_VLDRWU32_post killed renamable $r6, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv114116, align 4)
853 ; CHECK-NEXT: renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
854 ; CHECK-NEXT: renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
855 ; CHECK-NEXT: MVE_VSTRWU32 killed renamable $q0, killed renamable $r10, 0, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv114116, align 4)
856 ; CHECK-NEXT: $r10 = tMOVr $r6, 14 /* CC::al */, $noreg
857 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.5
859 ; CHECK-NEXT: bb.6.for.cond15.preheader:
860 ; CHECK-NEXT: successors: %bb.9(0x30000000), %bb.7(0x50000000)
861 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
863 ; CHECK-NEXT: tCBZ $r3, %bb.9
865 ; CHECK-NEXT: bb.7.vector.ph85:
866 ; CHECK-NEXT: successors: %bb.8(0x80000000)
867 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3
869 ; CHECK-NEXT: $r5 = tMOVr $r0, 14 /* CC::al */, $noreg
870 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r3
872 ; CHECK-NEXT: bb.8.vector.body84:
873 ; CHECK-NEXT: successors: %bb.8(0x7c000000), %bb.9(0x04000000)
874 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r5
876 ; CHECK-NEXT: renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv101, align 4)
877 ; CHECK-NEXT: renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv102104, align 4)
878 ; CHECK-NEXT: renamable $r5, renamable $q2 = MVE_VLDRWU32_post killed renamable $r5, 16, 0, $noreg, $noreg :: (load (s128) from %ir.lsr.iv105107, align 4)
879 ; CHECK-NEXT: renamable $q0 = MVE_VADDi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
880 ; CHECK-NEXT: renamable $q0 = MVE_VSUBi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
881 ; CHECK-NEXT: MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 0, killed $noreg, $noreg :: (store (s128) into %ir.lsr.iv105107, align 4)
882 ; CHECK-NEXT: $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
883 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.8
885 ; CHECK-NEXT: bb.9.for.cond.cleanup17:
886 ; CHECK-NEXT: $sp = t2LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r8, def $r9, def $r10
887 ; CHECK-NEXT: tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc
889 successors: %bb.9(0x30000000), %bb.1(0x50000000)
890 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr, $r8, $r9, $r10
892 frame-setup tPUSH 14, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp
893 frame-setup CFI_INSTRUCTION def_cfa_offset 20
894 frame-setup CFI_INSTRUCTION offset $lr, -4
895 frame-setup CFI_INSTRUCTION offset $r7, -8
896 frame-setup CFI_INSTRUCTION offset $r6, -12
897 frame-setup CFI_INSTRUCTION offset $r5, -16
898 frame-setup CFI_INSTRUCTION offset $r4, -20
899 $r7 = frame-setup tADDrSPi $sp, 3, 14, $noreg
900 frame-setup CFI_INSTRUCTION def_cfa $r7, 8
901 $sp = frame-setup t2STMDB_UPD $sp, 14, $noreg, killed $r8, killed $r9, killed $r10
902 frame-setup CFI_INSTRUCTION offset $r10, -24
903 frame-setup CFI_INSTRUCTION offset $r9, -28
904 frame-setup CFI_INSTRUCTION offset $r8, -32
905 tCMPi8 renamable $r3, 0, 14, $noreg, implicit-def $cpsr
906 tBcc %bb.9, 0, killed $cpsr
909 successors: %bb.2(0x80000000)
910 liveins: $r0, $r1, $r2, $r3
912 renamable $r6, dead $cpsr = tADDi3 renamable $r3, 3, 14, $noreg
913 $r8 = tMOVr $r0, 14, $noreg
914 renamable $r6 = t2BICri killed renamable $r6, 3, 14, $noreg, $noreg
915 $r5 = tMOVr $r2, 14, $noreg
916 renamable $r12 = t2SUBri killed renamable $r6, 4, 14, $noreg, $noreg
917 renamable $r6, dead $cpsr = tMOVi8 1, 14, $noreg
918 $r4 = tMOVr $r3, 14, $noreg
919 renamable $lr = nuw nsw t2ADDrs killed renamable $r6, renamable $r12, 19, 14, $noreg, $noreg
920 $r6 = tMOVr $r1, 14, $noreg
921 $lr = t2DoLoopStart renamable $lr
924 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
925 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r12
927 renamable $vpr = MVE_VCTP32 renamable $r4, 0, $noreg, $noreg
928 MVE_VPST 4, implicit $vpr
929 renamable $r6, renamable $q0 = MVE_VLDRWU32_post killed renamable $r6, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv117119, align 4)
930 renamable $r5, renamable $q1 = MVE_VLDRWU32_post killed renamable $r5, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv120122, align 4)
931 renamable $r4, dead $cpsr = tSUBi8 killed renamable $r4, 4, 14, $noreg
932 renamable $q0 = nsw MVE_VMULi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
933 MVE_VPST 8, implicit $vpr
934 renamable $r8 = MVE_VSTRWU32_post killed renamable $q0, killed renamable $r8, 16, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv123125, align 4)
935 renamable $lr = t2LoopDec killed renamable $lr, 1
936 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
939 bb.3.for.cond4.preheader:
940 successors: %bb.6(0x30000000), %bb.4(0x50000000)
941 liveins: $r0, $r1, $r2, $r3, $r12
943 renamable $r6, dead $cpsr = tMOVi8 0, 14, $noreg
944 renamable $r8 = t2MOVi 1, 14, $noreg, $noreg
945 t2CMPrs killed renamable $r6, renamable $r3, 11, 14, $noreg, implicit-def $cpsr
946 tBcc %bb.6, 0, killed $cpsr
949 successors: %bb.5(0x80000000)
950 liveins: $r0, $r1, $r2, $r3, $r8, $r12
952 renamable $r6, dead $cpsr = tMOVi8 3, 14, $noreg
953 renamable $r5, dead $cpsr = tLSRri renamable $r3, 1, 14, $noreg
954 renamable $r6 = nuw t2ADDrs killed renamable $r6, renamable $r3, 11, 14, $noreg, $noreg
955 $r10 = tMOVr $r0, 14, $noreg
956 renamable $r6 = t2BICri killed renamable $r6, 3, 14, $noreg, $noreg
957 $r9 = tMOVr $r2, 14, $noreg
958 renamable $r6, dead $cpsr = tSUBi8 killed renamable $r6, 4, 14, $noreg
959 $r4 = tMOVr $r1, 14, $noreg
960 renamable $lr = nuw nsw t2ADDrs renamable $r8, killed renamable $r6, 19, 14, $noreg, $noreg
961 $r6 = tMOVr $r0, 14, $noreg
962 $lr = t2DoLoopStart renamable $lr
965 successors: %bb.5(0x7c000000), %bb.6(0x04000000)
966 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12
968 renamable $vpr = MVE_VCTP32 renamable $r5, 0, $noreg, $noreg
969 MVE_VPST 2, implicit $vpr
970 renamable $r4, renamable $q0 = MVE_VLDRWU32_post killed renamable $r4, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv108110, align 4)
971 renamable $r9, renamable $q1 = MVE_VLDRWU32_post killed renamable $r9, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv111113, align 4)
972 renamable $r6, renamable $q2 = MVE_VLDRWU32_post killed renamable $r6, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv114116, align 4)
973 renamable $q0 = MVE_VEOR killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
974 renamable $r5, dead $cpsr = tSUBi8 killed renamable $r5, 4, 14, $noreg
975 renamable $q0 = nsw MVE_VADDi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
976 MVE_VPST 8, implicit $vpr
977 MVE_VSTRWU32 killed renamable $q0, killed renamable $r10, 0, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv114116, align 4)
978 renamable $lr = t2LoopDec killed renamable $lr, 1
979 $r10 = tMOVr $r6, 14, $noreg
980 t2LoopEnd renamable $lr, %bb.5, implicit-def dead $cpsr
983 bb.6.for.cond15.preheader:
984 successors: %bb.9(0x30000000), %bb.7(0x50000000)
985 liveins: $r0, $r1, $r2, $r3, $r8, $r12
990 successors: %bb.8(0x80000000)
991 liveins: $r0, $r1, $r2, $r3, $r8, $r12
993 renamable $lr = nuw nsw t2ADDrs killed renamable $r8, killed renamable $r12, 19, 14, $noreg, $noreg
994 $r5 = tMOVr $r0, 14, $noreg
995 $lr = t2DoLoopStart renamable $lr
998 successors: %bb.8(0x7c000000), %bb.9(0x04000000)
999 liveins: $lr, $r0, $r1, $r2, $r3, $r5
1001 renamable $vpr = MVE_VCTP32 renamable $r3, 0, $noreg, $noreg
1002 MVE_VPST 2, implicit $vpr
1003 renamable $r1, renamable $q0 = MVE_VLDRWU32_post killed renamable $r1, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv101, align 4)
1004 renamable $r2, renamable $q1 = MVE_VLDRWU32_post killed renamable $r2, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv102104, align 4)
1005 renamable $r5, renamable $q2 = MVE_VLDRWU32_post killed renamable $r5, 16, 1, renamable $vpr, $noreg :: (load (s128) from %ir.lsr.iv105107, align 4)
1006 renamable $q0 = MVE_VADDi32 killed renamable $q1, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
1007 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14, $noreg
1008 renamable $q0 = MVE_VSUBi32 killed renamable $q2, killed renamable $q0, 0, $noreg, $noreg, undef renamable $q0
1009 MVE_VPST 8, implicit $vpr
1010 MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 1, killed renamable $vpr, $noreg :: (store (s128) into %ir.lsr.iv105107, align 4)
1011 renamable $lr = t2LoopDec killed renamable $lr, 1
1012 $r0 = tMOVr $r5, 14, $noreg
1013 t2LoopEnd renamable $lr, %bb.8, implicit-def dead $cpsr
1014 tB %bb.9, 14, $noreg
1016 bb.9.for.cond.cleanup17:
1017 $sp = t2LDMIA_UPD $sp, 14, $noreg, def $r8, def $r9, def $r10
1018 tPOP_RET 14, $noreg, def $r4, def $r5, def $r6, def $r7, def $pc