1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=thumbv8.1m.main -run-pass=arm-low-overhead-loops %s -o - -verify-machineinstrs | FileCheck %s
4 %struct.arm_biquad_casd_df1_inst_q31 = type { ptr, ptr, i32, i32 }
6 define hidden void @arm_biquad_cascade_df1_q31(ptr nocapture readonly %arg, ptr nocapture readonly %arg1, ptr nocapture %arg2, i32 %arg3) #0 {
8 %i = bitcast ptr %arg to ptr
9 %i4 = load ptr, ptr %i, align 4
10 %i5 = getelementptr inbounds %struct.arm_biquad_casd_df1_inst_q31, ptr %arg, i32 0, i32 1
11 %i6 = load ptr, ptr %i5, align 4
12 %i7 = getelementptr inbounds %struct.arm_biquad_casd_df1_inst_q31, ptr %arg, i32 0, i32 2
13 %i8 = load i32, ptr %i7, align 4
15 %i10 = getelementptr inbounds %struct.arm_biquad_casd_df1_inst_q31, ptr %arg, i32 0, i32 3
16 %i11 = load i32, ptr %i10, align 4
19 bb12: ; preds = %bb74, %bb
20 %i13 = phi ptr [ %i6, %bb ], [ %i18, %bb74 ]
21 %i14 = phi ptr [ %i4, %bb ], [ %i85, %bb74 ]
22 %i15 = phi ptr [ %arg1, %bb ], [ %arg2, %bb74 ]
23 %i16 = phi i32 [ %i11, %bb ], [ %i89, %bb74 ]
24 %i18 = getelementptr inbounds i32, ptr %i13, i32 5
25 %i19 = load i32, ptr %i14, align 4
26 %i20 = getelementptr inbounds i32, ptr %i14, i32 1
27 %i21 = load i32, ptr %i20, align 4
28 %i22 = getelementptr inbounds i32, ptr %i14, i32 2
29 %i23 = load i32, ptr %i22, align 4
30 %i24 = getelementptr inbounds i32, ptr %i14, i32 3
31 %i25 = load i32, ptr %i24, align 4
32 %i26 = call { i32, i1 } @llvm.test.start.loop.iterations.i32(i32 %arg3)
33 %i26.0 = extractvalue { i32, i1 } %i26, 0
34 %i26.1 = extractvalue { i32, i1 } %i26, 1
35 br i1 %i26.1, label %bb27, label %bb74
38 %i28 = getelementptr inbounds i32, ptr %i13, i32 4
39 %i29 = load i32, ptr %i28, align 4
40 %i30 = getelementptr inbounds i32, ptr %i13, i32 3
41 %i31 = load i32, ptr %i30, align 4
42 %i32 = getelementptr inbounds i32, ptr %i13, i32 2
43 %i33 = load i32, ptr %i32, align 4
44 %i34 = getelementptr inbounds i32, ptr %i13, i32 1
45 %i35 = load i32, ptr %i34, align 4
46 %i36 = load i32, ptr %i13, align 4
49 bb37: ; preds = %bb37, %bb27
50 %lsr.iv = phi i32 [ %i70, %bb37 ], [ %i26.0, %bb27 ]
51 %i38 = phi ptr [ %i15, %bb27 ], [ %i51, %bb37 ]
52 %i39 = phi ptr [ %arg2, %bb27 ], [ %i69, %bb37 ]
53 %i40 = phi i32 [ %i25, %bb27 ], [ %i41, %bb37 ]
54 %i41 = phi i32 [ %i23, %bb27 ], [ %i68, %bb37 ]
55 %i42 = phi i32 [ %i21, %bb27 ], [ %i43, %bb37 ]
56 %i43 = phi i32 [ %i19, %bb27 ], [ %i52, %bb37 ]
57 %i45 = sext i32 %i29 to i64
58 %i46 = sext i32 %i31 to i64
59 %i47 = sext i32 %i33 to i64
60 %i48 = sext i32 %i35 to i64
61 %i49 = sext i32 %i36 to i64
62 %i50 = zext i32 %i9 to i64
63 %i51 = getelementptr inbounds i32, ptr %i38, i32 1
64 %i52 = load i32, ptr %i38, align 4
65 %i53 = sext i32 %i52 to i64
66 %i54 = mul nsw i64 %i53, %i49
67 %i55 = sext i32 %i43 to i64
68 %i56 = mul nsw i64 %i55, %i48
69 %i57 = sext i32 %i42 to i64
70 %i58 = mul nsw i64 %i57, %i47
71 %i59 = sext i32 %i41 to i64
72 %i60 = mul nsw i64 %i59, %i46
73 %i61 = sext i32 %i40 to i64
74 %i62 = mul nsw i64 %i61, %i45
75 %i63 = add i64 %i58, %i56
76 %i64 = add i64 %i63, %i60
77 %i65 = add i64 %i64, %i62
78 %i66 = add i64 %i65, %i54
79 %i67 = ashr i64 %i66, %i50
80 %i68 = trunc i64 %i67 to i32
81 %i69 = getelementptr inbounds i32, ptr %i39, i32 1
82 store i32 %i68, ptr %i39, align 4
83 %i70 = call i32 @llvm.loop.decrement.reg.i32(i32 %lsr.iv, i32 1)
84 %i71 = icmp ne i32 %i70, 0
85 br i1 %i71, label %bb37, label %bb72
88 %i73 = trunc i64 %i67 to i32
91 bb74: ; preds = %bb72, %bb12
92 %i75 = phi i32 [ %i19, %bb12 ], [ %i52, %bb72 ]
93 %i76 = phi i32 [ %i21, %bb12 ], [ %i43, %bb72 ]
94 %i77 = phi i32 [ %i23, %bb12 ], [ %i73, %bb72 ]
95 %i78 = phi i32 [ %i25, %bb12 ], [ %i41, %bb72 ]
96 store i32 %i75, ptr %i14, align 4
97 %i79 = bitcast ptr %i14 to ptr
98 %i80 = getelementptr inbounds i8, ptr %i79, i32 4
99 %i81 = bitcast ptr %i80 to ptr
100 store i32 %i76, ptr %i81, align 4
101 %i82 = bitcast ptr %i14 to ptr
102 %i83 = getelementptr inbounds i8, ptr %i82, i32 8
103 %i84 = bitcast ptr %i83 to ptr
104 store i32 %i77, ptr %i84, align 4
105 %i85 = getelementptr inbounds i32, ptr %i14, i32 4
106 %i86 = bitcast ptr %i14 to ptr
107 %i87 = getelementptr inbounds i8, ptr %i86, i32 12
108 %i88 = bitcast ptr %i87 to ptr
109 store i32 %i78, ptr %i88, align 4
110 %i89 = add i32 %i16, -1
111 %i90 = icmp eq i32 %i89, 0
112 br i1 %i90, label %bb91, label %bb12
114 bb91: ; preds = %bb74
118 declare { i32, i1 } @llvm.test.start.loop.iterations.i32(i32) #1
119 declare i32 @llvm.loop.decrement.reg.i32(i32, i32) #1
121 attributes #0 = { optsize "target-cpu"="cortex-m55" }
122 attributes #1 = { noduplicate nounwind "target-cpu"="cortex-m55" }
126 name: arm_biquad_cascade_df1_q31
128 tracksRegLiveness: true
131 - { reg: '$r0', virtual-reg: '' }
132 - { reg: '$r1', virtual-reg: '' }
133 - { reg: '$r2', virtual-reg: '' }
134 - { reg: '$r3', virtual-reg: '' }
143 - { id: 0, name: '', type: spill-slot, offset: -40, size: 4, alignment: 4,
144 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
145 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
146 - { id: 1, name: '', type: spill-slot, offset: -44, size: 4, alignment: 4,
147 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
148 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
149 - { id: 2, name: '', type: spill-slot, offset: -48, size: 4, alignment: 4,
150 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
151 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
152 - { id: 3, name: '', type: spill-slot, offset: -52, size: 4, alignment: 4,
153 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
154 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
155 - { id: 4, name: '', type: spill-slot, offset: -56, size: 4, alignment: 4,
156 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
157 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
158 - { id: 5, name: '', type: spill-slot, offset: -60, size: 4, alignment: 4,
159 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
160 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
161 - { id: 6, name: '', type: spill-slot, offset: -64, size: 4, alignment: 4,
162 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
163 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
164 - { id: 7, name: '', type: spill-slot, offset: -68, size: 4, alignment: 4,
165 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
166 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
167 - { id: 8, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
168 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
169 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
170 - { id: 9, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
171 stack-id: default, callee-saved-register: '$r11', callee-saved-restored: true,
172 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
173 - { id: 10, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
174 stack-id: default, callee-saved-register: '$r10', callee-saved-restored: true,
175 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
176 - { id: 11, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4,
177 stack-id: default, callee-saved-register: '$r9', callee-saved-restored: true,
178 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
179 - { id: 12, name: '', type: spill-slot, offset: -20, size: 4, alignment: 4,
180 stack-id: default, callee-saved-register: '$r8', callee-saved-restored: true,
181 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
182 - { id: 13, name: '', type: spill-slot, offset: -24, size: 4, alignment: 4,
183 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
184 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
185 - { id: 14, name: '', type: spill-slot, offset: -28, size: 4, alignment: 4,
186 stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true,
187 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
188 - { id: 15, name: '', type: spill-slot, offset: -32, size: 4, alignment: 4,
189 stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true,
190 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
191 - { id: 16, name: '', type: spill-slot, offset: -36, size: 4, alignment: 4,
192 stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true,
193 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
196 machineFunctionInfo: {}
198 ; CHECK-LABEL: name: arm_biquad_cascade_df1_q31
200 ; CHECK-NEXT: successors: %bb.1(0x80000000)
201 ; CHECK-NEXT: liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $lr
203 ; CHECK-NEXT: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
204 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 36
205 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
206 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r11, -8
207 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r10, -12
208 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r9, -16
209 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r8, -20
210 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -24
211 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r6, -28
212 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r5, -32
213 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r4, -36
214 ; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 8, 14 /* CC::al */, $noreg
215 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 68
216 ; CHECK-NEXT: $r6, $r4 = t2LDRDi8 $r0, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i7), (load (s32) from %ir.i10)
217 ; CHECK-NEXT: $r7, $r5 = t2LDRDi8 killed $r0, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i), (load (s32) from %ir.i5)
218 ; CHECK-NEXT: renamable $r0 = t2RSBri killed renamable $r6, 31, 14 /* CC::al */, $noreg, $noreg
219 ; CHECK-NEXT: t2STMIA $sp, 14 /* CC::al */, $noreg, killed $r0, $r2, $r3 :: (store (s32) into %stack.7), (store (s32) into %stack.6), (store (s32) into %stack.5)
220 ; CHECK-NEXT: $r12 = tMOVr killed $r2, 14 /* CC::al */, $noreg
221 ; CHECK-NEXT: renamable $r2 = tLDRspi $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.7)
223 ; CHECK-NEXT: bb.1.bb12 (align 4):
224 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.5(0x40000000)
225 ; CHECK-NEXT: liveins: $r1, $r2, $r3, $r4, $r5, $r7, $r12
227 ; CHECK-NEXT: $r10, $r0 = t2LDRDi8 $r7, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i14), (load (s32) from %ir.i20)
228 ; CHECK-NEXT: $r6, $r8 = t2LDRDi8 $r7, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i22), (load (s32) from %ir.i24)
229 ; CHECK-NEXT: $lr = t2WLS renamable $r3, %bb.5
231 ; CHECK-NEXT: bb.2.bb27:
232 ; CHECK-NEXT: successors: %bb.3(0x80000000)
233 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r4, $r5, $r6, $r7, $r8, $r10, $r12
235 ; CHECK-NEXT: renamable $r3 = tLDRi renamable $r5, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i13)
236 ; CHECK-NEXT: t2STRDi8 killed $r7, killed $r4, $sp, 12, 14 /* CC::al */, $noreg :: (store (s32) into %stack.4), (store (s32) into %stack.3)
237 ; CHECK-NEXT: tSTRspi killed renamable $r3, $sp, 7, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
238 ; CHECK-NEXT: renamable $r3 = tLDRi renamable $r5, 1, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i34)
239 ; CHECK-NEXT: renamable $r4 = tLDRi renamable $r5, 4, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i28)
240 ; CHECK-NEXT: tSTRspi killed renamable $r3, $sp, 6, 14 /* CC::al */, $noreg :: (store (s32) into %stack.1)
241 ; CHECK-NEXT: $r9, $r3 = t2LDRDi8 $r5, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i32), (load (s32) from %ir.i30)
242 ; CHECK-NEXT: tSTRspi killed renamable $r5, $sp, 5, 14 /* CC::al */, $noreg :: (store (s32) into %stack.2)
244 ; CHECK-NEXT: bb.3.bb37 (align 4):
245 ; CHECK-NEXT: successors: %bb.3(0x7c000000), %bb.4(0x04000000)
246 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r6, $r8, $r9, $r10, $r12
248 ; CHECK-NEXT: $r7 = tMOVr killed $r6, 14 /* CC::al */, $noreg
249 ; CHECK-NEXT: renamable $r6 = tLDRspi $sp, 6, 14 /* CC::al */, $noreg :: (load (s32) from %stack.1)
250 ; CHECK-NEXT: $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
251 ; CHECK-NEXT: renamable $r6, renamable $r11 = t2SMULL killed $r10, killed renamable $r6, 14 /* CC::al */, $noreg
252 ; CHECK-NEXT: renamable $r6, renamable $r11 = t2SMLAL killed renamable $r0, renamable $r9, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
253 ; CHECK-NEXT: renamable $r10, renamable $r1 = t2LDR_POST killed renamable $r1, 4, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i38)
254 ; CHECK-NEXT: renamable $r6, renamable $r11 = t2SMLAL renamable $r7, renamable $r3, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
255 ; CHECK-NEXT: renamable $r0 = tLDRspi $sp, 7, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
256 ; CHECK-NEXT: renamable $r6, renamable $r11 = t2SMLAL killed renamable $r8, renamable $r4, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
257 ; CHECK-NEXT: renamable $r6, renamable $r11 = t2SMLAL renamable $r10, killed renamable $r0, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
258 ; CHECK-NEXT: early-clobber renamable $r6, dead early-clobber renamable $r11 = MVE_ASRLr killed renamable $r6, killed renamable $r11, renamable $r2, 14 /* CC::al */, $noreg
259 ; CHECK-NEXT: early-clobber renamable $r12 = t2STR_POST renamable $r6, killed renamable $r12, 4, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i39)
260 ; CHECK-NEXT: $r8 = tMOVr $r7, 14 /* CC::al */, $noreg
261 ; CHECK-NEXT: $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
262 ; CHECK-NEXT: $lr = t2LEUpdate killed renamable $lr, %bb.3
264 ; CHECK-NEXT: bb.4.bb72:
265 ; CHECK-NEXT: successors: %bb.5(0x80000000)
266 ; CHECK-NEXT: liveins: $r2, $r5, $r6, $r7, $r10
268 ; CHECK-NEXT: $r0 = tMOVr killed $r5, 14 /* CC::al */, $noreg
269 ; CHECK-NEXT: $r8 = tMOVr killed $r7, 14 /* CC::al */, $noreg
270 ; CHECK-NEXT: $r12, $r3 = t2LDRDi8 $sp, 4, 14 /* CC::al */, $noreg :: (load (s32) from %stack.6), (load (s32) from %stack.5)
271 ; CHECK-NEXT: renamable $r5 = tLDRspi $sp, 5, 14 /* CC::al */, $noreg :: (load (s32) from %stack.2)
272 ; CHECK-NEXT: $r7, $r4 = t2LDRDi8 $sp, 12, 14 /* CC::al */, $noreg :: (load (s32) from %stack.4), (load (s32) from %stack.3)
274 ; CHECK-NEXT: bb.5.bb74:
275 ; CHECK-NEXT: successors: %bb.6(0x04000000), %bb.1(0x7c000000)
276 ; CHECK-NEXT: liveins: $r0, $r3, $r4, $r5, $r6, $r7, $r8, $r10, $r12, $r2
278 ; CHECK-NEXT: renamable $r5, dead $cpsr = nuw tADDi8 killed renamable $r5, 20, 14 /* CC::al */, $noreg
279 ; CHECK-NEXT: t2STRDi8 killed $r10, killed $r0, $r7, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i14), (store (s32) into %ir.i81)
280 ; CHECK-NEXT: t2STRDi8 killed $r6, killed $r8, $r7, 8, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i84), (store (s32) into %ir.i88)
281 ; CHECK-NEXT: renamable $r7, dead $cpsr = nuw tADDi8 killed renamable $r7, 16, 14 /* CC::al */, $noreg
282 ; CHECK-NEXT: renamable $r4, $cpsr = tSUBi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
283 ; CHECK-NEXT: $r1 = tMOVr $r12, 14 /* CC::al */, $noreg
284 ; CHECK-NEXT: tBcc %bb.1, 1 /* CC::ne */, killed $cpsr
286 ; CHECK-NEXT: bb.6.bb91:
287 ; CHECK-NEXT: $sp = frame-destroy tADDspi $sp, 8, 14 /* CC::al */, $noreg
288 ; CHECK-NEXT: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc
290 successors: %bb.1(0x80000000)
291 liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $lr
293 $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $r11, killed $lr
294 frame-setup CFI_INSTRUCTION def_cfa_offset 36
295 frame-setup CFI_INSTRUCTION offset $lr, -4
296 frame-setup CFI_INSTRUCTION offset $r11, -8
297 frame-setup CFI_INSTRUCTION offset $r10, -12
298 frame-setup CFI_INSTRUCTION offset $r9, -16
299 frame-setup CFI_INSTRUCTION offset $r8, -20
300 frame-setup CFI_INSTRUCTION offset $r7, -24
301 frame-setup CFI_INSTRUCTION offset $r6, -28
302 frame-setup CFI_INSTRUCTION offset $r5, -32
303 frame-setup CFI_INSTRUCTION offset $r4, -36
304 $sp = frame-setup tSUBspi $sp, 8, 14 /* CC::al */, $noreg
305 frame-setup CFI_INSTRUCTION def_cfa_offset 68
306 $r6, $r4 = t2LDRDi8 $r0, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i7), (load (s32) from %ir.i10)
307 $r7, $r5 = t2LDRDi8 killed $r0, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i), (load (s32) from %ir.i5)
308 renamable $r0 = t2RSBri killed renamable $r6, 31, 14 /* CC::al */, $noreg, $noreg
309 t2STMIA $sp, 14 /* CC::al */, $noreg, killed $r0, $r2, $r3 :: (store (s32) into %stack.7), (store (s32) into %stack.6), (store (s32) into %stack.5)
310 $r12 = tMOVr killed $r2, 14 /* CC::al */, $noreg
311 renamable $r2 = tLDRspi $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.7)
314 successors: %bb.2(0x40000000), %bb.5(0x40000000)
315 liveins: $r1, $r3, $r4, $r5, $r7, $r12, $r2
317 $r10, $r0 = t2LDRDi8 $r7, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i14), (load (s32) from %ir.i20)
318 $r6, $r8 = t2LDRDi8 $r7, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i22), (load (s32) from %ir.i24)
319 renamable $lr = t2WhileLoopStartLR renamable $r3, %bb.5, implicit-def dead $cpsr
320 tB %bb.2, 14 /* CC::al */, $noreg
323 successors: %bb.3(0x80000000)
324 liveins: $lr, $r0, $r1, $r4, $r5, $r6, $r7, $r8, $r10, $r12, $r2
326 renamable $r3 = tLDRi renamable $r5, 0, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i13)
327 t2STRDi8 killed $r7, killed $r4, $sp, 12, 14 /* CC::al */, $noreg :: (store (s32) into %stack.4), (store (s32) into %stack.3)
328 tSTRspi killed renamable $r3, $sp, 7, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
329 renamable $r3 = tLDRi renamable $r5, 1, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i34)
330 renamable $r4 = tLDRi renamable $r5, 4, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i28)
331 tSTRspi killed renamable $r3, $sp, 6, 14 /* CC::al */, $noreg :: (store (s32) into %stack.1)
332 $r9, $r3 = t2LDRDi8 $r5, 8, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i32), (load (s32) from %ir.i30)
333 tSTRspi killed renamable $r5, $sp, 5, 14 /* CC::al */, $noreg :: (store (s32) into %stack.2)
336 successors: %bb.3(0x7c000000), %bb.4(0x04000000)
337 liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r6, $r8, $r9, $r10, $r12
339 $r7 = tMOVr killed $r6, 14 /* CC::al */, $noreg
340 renamable $r6 = tLDRspi $sp, 6, 14 /* CC::al */, $noreg :: (load (s32) from %stack.1)
341 $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
342 renamable $r6, renamable $r11 = t2SMULL killed $r10, killed renamable $r6, 14 /* CC::al */, $noreg
343 renamable $r6, renamable $r11 = t2SMLAL killed renamable $r0, renamable $r9, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
344 renamable $r10, renamable $r1 = t2LDR_POST killed renamable $r1, 4, 14 /* CC::al */, $noreg :: (load (s32) from %ir.i38)
345 renamable $r6, renamable $r11 = t2SMLAL renamable $r7, renamable $r3, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
346 renamable $r0 = tLDRspi $sp, 7, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
347 renamable $r6, renamable $r11 = t2SMLAL killed renamable $r8, renamable $r4, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
348 renamable $r6, renamable $r11 = t2SMLAL renamable $r10, killed renamable $r0, killed renamable $r6, killed renamable $r11, 14 /* CC::al */, $noreg
349 early-clobber renamable $r6, dead early-clobber renamable $r11 = MVE_ASRLr killed renamable $r6, killed renamable $r11, renamable $r2, 14 /* CC::al */, $noreg
350 early-clobber renamable $r12 = t2STR_POST renamable $r6, killed renamable $r12, 4, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i39)
351 $r8 = tMOVr $r7, 14 /* CC::al */, $noreg
352 $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
353 renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
354 tB %bb.4, 14 /* CC::al */, $noreg
357 successors: %bb.5(0x80000000)
358 liveins: $r5, $r6, $r7, $r10, $r2
360 $r0 = tMOVr killed $r5, 14 /* CC::al */, $noreg
361 $r8 = tMOVr killed $r7, 14 /* CC::al */, $noreg
362 $r12, $r3 = t2LDRDi8 $sp, 4, 14 /* CC::al */, $noreg :: (load (s32) from %stack.6), (load (s32) from %stack.5)
363 renamable $r5 = tLDRspi $sp, 5, 14 /* CC::al */, $noreg :: (load (s32) from %stack.2)
364 $r7, $r4 = t2LDRDi8 $sp, 12, 14 /* CC::al */, $noreg :: (load (s32) from %stack.4), (load (s32) from %stack.3)
367 successors: %bb.6(0x04000000), %bb.1(0x7c000000)
368 liveins: $r0, $r3, $r4, $r5, $r6, $r7, $r8, $r10, $r12, $r2
370 renamable $r5, dead $cpsr = nuw tADDi8 killed renamable $r5, 20, 14 /* CC::al */, $noreg
371 t2STRDi8 killed $r10, killed $r0, $r7, 0, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i14), (store (s32) into %ir.i81)
372 t2STRDi8 killed $r6, killed $r8, $r7, 8, 14 /* CC::al */, $noreg :: (store (s32) into %ir.i84), (store (s32) into %ir.i88)
373 renamable $r7, dead $cpsr = nuw tADDi8 killed renamable $r7, 16, 14 /* CC::al */, $noreg
374 renamable $r4, $cpsr = tSUBi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
375 $r1 = tMOVr $r12, 14 /* CC::al */, $noreg
376 tBcc %bb.1, 1 /* CC::ne */, killed $cpsr
379 $sp = frame-destroy tADDspi $sp, 8, 14 /* CC::al */, $noreg
380 $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $r11, def $pc