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 - | FileCheck %s
5 @_ZL3arr = internal global [10 x i32] [i32 1, i32 2, i32 3, i32 5, i32 5, i32 5, i32 -2, i32 0, i32 -8, i32 -1], align 4
6 @.str = private unnamed_addr constant [5 x i8] c"%d, \00", align 1
8 define arm_aapcs_vfpcc void @vpt_block(ptr nocapture %A, i32 %n, i32 %x) {
10 %cmp9 = icmp sgt i32 %n, 0
13 %2 = shl nuw i32 %1, 2
16 %5 = add nuw nsw i32 %4, 1
17 br i1 %cmp9, label %vector.ph, label %for.cond.cleanup
19 vector.ph: ; preds = %entry
20 %sub = sub nsw i32 0, %x
21 %start = call i32 @llvm.start.loop.iterations.i32(i32 %5)
24 vector.body: ; preds = %vector.body, %vector.ph
25 %lsr.iv1 = phi ptr [ %scevgep, %vector.body ], [ %A, %vector.ph ]
26 %6 = phi i32 [ %start, %vector.ph ], [ %18, %vector.body ]
27 %7 = phi i32 [ %n, %vector.ph ], [ %9, %vector.body ]
28 %8 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %7)
30 %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv1, i32 4, <4 x i1> %8, <4 x i32> undef)
31 %10 = insertelement <4 x i32> undef, i32 %x, i32 0
32 %11 = shufflevector <4 x i32> %10, <4 x i32> undef, <4 x i32> zeroinitializer
33 %12 = icmp slt <4 x i32> %wide.masked.load, %11
34 %13 = insertelement <4 x i32> undef, i32 %sub, i32 0
35 %14 = shufflevector <4 x i32> %13, <4 x i32> undef, <4 x i32> zeroinitializer
36 %15 = icmp sgt <4 x i32> %wide.masked.load, %14
37 %16 = and <4 x i1> %12, %15
38 %17 = and <4 x i1> %16, %8
39 call void @llvm.masked.store.v4i32.p0(<4 x i32> zeroinitializer, ptr %lsr.iv1, i32 4, <4 x i1> %17)
40 %scevgep = getelementptr i32, ptr %lsr.iv1, i32 4
41 %18 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %6, i32 1)
42 %19 = icmp ne i32 %18, 0
43 br i1 %19, label %vector.body, label %for.cond.cleanup
45 for.cond.cleanup: ; preds = %vector.body, %entry
49 define arm_aapcs_vfpcc void @different_vcpt_reaching_def(ptr nocapture %A, i32 %n, i32 %x) {
50 ; Intentionally left blank - see MIR sequence below.
61 define arm_aapcs_vfpcc void @different_vcpt_operand(ptr nocapture %A, i32 %n, i32 %x) {
62 ; Intentionally left blank - see MIR sequence below.
73 define arm_aapcs_vfpcc void @else_vcpt(ptr nocapture %data, i32 %N, i32 %T) {
75 %cmp9 = icmp sgt i32 %N, 0
78 %2 = shl nuw i32 %1, 2
81 %5 = add nuw nsw i32 %4, 1
82 br i1 %cmp9, label %vector.ph, label %for.cond.cleanup
84 vector.ph: ; preds = %entry
85 %sub = sub nsw i32 0, %T
86 %start = call i32 @llvm.start.loop.iterations.i32(i32 %5)
89 vector.body: ; preds = %vector.body, %vector.ph
90 %lsr.iv1 = phi ptr [ %scevgep, %vector.body ], [ %data, %vector.ph ]
91 %6 = phi i32 [ %start, %vector.ph ], [ %18, %vector.body ]
92 %7 = phi i32 [ %N, %vector.ph ], [ %9, %vector.body ]
93 %8 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %7)
95 %wide.masked.load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %lsr.iv1, i32 4, <4 x i1> %8, <4 x i32> undef)
96 %10 = insertelement <4 x i32> undef, i32 %T, i32 0
97 %11 = shufflevector <4 x i32> %10, <4 x i32> undef, <4 x i32> zeroinitializer
98 %12 = icmp slt <4 x i32> %wide.masked.load, %11
99 %13 = insertelement <4 x i32> undef, i32 %sub, i32 0
100 %14 = shufflevector <4 x i32> %13, <4 x i32> undef, <4 x i32> zeroinitializer
101 %15 = icmp sgt <4 x i32> %wide.masked.load, %14
102 %16 = or <4 x i1> %12, %15
103 %17 = and <4 x i1> %16, %8
104 call void @llvm.masked.store.v4i32.p0(<4 x i32> zeroinitializer, ptr %lsr.iv1, i32 4, <4 x i1> %17)
105 %scevgep = getelementptr i32, ptr %lsr.iv1, i32 4
106 %18 = call i32 @llvm.loop.decrement.reg.i32.i32.i32(i32 %6, i32 1)
107 %19 = icmp ne i32 %18, 0
108 br i1 %19, label %vector.body, label %for.cond.cleanup
110 for.cond.cleanup: ; preds = %vector.body, %entry
114 define arm_aapcs_vfpcc void @loop_invariant_vpt_operands(ptr nocapture %A, i32 %n, i32 %x) {
115 ; Intentionally left blank - see MIR sequence below.
126 define arm_aapcs_vfpcc void @vctp_before_vpt(ptr nocapture %A, i32 %n, i32 %x) {
127 ; Intentionally left blank - see MIR sequence below.
138 define arm_aapcs_vfpcc void @vpt_load_vctp_store(ptr nocapture %A, i32 %n, i32 %x) {
139 ; Intentionally left blank - see MIR sequence below.
150 define arm_aapcs_vfpcc void @emptyblock() {
153 define arm_aapcs_vfpcc void @predvcmp() {
156 define arm_aapcs_vfpcc void @predvpt() {
160 declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>)
161 declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32 immarg, <4 x i1>)
162 declare i32 @llvm.start.loop.iterations.i32(i32)
163 declare i32 @llvm.loop.decrement.reg.i32.i32.i32(i32, i32)
164 declare <4 x i1> @llvm.arm.mve.vctp32(i32)
169 exposesReturnsTwice: false
171 regBankSelected: false
174 tracksRegLiveness: true
178 - { reg: '$r0', virtual-reg: '' }
179 - { reg: '$r1', virtual-reg: '' }
180 - { reg: '$r2', virtual-reg: '' }
182 isFrameAddressTaken: false
183 isReturnAddressTaken: false
193 cvBytesOfCalleeSavedRegisters: 0
194 hasOpaqueSPAdjustment: false
196 hasMustTailInVarArgFunc: false
202 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
203 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
204 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
205 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
206 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
207 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
210 machineFunctionInfo: {}
212 ; CHECK-LABEL: name: vpt_block
214 ; CHECK: successors: %bb.1(0x80000000)
215 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
216 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
217 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
218 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
219 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
220 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
221 ; CHECK: t2IT 11, 8, implicit-def $itstate
222 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
223 ; CHECK: bb.1.vector.ph:
224 ; CHECK: successors: %bb.2(0x80000000)
225 ; CHECK: liveins: $r0, $r1, $r2
226 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
227 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
228 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r1
229 ; CHECK: bb.2.vector.body:
230 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
231 ; CHECK: liveins: $lr, $q0, $r0, $r2, $r3
232 ; CHECK: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
233 ; CHECK: MVE_VPTv4s32r 4, renamable $q1, renamable $r2, 11, implicit-def $vpr
234 ; CHECK: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
235 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
236 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
237 ; CHECK: bb.3.for.cond.cleanup:
238 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
240 successors: %bb.1(0x80000000)
241 liveins: $r0, $r1, $r2, $r7, $lr
243 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
244 frame-setup CFI_INSTRUCTION def_cfa_offset 8
245 frame-setup CFI_INSTRUCTION offset $lr, -4
246 frame-setup CFI_INSTRUCTION offset $r7, -8
247 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
248 t2IT 11, 8, implicit-def $itstate
249 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
252 successors: %bb.2(0x80000000)
253 liveins: $r0, $r1, $r2, $r7, $lr
255 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
256 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
257 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
258 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
259 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
260 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
261 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
262 $lr = t2DoLoopStart renamable $lr
265 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
266 liveins: $lr, $q0, $r0, $r1, $r2, $r3
268 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
269 MVE_VPST 8, implicit $vpr
270 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
271 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
272 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
273 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
274 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
275 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
276 renamable $lr = t2LoopDec killed renamable $lr, 1
277 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
278 tB %bb.3, 14 /* CC::al */, $noreg
280 bb.3.for.cond.cleanup:
281 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
284 name: different_vcpt_reaching_def
286 exposesReturnsTwice: false
288 regBankSelected: false
291 tracksRegLiveness: true
295 - { reg: '$r0', virtual-reg: '' }
296 - { reg: '$r1', virtual-reg: '' }
297 - { reg: '$r2', virtual-reg: '' }
299 isFrameAddressTaken: false
300 isReturnAddressTaken: false
310 cvBytesOfCalleeSavedRegisters: 0
311 hasOpaqueSPAdjustment: false
313 hasMustTailInVarArgFunc: false
319 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
320 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
321 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
322 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
323 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
324 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
327 machineFunctionInfo: {}
329 ; CHECK-LABEL: name: different_vcpt_reaching_def
331 ; CHECK: successors: %bb.1(0x80000000)
332 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
333 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
334 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
335 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
336 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
337 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
338 ; CHECK: t2IT 11, 8, implicit-def $itstate
339 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
340 ; CHECK: bb.1.vector.ph:
341 ; CHECK: successors: %bb.2(0x80000000)
342 ; CHECK: liveins: $r0, $r1, $r2
343 ; CHECK: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
344 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
345 ; CHECK: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
346 ; CHECK: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
347 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
348 ; CHECK: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
349 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
350 ; CHECK: bb.2.vector.body:
351 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
352 ; CHECK: liveins: $lr, $q0, $r0, $r1, $r2, $r3
353 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
354 ; CHECK: MVE_VPST 8, implicit $vpr
355 ; CHECK: renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, renamable $vpr, $noreg
356 ; CHECK: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
357 ; CHECK: MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
358 ; CHECK: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
359 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
360 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
361 ; CHECK: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
362 ; CHECK: $lr = t2LEUpdate killed renamable $lr, %bb.2
363 ; CHECK: bb.3.for.cond.cleanup:
364 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
366 ; Tests that secondary VCTPs are refused when their operand's reaching definition is not the same as the main
370 successors: %bb.1(0x80000000)
371 liveins: $r0, $r1, $r2, $r7, $lr
373 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
374 frame-setup CFI_INSTRUCTION def_cfa_offset 8
375 frame-setup CFI_INSTRUCTION offset $lr, -4
376 frame-setup CFI_INSTRUCTION offset $r7, -8
377 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
378 t2IT 11, 8, implicit-def $itstate
379 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
382 successors: %bb.2(0x80000000)
383 liveins: $r0, $r1, $r2, $r7, $lr
385 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
386 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
387 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
388 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
389 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
390 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
391 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
392 $lr = t2DoLoopStart renamable $lr
395 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
396 liveins: $lr, $q0, $r0, $r1, $r2, $r3
398 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
399 MVE_VPST 8, implicit $vpr
400 renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, renamable $vpr, $noreg
401 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
402 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
403 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
404 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
405 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
406 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
407 renamable $lr = t2LoopDec killed renamable $lr, 1
408 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
409 tB %bb.3, 14 /* CC::al */, $noreg
411 bb.3.for.cond.cleanup:
412 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
415 name: different_vcpt_operand
417 exposesReturnsTwice: false
419 regBankSelected: false
422 tracksRegLiveness: true
426 - { reg: '$r0', virtual-reg: '' }
427 - { reg: '$r1', virtual-reg: '' }
428 - { reg: '$r2', virtual-reg: '' }
430 isFrameAddressTaken: false
431 isReturnAddressTaken: false
441 cvBytesOfCalleeSavedRegisters: 0
442 hasOpaqueSPAdjustment: false
444 hasMustTailInVarArgFunc: false
450 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
451 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
452 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
453 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
454 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
455 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
458 machineFunctionInfo: {}
460 ; CHECK-LABEL: name: different_vcpt_operand
462 ; CHECK: successors: %bb.1(0x80000000)
463 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
464 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
465 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
466 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
467 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
468 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
469 ; CHECK: t2IT 11, 8, implicit-def $itstate
470 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
471 ; CHECK: bb.1.vector.ph:
472 ; CHECK: successors: %bb.2(0x80000000)
473 ; CHECK: liveins: $r0, $r1, $r2
474 ; CHECK: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
475 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
476 ; CHECK: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
477 ; CHECK: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
478 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
479 ; CHECK: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
480 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
481 ; CHECK: bb.2.vector.body:
482 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
483 ; CHECK: liveins: $lr, $q0, $r0, $r1, $r2, $r3
484 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
485 ; CHECK: MVE_VPST 8, implicit $vpr
486 ; CHECK: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
487 ; CHECK: MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
488 ; CHECK: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
489 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed renamable $vpr, $noreg
490 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
491 ; CHECK: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
492 ; CHECK: $lr = t2LEUpdate killed renamable $lr, %bb.2
493 ; CHECK: bb.3.for.cond.cleanup:
494 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
496 ; Tests that secondary VCTPs are refused when their operand is not the same register as the main VCTP's.
499 successors: %bb.1(0x80000000)
500 liveins: $r0, $r1, $r2, $r7, $lr
502 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
503 frame-setup CFI_INSTRUCTION def_cfa_offset 8
504 frame-setup CFI_INSTRUCTION offset $lr, -4
505 frame-setup CFI_INSTRUCTION offset $r7, -8
506 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
507 t2IT 11, 8, implicit-def $itstate
508 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
511 successors: %bb.2(0x80000000)
512 liveins: $r0, $r1, $r2, $r7, $lr
514 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
515 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
516 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
517 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
518 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
519 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
520 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
521 $lr = t2DoLoopStart renamable $lr
524 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
525 liveins: $lr, $q0, $r0, $r1, $r2, $r3
527 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
528 MVE_VPST 8, implicit $vpr
529 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
530 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
531 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
532 renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed renamable $vpr, $noreg
533 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
534 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
535 renamable $lr = t2LoopDec killed renamable $lr, 1
536 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
537 tB %bb.3, 14 /* CC::al */, $noreg
539 bb.3.for.cond.cleanup:
540 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
545 exposesReturnsTwice: false
547 regBankSelected: false
550 tracksRegLiveness: true
554 - { reg: '$r0', virtual-reg: '' }
555 - { reg: '$r1', virtual-reg: '' }
556 - { reg: '$r2', virtual-reg: '' }
558 isFrameAddressTaken: false
559 isReturnAddressTaken: false
569 cvBytesOfCalleeSavedRegisters: 0
570 hasOpaqueSPAdjustment: false
572 hasMustTailInVarArgFunc: false
578 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
579 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
580 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
581 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
582 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
583 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
586 machineFunctionInfo: {}
588 ; CHECK-LABEL: name: else_vcpt
590 ; CHECK: successors: %bb.1(0x80000000)
591 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
592 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
593 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
594 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
595 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
596 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
597 ; CHECK: t2IT 11, 8, implicit-def $itstate
598 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
599 ; CHECK: bb.1.vector.ph:
600 ; CHECK: successors: %bb.2(0x80000000)
601 ; CHECK: liveins: $r0, $r1, $r2
602 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
603 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
604 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r1
605 ; CHECK: bb.2.vector.body:
606 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
607 ; CHECK: liveins: $lr, $q0, $r0, $r2, $r3
608 ; CHECK: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
609 ; CHECK: MVE_VPTv4s32r 12, renamable $q1, renamable $r2, 10, implicit-def $vpr
610 ; CHECK: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 13, 1, killed renamable $vpr, $noreg
611 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 2, killed renamable $vpr, $noreg
612 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
613 ; CHECK: bb.3.for.cond.cleanup:
614 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
616 ; Test including a else-predicated VCTP.
619 successors: %bb.1(0x80000000)
620 liveins: $r0, $r1, $r2, $r7, $lr
622 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
623 frame-setup CFI_INSTRUCTION def_cfa_offset 8
624 frame-setup CFI_INSTRUCTION offset $lr, -4
625 frame-setup CFI_INSTRUCTION offset $r7, -8
626 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
627 t2IT 11, 8, implicit-def $itstate
628 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
631 successors: %bb.2(0x80000000)
632 liveins: $r0, $r1, $r2, $r7, $lr
634 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
635 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
636 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
637 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
638 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
639 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
640 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
641 $lr = t2DoLoopStart renamable $lr
644 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
645 liveins: $lr, $q0, $r0, $r1, $r2, $r3
647 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
648 MVE_VPST 8, implicit $vpr
649 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
650 MVE_VPTv4s32r 14, renamable $q1, renamable $r2, 10, implicit-def $vpr
651 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 13, 1, killed renamable $vpr, $noreg
652 renamable $vpr = MVE_VCTP32 renamable $r1, 2, killed renamable $vpr, $noreg
653 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 2, killed renamable $vpr, $noreg
654 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
655 renamable $lr = t2LoopDec killed renamable $lr, 1
656 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
657 tB %bb.3, 14 /* CC::al */, $noreg
659 bb.3.for.cond.cleanup:
660 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
663 name: loop_invariant_vpt_operands
665 exposesReturnsTwice: false
667 regBankSelected: false
670 tracksRegLiveness: true
674 - { reg: '$r0', virtual-reg: '' }
675 - { reg: '$r1', virtual-reg: '' }
676 - { reg: '$r2', virtual-reg: '' }
678 isFrameAddressTaken: false
679 isReturnAddressTaken: false
689 cvBytesOfCalleeSavedRegisters: 0
690 hasOpaqueSPAdjustment: false
692 hasMustTailInVarArgFunc: false
698 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
699 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
700 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
701 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
702 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
703 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
706 machineFunctionInfo: {}
708 ; CHECK-LABEL: name: loop_invariant_vpt_operands
710 ; CHECK: successors: %bb.1(0x80000000)
711 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
712 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
713 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
714 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
715 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
716 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
717 ; CHECK: t2IT 11, 8, implicit-def $itstate
718 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
719 ; CHECK: bb.1.vector.ph:
720 ; CHECK: successors: %bb.2(0x80000000)
721 ; CHECK: liveins: $r0, $r1, $r2
722 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
723 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
724 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r1
725 ; CHECK: bb.2.vector.body:
726 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
727 ; CHECK: liveins: $lr, $q0, $r0, $r2, $r3
728 ; CHECK: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
729 ; CHECK: MVE_VPTv4s32r 4, renamable $q0, renamable $r2, 11, implicit-def $vpr
730 ; CHECK: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
731 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
732 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
733 ; CHECK: bb.3.for.cond.cleanup:
734 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
736 successors: %bb.1(0x80000000)
737 liveins: $r0, $r1, $r2, $r7, $lr
738 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
739 frame-setup CFI_INSTRUCTION def_cfa_offset 8
740 frame-setup CFI_INSTRUCTION offset $lr, -4
741 frame-setup CFI_INSTRUCTION offset $r7, -8
742 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
743 t2IT 11, 8, implicit-def $itstate
744 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
747 successors: %bb.2(0x80000000)
748 liveins: $r0, $r1, $r2, $r7, $lr
750 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
751 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
752 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
753 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
754 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
755 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
756 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
757 $lr = t2DoLoopStart renamable $lr
760 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
761 liveins: $lr, $q0, $r0, $r1, $r2, $r3
763 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
764 MVE_VPST 8, implicit $vpr
765 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
766 MVE_VPTv4s32r 2, renamable $q0, renamable $r2, 11, implicit-def $vpr
767 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
768 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
769 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
770 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
771 renamable $lr = t2LoopDec killed renamable $lr, 1
772 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
773 tB %bb.3, 14 /* CC::al */, $noreg
775 bb.3.for.cond.cleanup:
776 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
779 name: vctp_before_vpt
781 exposesReturnsTwice: false
783 regBankSelected: false
786 tracksRegLiveness: true
790 - { reg: '$r0', virtual-reg: '' }
791 - { reg: '$r1', virtual-reg: '' }
792 - { reg: '$r2', virtual-reg: '' }
794 isFrameAddressTaken: false
795 isReturnAddressTaken: false
805 cvBytesOfCalleeSavedRegisters: 0
806 hasOpaqueSPAdjustment: false
808 hasMustTailInVarArgFunc: false
814 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
815 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
816 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
817 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
818 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
819 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
822 machineFunctionInfo: {}
824 ; CHECK-LABEL: name: vctp_before_vpt
826 ; CHECK: successors: %bb.1(0x80000000)
827 ; CHECK: liveins: $lr, $r1, $r2, $r7
828 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
829 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
830 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
831 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
832 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
833 ; CHECK: t2IT 11, 8, implicit-def $itstate
834 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
835 ; CHECK: bb.1.vector.ph:
836 ; CHECK: successors: %bb.2(0x80000000)
837 ; CHECK: liveins: $r1, $r2
838 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
839 ; CHECK: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
840 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r1
841 ; CHECK: bb.2.vector.body:
842 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
843 ; CHECK: liveins: $lr, $q0, $r2, $r3
844 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, renamable $r2, 8, implicit-def $vpr
845 ; CHECK: dead renamable $vpr = MVE_VCMPs32r renamable $q0, renamable $r3, 12, 1, killed renamable $vpr, $noreg
846 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
847 ; CHECK: bb.3.for.cond.cleanup:
848 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
850 successors: %bb.1(0x80000000)
851 liveins: $r0, $r1, $r2, $r7, $lr
852 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
853 frame-setup CFI_INSTRUCTION def_cfa_offset 8
854 frame-setup CFI_INSTRUCTION offset $lr, -4
855 frame-setup CFI_INSTRUCTION offset $r7, -8
856 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
857 t2IT 11, 8, implicit-def $itstate
858 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
861 successors: %bb.2(0x80000000)
862 liveins: $r0, $r1, $r2, $r7, $lr
864 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
865 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
866 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
867 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
868 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
869 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
870 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
871 $lr = t2DoLoopStart renamable $lr
874 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
875 liveins: $lr, $q0, $r0, $r1, $r2, $r3
877 MVE_VPTv4s32r 8, renamable $q0, renamable $r2, 8, implicit-def $vpr
878 renamable $vpr = MVE_VCMPs32r killed renamable $q0, renamable $r3, 12, 1, killed renamable $vpr, $noreg
879 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
880 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
881 renamable $lr = t2LoopDec killed renamable $lr, 1
882 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
883 tB %bb.3, 14 /* CC::al */, $noreg
885 bb.3.for.cond.cleanup:
886 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
889 name: vpt_load_vctp_store
891 exposesReturnsTwice: false
893 regBankSelected: false
896 tracksRegLiveness: true
900 - { reg: '$r0', virtual-reg: '' }
901 - { reg: '$r1', virtual-reg: '' }
902 - { reg: '$r2', virtual-reg: '' }
904 isFrameAddressTaken: false
905 isReturnAddressTaken: false
915 cvBytesOfCalleeSavedRegisters: 0
916 hasOpaqueSPAdjustment: false
918 hasMustTailInVarArgFunc: false
924 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
925 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
926 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
927 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
928 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
929 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
932 machineFunctionInfo: {}
934 ; CHECK-LABEL: name: vpt_load_vctp_store
936 ; CHECK: successors: %bb.1(0x80000000)
937 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
938 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
939 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
940 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
941 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
942 ; CHECK: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
943 ; CHECK: t2IT 11, 8, implicit-def $itstate
944 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
945 ; CHECK: bb.1.vector.ph:
946 ; CHECK: successors: %bb.2(0x80000000)
947 ; CHECK: liveins: $r0, $r1, $r2
948 ; CHECK: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
949 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
950 ; CHECK: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
951 ; CHECK: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
952 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
953 ; CHECK: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
954 ; CHECK: dead renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
955 ; CHECK: bb.2.vector.body:
956 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
957 ; CHECK: liveins: $lr, $q0, $r0, $r1, $r2
958 ; CHECK: MVE_VPTv4s32r 2, killed renamable $q0, renamable $r2, 2, implicit-def $vpr
959 ; CHECK: renamable $q0 = MVE_VLDRWU32 renamable $r0, 0, 1, $vpr, $noreg
960 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed $vpr, $noreg
961 ; CHECK: MVE_VSTRWU32 renamable $q0, renamable $r0, 0, 1, killed $vpr, $noreg
962 ; CHECK: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
963 ; CHECK: $lr = t2LEUpdate killed renamable $lr, %bb.2
964 ; CHECK: bb.3.for.cond.cleanup:
965 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
967 ; This shouldn't be tail-predicated because the VLDR isn't predicated on the VCTP.
970 successors: %bb.1(0x80000000)
971 liveins: $r0, $r1, $r2, $r7, $lr
972 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
973 frame-setup CFI_INSTRUCTION def_cfa_offset 8
974 frame-setup CFI_INSTRUCTION offset $lr, -4
975 frame-setup CFI_INSTRUCTION offset $r7, -8
976 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
977 t2IT 11, 8, implicit-def $itstate
978 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
981 successors: %bb.2(0x80000000)
982 liveins: $r0, $r1, $r2, $r7, $lr
984 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
985 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
986 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
987 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
988 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
989 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
990 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
991 $lr = t2DoLoopStart renamable $lr
994 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
995 liveins: $lr, $q0, $r0, $r1, $r2, $r3
997 MVE_VPTv4s32r 2, renamable $q0, renamable $r2, 2, implicit-def $vpr
998 renamable $q0 = MVE_VLDRWU32 renamable $r0, 0, 1, $vpr, $noreg
999 renamable $vpr = MVE_VCTP32 renamable $r1, 1, $vpr, $noreg
1000 MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 1, $vpr, $noreg
1001 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
1002 renamable $lr = t2LoopDec killed renamable $lr, 1
1003 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
1004 tB %bb.3, 14 /* CC::al */, $noreg
1006 bb.3.for.cond.cleanup:
1007 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1011 tracksRegLiveness: true
1013 - { reg: '$r0', virtual-reg: '' }
1014 - { reg: '$r1', virtual-reg: '' }
1015 - { reg: '$r2', virtual-reg: '' }
1017 - { id: 0, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
1018 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
1019 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1020 - { id: 1, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1021 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1022 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1023 - { id: 2, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1024 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1025 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1027 ; CHECK-LABEL: name: emptyblock
1029 ; CHECK: successors: %bb.1(0x50000000), %bb.3(0x30000000)
1030 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
1031 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1032 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1033 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
1034 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
1035 ; CHECK: $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
1036 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 12
1037 ; CHECK: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1038 ; CHECK: tBcc %bb.3, 11 /* CC::lt */, killed $cpsr
1040 ; CHECK: successors: %bb.2(0x80000000)
1041 ; CHECK: liveins: $r0, $r1, $r2
1042 ; CHECK: tCMPi8 killed renamable $r2, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
1043 ; CHECK: renamable $r2 = t2CSINC $zr, $zr, 0, implicit killed $cpsr
1044 ; CHECK: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
1045 ; CHECK: renamable $r12 = t2ANDri killed renamable $r2, 1, 14 /* CC::al */, $noreg, $noreg
1046 ; CHECK: renamable $r2 = t2RSBri killed renamable $r12, 0, 14 /* CC::al */, $noreg, $noreg
1047 ; CHECK: $vpr = VMSR_P0 killed $r2, 14 /* CC::al */, $noreg
1048 ; CHECK: VSTR_P0_off killed renamable $vpr, $sp, 0, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
1049 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r0
1050 ; CHECK: bb.2 (align 4):
1051 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1052 ; CHECK: liveins: $lr, $q0, $r1
1053 ; CHECK: renamable $vpr = VLDR_P0_off $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
1054 ; CHECK: MVE_VPST 8, implicit $vpr
1055 ; CHECK: renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1056 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
1058 ; CHECK: $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
1059 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
1061 successors: %bb.1(0x50000000), %bb.3(0x30000000)
1062 liveins: $r0, $r1, $r2, $r7, $lr
1064 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1065 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1066 frame-setup CFI_INSTRUCTION offset $lr, -4
1067 frame-setup CFI_INSTRUCTION offset $r7, -8
1068 $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
1069 frame-setup CFI_INSTRUCTION def_cfa_offset 12
1070 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1071 tBcc %bb.3, 11 /* CC::lt */, killed $cpsr
1074 successors: %bb.2(0x80000000)
1075 liveins: $r0, $r1, $r2
1077 tCMPi8 killed renamable $r2, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
1078 renamable $r2 = t2CSINC $zr, $zr, 0, implicit killed $cpsr
1079 renamable $r3, dead $cpsr = tADDi3 renamable $r0, 3, 14 /* CC::al */, $noreg
1080 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
1081 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1082 renamable $r12 = t2ANDri killed renamable $r2, 1, 14 /* CC::al */, $noreg, $noreg
1083 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14 /* CC::al */, $noreg
1084 renamable $r2, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1085 renamable $lr = nuw nsw t2ADDrs killed renamable $r2, killed renamable $r3, 19, 14 /* CC::al */, $noreg, $noreg
1086 renamable $r2 = t2RSBri killed renamable $r12, 0, 14 /* CC::al */, $noreg, $noreg
1087 $vpr = VMSR_P0 killed $r2, 14 /* CC::al */, $noreg
1088 VSTR_P0_off killed renamable $vpr, $sp, 0, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
1089 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r0
1092 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1093 liveins: $lr, $q0, $r0, $r1
1095 renamable $vpr = VLDR_P0_off $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
1096 MVE_VPST 8, implicit $vpr
1097 renamable $vpr = MVE_VCTP32 renamable $r0, 1, killed renamable $vpr, $noreg
1098 renamable $r0, dead $cpsr = tSUBi8 killed renamable $r0, 4, 14 /* CC::al */, $noreg
1099 MVE_VPST 8, implicit $vpr
1100 renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1101 renamable $lr = t2LoopDec killed renamable $lr, 1
1102 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
1103 tB %bb.3, 14 /* CC::al */, $noreg
1106 $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
1107 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
1112 tracksRegLiveness: true
1114 - { reg: '$r0', virtual-reg: '' }
1115 - { reg: '$r1', virtual-reg: '' }
1116 - { reg: '$r2', virtual-reg: '' }
1118 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1119 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1120 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1121 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1122 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1123 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1126 value: '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1128 isTargetSpecific: false
1130 ; CHECK-LABEL: name: predvcmp
1132 ; CHECK: successors: %bb.1(0x80000000)
1133 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
1134 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1135 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1136 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
1137 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
1138 ; CHECK: tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1139 ; CHECK: t2IT 11, 8, implicit-def $itstate
1140 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1142 ; CHECK: successors: %bb.2(0x80000000)
1143 ; CHECK: liveins: $r0, $r1, $r2
1144 ; CHECK: renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1145 ; CHECK: renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1146 ; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1147 ; CHECK: renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1148 ; CHECK: $lr = MVE_DLSTP_32 killed renamable $r2
1149 ; CHECK: bb.2 (align 4):
1150 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1151 ; CHECK: liveins: $lr, $q0, $q1, $q2, $r0, $r1
1152 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1153 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1154 ; CHECK: renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1155 ; CHECK: $lr = MVE_LETP killed renamable $lr, %bb.2
1157 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1158 ; CHECK: bb.4 (align 8):
1159 ; CHECK: CONSTPOOL_ENTRY 0, %const.0, 16
1161 successors: %bb.1(0x80000000)
1162 liveins: $r0, $r1, $r2, $r7, $lr
1164 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1165 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1166 frame-setup CFI_INSTRUCTION offset $lr, -4
1167 frame-setup CFI_INSTRUCTION offset $r7, -8
1168 tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1169 t2IT 11, 8, implicit-def $itstate
1170 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1173 successors: %bb.2(0x80000000)
1174 liveins: $r0, $r1, $r2
1176 renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1177 renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1178 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1179 renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1180 renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1181 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1182 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1183 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1184 renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1185 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r2
1188 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1189 liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1191 renamable $vpr = MVE_VCTP32 renamable $r2, 0, $noreg, $noreg
1192 MVE_VPST 4, implicit $vpr
1193 renamable $vpr = MVE_VCMPs32r renamable $q0, renamable $r1, 11, 1, killed renamable $vpr, $noreg
1194 renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1195 renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1196 renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1197 renamable $lr = t2LoopDec killed renamable $lr, 1, implicit-def dead $cpsr
1198 t2LoopEnd killed renamable $lr, %bb.2, implicit-def dead $cpsr
1199 tB %bb.3, 14 /* CC::al */, $noreg
1202 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1205 CONSTPOOL_ENTRY 0, %const.0, 16
1211 tracksRegLiveness: true
1213 - { reg: '$r0', virtual-reg: '' }
1214 - { reg: '$r1', virtual-reg: '' }
1215 - { reg: '$r2', virtual-reg: '' }
1217 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1218 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1219 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1220 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1221 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1222 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1225 value: '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1227 isTargetSpecific: false
1229 ; CHECK-LABEL: name: predvpt
1231 ; CHECK: successors: %bb.1(0x80000000)
1232 ; CHECK: liveins: $lr, $r0, $r1, $r2, $r7
1233 ; CHECK: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1234 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1235 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4
1236 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8
1237 ; CHECK: tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1238 ; CHECK: t2IT 11, 8, implicit-def $itstate
1239 ; CHECK: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1241 ; CHECK: successors: %bb.2(0x80000000)
1242 ; CHECK: liveins: $r0, $r1, $r2
1243 ; CHECK: renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1244 ; CHECK: renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1245 ; CHECK: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1246 ; CHECK: renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1247 ; CHECK: renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1248 ; CHECK: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1249 ; CHECK: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1250 ; CHECK: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1251 ; CHECK: renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1252 ; CHECK: bb.2 (align 4):
1253 ; CHECK: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1254 ; CHECK: liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1255 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1256 ; CHECK: renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed $vpr, $noreg
1257 ; CHECK: MVE_VPST 8, implicit $vpr
1258 ; CHECK: renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1259 ; CHECK: renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1260 ; CHECK: renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1261 ; CHECK: $lr = t2LEUpdate killed renamable $lr, %bb.2
1263 ; CHECK: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1264 ; CHECK: bb.4 (align 8):
1265 ; CHECK: CONSTPOOL_ENTRY 0, %const.0, 16
1267 successors: %bb.1(0x80000000)
1268 liveins: $r0, $r1, $r2, $r7, $lr
1270 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1271 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1272 frame-setup CFI_INSTRUCTION offset $lr, -4
1273 frame-setup CFI_INSTRUCTION offset $r7, -8
1274 tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1275 t2IT 11, 8, implicit-def $itstate
1276 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1279 successors: %bb.2(0x80000000)
1280 liveins: $r0, $r1, $r2
1282 renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1283 renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1284 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1285 renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1286 renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1287 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1288 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1289 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1290 renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1291 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r2
1294 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1295 liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1297 MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1298 renamable $vpr = MVE_VCTP32 renamable $r2, 1, $vpr, $noreg
1299 MVE_VPST 8, implicit $vpr
1300 renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1301 renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1302 renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1303 renamable $lr = t2LoopDec killed renamable $lr, 1, implicit-def dead $cpsr
1304 t2LoopEnd killed renamable $lr, %bb.2, implicit-def dead $cpsr
1305 tB %bb.3, 14 /* CC::al */, $noreg
1308 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1311 CONSTPOOL_ENTRY 0, %const.0, 16