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-NEXT: successors: %bb.1(0x80000000)
215 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
217 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
218 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
219 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
220 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
221 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
222 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
223 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
225 ; CHECK-NEXT: bb.1.vector.ph:
226 ; CHECK-NEXT: successors: %bb.2(0x80000000)
227 ; CHECK-NEXT: liveins: $r0, $r1, $r2
229 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
230 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
231 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r1
233 ; CHECK-NEXT: bb.2.vector.body:
234 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
235 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r2, $r3
237 ; CHECK-NEXT: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
238 ; CHECK-NEXT: MVE_VPTv4s32r 4, renamable $q1, renamable $r2, 11, implicit-def $vpr
239 ; CHECK-NEXT: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
240 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
241 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
243 ; CHECK-NEXT: bb.3.for.cond.cleanup:
244 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
246 successors: %bb.1(0x80000000)
247 liveins: $r0, $r1, $r2, $r7, $lr
249 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
250 frame-setup CFI_INSTRUCTION def_cfa_offset 8
251 frame-setup CFI_INSTRUCTION offset $lr, -4
252 frame-setup CFI_INSTRUCTION offset $r7, -8
253 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
254 t2IT 11, 8, implicit-def $itstate
255 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
258 successors: %bb.2(0x80000000)
259 liveins: $r0, $r1, $r2, $r7, $lr
261 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
262 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
263 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
264 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
265 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
266 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
267 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
268 $lr = t2DoLoopStart renamable $lr
271 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
272 liveins: $lr, $q0, $r0, $r1, $r2, $r3
274 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
275 MVE_VPST 8, implicit $vpr
276 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
277 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
278 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
279 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
280 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
281 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
282 renamable $lr = t2LoopDec killed renamable $lr, 1
283 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
284 tB %bb.3, 14 /* CC::al */, $noreg
286 bb.3.for.cond.cleanup:
287 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
289 # Tests that secondary VCTPs are refused when their operand's reaching definition is not the same as the main
292 name: different_vcpt_reaching_def
294 exposesReturnsTwice: false
296 regBankSelected: false
299 tracksRegLiveness: true
303 - { reg: '$r0', virtual-reg: '' }
304 - { reg: '$r1', virtual-reg: '' }
305 - { reg: '$r2', virtual-reg: '' }
307 isFrameAddressTaken: false
308 isReturnAddressTaken: false
318 cvBytesOfCalleeSavedRegisters: 0
319 hasOpaqueSPAdjustment: false
321 hasMustTailInVarArgFunc: false
327 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
328 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
329 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
330 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
331 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
332 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
335 machineFunctionInfo: {}
337 ; CHECK-LABEL: name: different_vcpt_reaching_def
339 ; CHECK-NEXT: successors: %bb.1(0x80000000)
340 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
342 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
343 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
344 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
345 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
346 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
347 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
348 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
350 ; CHECK-NEXT: bb.1.vector.ph:
351 ; CHECK-NEXT: successors: %bb.2(0x80000000)
352 ; CHECK-NEXT: liveins: $r0, $r1, $r2
354 ; CHECK-NEXT: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
355 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
356 ; CHECK-NEXT: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
357 ; CHECK-NEXT: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
358 ; CHECK-NEXT: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
359 ; CHECK-NEXT: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
360 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
362 ; CHECK-NEXT: bb.2.vector.body:
363 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
364 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r1, $r2, $r3
366 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
367 ; CHECK-NEXT: MVE_VPST 8, implicit $vpr
368 ; CHECK-NEXT: renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, renamable $vpr, $noreg
369 ; CHECK-NEXT: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
370 ; CHECK-NEXT: MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
371 ; CHECK-NEXT: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
372 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
373 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
374 ; CHECK-NEXT: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
375 ; CHECK-NEXT: $lr = t2LEUpdate killed renamable $lr, %bb.2
377 ; CHECK-NEXT: bb.3.for.cond.cleanup:
378 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
380 successors: %bb.1(0x80000000)
381 liveins: $r0, $r1, $r2, $r7, $lr
383 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
384 frame-setup CFI_INSTRUCTION def_cfa_offset 8
385 frame-setup CFI_INSTRUCTION offset $lr, -4
386 frame-setup CFI_INSTRUCTION offset $r7, -8
387 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
388 t2IT 11, 8, implicit-def $itstate
389 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
392 successors: %bb.2(0x80000000)
393 liveins: $r0, $r1, $r2, $r7, $lr
395 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
396 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
397 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
398 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
399 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
400 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
401 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
402 $lr = t2DoLoopStart renamable $lr
405 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
406 liveins: $lr, $q0, $r0, $r1, $r2, $r3
408 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
409 MVE_VPST 8, implicit $vpr
410 renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, renamable $vpr, $noreg
411 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
412 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
413 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
414 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
415 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
416 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
417 renamable $lr = t2LoopDec killed renamable $lr, 1
418 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
419 tB %bb.3, 14 /* CC::al */, $noreg
421 bb.3.for.cond.cleanup:
422 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
424 # Tests that secondary VCTPs are refused when their operand is not the same register as the main VCTP's.
426 name: different_vcpt_operand
428 exposesReturnsTwice: false
430 regBankSelected: false
433 tracksRegLiveness: true
437 - { reg: '$r0', virtual-reg: '' }
438 - { reg: '$r1', virtual-reg: '' }
439 - { reg: '$r2', virtual-reg: '' }
441 isFrameAddressTaken: false
442 isReturnAddressTaken: false
452 cvBytesOfCalleeSavedRegisters: 0
453 hasOpaqueSPAdjustment: false
455 hasMustTailInVarArgFunc: false
461 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
462 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
463 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
464 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
465 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
466 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
469 machineFunctionInfo: {}
471 ; CHECK-LABEL: name: different_vcpt_operand
473 ; CHECK-NEXT: successors: %bb.1(0x80000000)
474 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
476 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
477 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
478 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
479 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
480 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
481 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
482 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
484 ; CHECK-NEXT: bb.1.vector.ph:
485 ; CHECK-NEXT: successors: %bb.2(0x80000000)
486 ; CHECK-NEXT: liveins: $r0, $r1, $r2
488 ; CHECK-NEXT: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
489 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
490 ; CHECK-NEXT: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
491 ; CHECK-NEXT: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
492 ; CHECK-NEXT: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
493 ; CHECK-NEXT: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
494 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
496 ; CHECK-NEXT: bb.2.vector.body:
497 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
498 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r1, $r2, $r3
500 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
501 ; CHECK-NEXT: MVE_VPST 8, implicit $vpr
502 ; CHECK-NEXT: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
503 ; CHECK-NEXT: MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
504 ; CHECK-NEXT: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
505 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed renamable $vpr, $noreg
506 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
507 ; CHECK-NEXT: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
508 ; CHECK-NEXT: $lr = t2LEUpdate killed renamable $lr, %bb.2
510 ; CHECK-NEXT: bb.3.for.cond.cleanup:
511 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
513 successors: %bb.1(0x80000000)
514 liveins: $r0, $r1, $r2, $r7, $lr
516 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
517 frame-setup CFI_INSTRUCTION def_cfa_offset 8
518 frame-setup CFI_INSTRUCTION offset $lr, -4
519 frame-setup CFI_INSTRUCTION offset $r7, -8
520 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
521 t2IT 11, 8, implicit-def $itstate
522 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
525 successors: %bb.2(0x80000000)
526 liveins: $r0, $r1, $r2, $r7, $lr
528 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
529 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
530 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
531 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
532 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
533 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
534 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
535 $lr = t2DoLoopStart renamable $lr
538 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
539 liveins: $lr, $q0, $r0, $r1, $r2, $r3
541 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
542 MVE_VPST 8, implicit $vpr
543 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
544 MVE_VPTv4s32r 2, renamable $q1, renamable $r2, 11, implicit-def $vpr
545 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
546 renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed renamable $vpr, $noreg
547 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
548 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
549 renamable $lr = t2LoopDec killed renamable $lr, 1
550 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
551 tB %bb.3, 14 /* CC::al */, $noreg
553 bb.3.for.cond.cleanup:
554 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
556 # Test including a else-predicated VCTP.
560 exposesReturnsTwice: false
562 regBankSelected: false
565 tracksRegLiveness: true
569 - { reg: '$r0', virtual-reg: '' }
570 - { reg: '$r1', virtual-reg: '' }
571 - { reg: '$r2', virtual-reg: '' }
573 isFrameAddressTaken: false
574 isReturnAddressTaken: false
584 cvBytesOfCalleeSavedRegisters: 0
585 hasOpaqueSPAdjustment: false
587 hasMustTailInVarArgFunc: false
593 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
594 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
595 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
596 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
597 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
598 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
601 machineFunctionInfo: {}
603 ; CHECK-LABEL: name: else_vcpt
605 ; CHECK-NEXT: successors: %bb.1(0x80000000)
606 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
608 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
609 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
610 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
611 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
612 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
613 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
614 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
616 ; CHECK-NEXT: bb.1.vector.ph:
617 ; CHECK-NEXT: successors: %bb.2(0x80000000)
618 ; CHECK-NEXT: liveins: $r0, $r1, $r2
620 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
621 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
622 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r1
624 ; CHECK-NEXT: bb.2.vector.body:
625 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
626 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r2, $r3
628 ; CHECK-NEXT: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
629 ; CHECK-NEXT: MVE_VPTv4s32r 12, renamable $q1, renamable $r2, 10, implicit-def $vpr
630 ; CHECK-NEXT: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 13, 1, killed renamable $vpr, $noreg
631 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 2, killed renamable $vpr, $noreg
632 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
634 ; CHECK-NEXT: bb.3.for.cond.cleanup:
635 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
637 successors: %bb.1(0x80000000)
638 liveins: $r0, $r1, $r2, $r7, $lr
640 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
641 frame-setup CFI_INSTRUCTION def_cfa_offset 8
642 frame-setup CFI_INSTRUCTION offset $lr, -4
643 frame-setup CFI_INSTRUCTION offset $r7, -8
644 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
645 t2IT 11, 8, implicit-def $itstate
646 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
649 successors: %bb.2(0x80000000)
650 liveins: $r0, $r1, $r2, $r7, $lr
652 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
653 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
654 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
655 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
656 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
657 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
658 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
659 $lr = t2DoLoopStart renamable $lr
662 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
663 liveins: $lr, $q0, $r0, $r1, $r2, $r3
665 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
666 MVE_VPST 8, implicit $vpr
667 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
668 MVE_VPTv4s32r 14, renamable $q1, renamable $r2, 10, implicit-def $vpr
669 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 13, 1, killed renamable $vpr, $noreg
670 renamable $vpr = MVE_VCTP32 renamable $r1, 2, killed renamable $vpr, $noreg
671 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 2, killed renamable $vpr, $noreg
672 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
673 renamable $lr = t2LoopDec killed renamable $lr, 1
674 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
675 tB %bb.3, 14 /* CC::al */, $noreg
677 bb.3.for.cond.cleanup:
678 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
681 name: loop_invariant_vpt_operands
683 exposesReturnsTwice: false
685 regBankSelected: false
688 tracksRegLiveness: true
692 - { reg: '$r0', virtual-reg: '' }
693 - { reg: '$r1', virtual-reg: '' }
694 - { reg: '$r2', virtual-reg: '' }
696 isFrameAddressTaken: false
697 isReturnAddressTaken: false
707 cvBytesOfCalleeSavedRegisters: 0
708 hasOpaqueSPAdjustment: false
710 hasMustTailInVarArgFunc: false
716 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
717 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
718 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
719 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
720 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
721 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
724 machineFunctionInfo: {}
726 ; CHECK-LABEL: name: loop_invariant_vpt_operands
728 ; CHECK-NEXT: successors: %bb.1(0x80000000)
729 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
731 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
732 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
733 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
734 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
735 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
736 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
737 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
739 ; CHECK-NEXT: bb.1.vector.ph:
740 ; CHECK-NEXT: successors: %bb.2(0x80000000)
741 ; CHECK-NEXT: liveins: $r0, $r1, $r2
743 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
744 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
745 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r1
747 ; CHECK-NEXT: bb.2.vector.body:
748 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
749 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r2, $r3
751 ; CHECK-NEXT: renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 0, killed $noreg, $noreg
752 ; CHECK-NEXT: MVE_VPTv4s32r 4, renamable $q0, renamable $r2, 11, implicit-def $vpr
753 ; CHECK-NEXT: renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
754 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
755 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
757 ; CHECK-NEXT: bb.3.for.cond.cleanup:
758 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
760 successors: %bb.1(0x80000000)
761 liveins: $r0, $r1, $r2, $r7, $lr
762 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
763 frame-setup CFI_INSTRUCTION def_cfa_offset 8
764 frame-setup CFI_INSTRUCTION offset $lr, -4
765 frame-setup CFI_INSTRUCTION offset $r7, -8
766 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
767 t2IT 11, 8, implicit-def $itstate
768 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
771 successors: %bb.2(0x80000000)
772 liveins: $r0, $r1, $r2, $r7, $lr
774 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
775 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
776 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
777 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
778 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
779 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
780 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
781 $lr = t2DoLoopStart renamable $lr
784 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
785 liveins: $lr, $q0, $r0, $r1, $r2, $r3
787 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
788 MVE_VPST 8, implicit $vpr
789 renamable $q1 = MVE_VLDRWU32 renamable $r0, 0, 1, killed renamable $vpr, $noreg
790 MVE_VPTv4s32r 2, renamable $q0, renamable $r2, 11, implicit-def $vpr
791 renamable $vpr = MVE_VCMPs32r killed renamable $q1, renamable $r3, 12, 1, killed renamable $vpr, $noreg
792 renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed renamable $vpr, $noreg
793 renamable $r0 = MVE_VSTRWU32_post renamable $q0, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg
794 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
795 renamable $lr = t2LoopDec killed renamable $lr, 1
796 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
797 tB %bb.3, 14 /* CC::al */, $noreg
799 bb.3.for.cond.cleanup:
800 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
803 name: vctp_before_vpt
805 exposesReturnsTwice: false
807 regBankSelected: false
810 tracksRegLiveness: true
814 - { reg: '$r0', virtual-reg: '' }
815 - { reg: '$r1', virtual-reg: '' }
816 - { reg: '$r2', virtual-reg: '' }
818 isFrameAddressTaken: false
819 isReturnAddressTaken: false
829 cvBytesOfCalleeSavedRegisters: 0
830 hasOpaqueSPAdjustment: false
832 hasMustTailInVarArgFunc: false
838 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
839 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
840 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
841 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
842 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
843 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
846 machineFunctionInfo: {}
848 ; CHECK-LABEL: name: vctp_before_vpt
850 ; CHECK-NEXT: successors: %bb.1(0x80000000)
851 ; CHECK-NEXT: liveins: $lr, $r1, $r2, $r7
853 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
854 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
855 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
856 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
857 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
858 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
859 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
861 ; CHECK-NEXT: bb.1.vector.ph:
862 ; CHECK-NEXT: successors: %bb.2(0x80000000)
863 ; CHECK-NEXT: liveins: $r1, $r2
865 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
866 ; CHECK-NEXT: renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
867 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r1
869 ; CHECK-NEXT: bb.2.vector.body:
870 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
871 ; CHECK-NEXT: liveins: $lr, $q0, $r2, $r3
873 ; CHECK-NEXT: MVE_VPTv4s32r 8, renamable $q0, renamable $r2, 8, implicit-def $vpr
874 ; CHECK-NEXT: dead renamable $vpr = MVE_VCMPs32r renamable $q0, renamable $r3, 12, 1, killed renamable $vpr, $noreg
875 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
877 ; CHECK-NEXT: bb.3.for.cond.cleanup:
878 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
880 successors: %bb.1(0x80000000)
881 liveins: $r0, $r1, $r2, $r7, $lr
882 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
883 frame-setup CFI_INSTRUCTION def_cfa_offset 8
884 frame-setup CFI_INSTRUCTION offset $lr, -4
885 frame-setup CFI_INSTRUCTION offset $r7, -8
886 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
887 t2IT 11, 8, implicit-def $itstate
888 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
891 successors: %bb.2(0x80000000)
892 liveins: $r0, $r1, $r2, $r7, $lr
894 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
895 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
896 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
897 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
898 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
899 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
900 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
901 $lr = t2DoLoopStart renamable $lr
904 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
905 liveins: $lr, $q0, $r0, $r1, $r2, $r3
907 MVE_VPTv4s32r 8, renamable $q0, renamable $r2, 8, implicit-def $vpr
908 renamable $vpr = MVE_VCMPs32r killed renamable $q0, renamable $r3, 12, 1, killed renamable $vpr, $noreg
909 renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
910 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
911 renamable $lr = t2LoopDec killed renamable $lr, 1
912 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
913 tB %bb.3, 14 /* CC::al */, $noreg
915 bb.3.for.cond.cleanup:
916 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
918 # This shouldn't be tail-predicated because the VLDR isn't predicated on the VCTP.
920 name: vpt_load_vctp_store
922 exposesReturnsTwice: false
924 regBankSelected: false
927 tracksRegLiveness: true
931 - { reg: '$r0', virtual-reg: '' }
932 - { reg: '$r1', virtual-reg: '' }
933 - { reg: '$r2', virtual-reg: '' }
935 isFrameAddressTaken: false
936 isReturnAddressTaken: false
946 cvBytesOfCalleeSavedRegisters: 0
947 hasOpaqueSPAdjustment: false
949 hasMustTailInVarArgFunc: false
955 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
956 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
957 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
958 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
959 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
960 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
963 machineFunctionInfo: {}
965 ; CHECK-LABEL: name: vpt_load_vctp_store
967 ; CHECK-NEXT: successors: %bb.1(0x80000000)
968 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
970 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
971 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
972 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
973 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
974 ; CHECK-NEXT: tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
975 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
976 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
978 ; CHECK-NEXT: bb.1.vector.ph:
979 ; CHECK-NEXT: successors: %bb.2(0x80000000)
980 ; CHECK-NEXT: liveins: $r0, $r1, $r2
982 ; CHECK-NEXT: renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
983 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
984 ; CHECK-NEXT: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
985 ; CHECK-NEXT: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
986 ; CHECK-NEXT: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
987 ; CHECK-NEXT: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
988 ; CHECK-NEXT: dead renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
990 ; CHECK-NEXT: bb.2.vector.body:
991 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
992 ; CHECK-NEXT: liveins: $lr, $q0, $r0, $r1, $r2
994 ; CHECK-NEXT: MVE_VPTv4s32r 2, killed renamable $q0, renamable $r2, 2, implicit-def $vpr
995 ; CHECK-NEXT: renamable $q0 = MVE_VLDRWU32 renamable $r0, 0, 1, $vpr, $noreg
996 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r1, 1, killed $vpr, $noreg
997 ; CHECK-NEXT: MVE_VSTRWU32 renamable $q0, renamable $r0, 0, 1, killed $vpr, $noreg
998 ; CHECK-NEXT: renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
999 ; CHECK-NEXT: $lr = t2LEUpdate killed renamable $lr, %bb.2
1000 ; CHECK-NEXT: {{ $}}
1001 ; CHECK-NEXT: bb.3.for.cond.cleanup:
1002 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1004 successors: %bb.1(0x80000000)
1005 liveins: $r0, $r1, $r2, $r7, $lr
1006 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1007 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1008 frame-setup CFI_INSTRUCTION offset $lr, -4
1009 frame-setup CFI_INSTRUCTION offset $r7, -8
1010 tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1011 t2IT 11, 8, implicit-def $itstate
1012 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1015 successors: %bb.2(0x80000000)
1016 liveins: $r0, $r1, $r2, $r7, $lr
1018 renamable $r3, dead $cpsr = tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
1019 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
1020 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1021 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1022 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1023 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1024 renamable $r3, dead $cpsr = nsw tRSB renamable $r2, 14 /* CC::al */, $noreg
1025 $lr = t2DoLoopStart renamable $lr
1028 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1029 liveins: $lr, $q0, $r0, $r1, $r2, $r3
1031 MVE_VPTv4s32r 2, renamable $q0, renamable $r2, 2, implicit-def $vpr
1032 renamable $q0 = MVE_VLDRWU32 renamable $r0, 0, 1, $vpr, $noreg
1033 renamable $vpr = MVE_VCTP32 renamable $r1, 1, $vpr, $noreg
1034 MVE_VSTRWU32 killed renamable $q0, killed renamable $r0, 0, 1, $vpr, $noreg
1035 renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
1036 renamable $lr = t2LoopDec killed renamable $lr, 1
1037 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
1038 tB %bb.3, 14 /* CC::al */, $noreg
1040 bb.3.for.cond.cleanup:
1041 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1045 tracksRegLiveness: true
1047 - { reg: '$r0', virtual-reg: '' }
1048 - { reg: '$r1', virtual-reg: '' }
1049 - { reg: '$r2', virtual-reg: '' }
1051 - { id: 0, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4,
1052 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
1053 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1054 - { id: 1, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1055 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1056 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1057 - { id: 2, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1058 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1059 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1061 ; CHECK-LABEL: name: emptyblock
1063 ; CHECK-NEXT: successors: %bb.1(0x50000000), %bb.3(0x30000000)
1064 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
1065 ; CHECK-NEXT: {{ $}}
1066 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1067 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1068 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
1069 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
1070 ; CHECK-NEXT: $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
1071 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 12
1072 ; CHECK-NEXT: tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1073 ; CHECK-NEXT: tBcc %bb.3, 11 /* CC::lt */, killed $cpsr
1074 ; CHECK-NEXT: {{ $}}
1076 ; CHECK-NEXT: successors: %bb.2(0x80000000)
1077 ; CHECK-NEXT: liveins: $r0, $r1, $r2
1078 ; CHECK-NEXT: {{ $}}
1079 ; CHECK-NEXT: tCMPi8 killed renamable $r2, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
1080 ; CHECK-NEXT: renamable $r2 = t2CSINC $zr, $zr, 0, implicit killed $cpsr
1081 ; CHECK-NEXT: renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
1082 ; CHECK-NEXT: renamable $r12 = t2ANDri killed renamable $r2, 1, 14 /* CC::al */, $noreg, $noreg
1083 ; CHECK-NEXT: renamable $r2 = t2RSBri killed renamable $r12, 0, 14 /* CC::al */, $noreg, $noreg
1084 ; CHECK-NEXT: $vpr = VMSR_P0 killed $r2, 14 /* CC::al */, $noreg
1085 ; CHECK-NEXT: VSTR_P0_off killed renamable $vpr, $sp, 0, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
1086 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r0
1087 ; CHECK-NEXT: {{ $}}
1088 ; CHECK-NEXT: bb.2 (align 4):
1089 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1090 ; CHECK-NEXT: liveins: $lr, $q0, $r1
1091 ; CHECK-NEXT: {{ $}}
1092 ; CHECK-NEXT: renamable $vpr = VLDR_P0_off $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
1093 ; CHECK-NEXT: MVE_VPST 8, implicit $vpr
1094 ; CHECK-NEXT: renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1095 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
1096 ; CHECK-NEXT: {{ $}}
1098 ; CHECK-NEXT: $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
1099 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
1101 successors: %bb.1(0x50000000), %bb.3(0x30000000)
1102 liveins: $r0, $r1, $r2, $r7, $lr
1104 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1105 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1106 frame-setup CFI_INSTRUCTION offset $lr, -4
1107 frame-setup CFI_INSTRUCTION offset $r7, -8
1108 $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
1109 frame-setup CFI_INSTRUCTION def_cfa_offset 12
1110 tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1111 tBcc %bb.3, 11 /* CC::lt */, killed $cpsr
1114 successors: %bb.2(0x80000000)
1115 liveins: $r0, $r1, $r2
1117 tCMPi8 killed renamable $r2, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
1118 renamable $r2 = t2CSINC $zr, $zr, 0, implicit killed $cpsr
1119 renamable $r3, dead $cpsr = tADDi3 renamable $r0, 3, 14 /* CC::al */, $noreg
1120 renamable $q0 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q0
1121 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1122 renamable $r12 = t2ANDri killed renamable $r2, 1, 14 /* CC::al */, $noreg, $noreg
1123 renamable $r3, dead $cpsr = tSUBi8 killed renamable $r3, 4, 14 /* CC::al */, $noreg
1124 renamable $r2, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1125 renamable $lr = nuw nsw t2ADDrs killed renamable $r2, killed renamable $r3, 19, 14 /* CC::al */, $noreg, $noreg
1126 renamable $r2 = t2RSBri killed renamable $r12, 0, 14 /* CC::al */, $noreg, $noreg
1127 $vpr = VMSR_P0 killed $r2, 14 /* CC::al */, $noreg
1128 VSTR_P0_off killed renamable $vpr, $sp, 0, 14 /* CC::al */, $noreg :: (store (s32) into %stack.0)
1129 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r0
1132 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1133 liveins: $lr, $q0, $r0, $r1
1135 renamable $vpr = VLDR_P0_off $sp, 0, 14 /* CC::al */, $noreg :: (load (s32) from %stack.0)
1136 MVE_VPST 8, implicit $vpr
1137 renamable $vpr = MVE_VCTP32 renamable $r0, 1, killed renamable $vpr, $noreg
1138 renamable $r0, dead $cpsr = tSUBi8 killed renamable $r0, 4, 14 /* CC::al */, $noreg
1139 MVE_VPST 8, implicit $vpr
1140 renamable $r1 = MVE_VSTRWU32_post renamable $q0, killed renamable $r1, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1141 renamable $lr = t2LoopDec killed renamable $lr, 1
1142 t2LoopEnd renamable $lr, %bb.2, implicit-def dead $cpsr
1143 tB %bb.3, 14 /* CC::al */, $noreg
1146 $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
1147 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
1152 tracksRegLiveness: true
1154 - { reg: '$r0', virtual-reg: '' }
1155 - { reg: '$r1', virtual-reg: '' }
1156 - { reg: '$r2', virtual-reg: '' }
1158 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1159 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1160 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1161 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1162 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1163 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1166 value: '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1168 isTargetSpecific: false
1170 ; CHECK-LABEL: name: predvcmp
1172 ; CHECK-NEXT: successors: %bb.1(0x80000000)
1173 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
1174 ; CHECK-NEXT: {{ $}}
1175 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1176 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1177 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
1178 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
1179 ; CHECK-NEXT: tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1180 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
1181 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1182 ; CHECK-NEXT: {{ $}}
1184 ; CHECK-NEXT: successors: %bb.2(0x80000000)
1185 ; CHECK-NEXT: liveins: $r0, $r1, $r2
1186 ; CHECK-NEXT: {{ $}}
1187 ; CHECK-NEXT: renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1188 ; CHECK-NEXT: renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1189 ; CHECK-NEXT: renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1190 ; CHECK-NEXT: renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1191 ; CHECK-NEXT: $lr = MVE_DLSTP_32 killed renamable $r2
1192 ; CHECK-NEXT: {{ $}}
1193 ; CHECK-NEXT: bb.2 (align 4):
1194 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1195 ; CHECK-NEXT: liveins: $lr, $q0, $q1, $q2, $r0, $r1
1196 ; CHECK-NEXT: {{ $}}
1197 ; CHECK-NEXT: MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1198 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1199 ; CHECK-NEXT: renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1200 ; CHECK-NEXT: $lr = MVE_LETP killed renamable $lr, %bb.2
1201 ; CHECK-NEXT: {{ $}}
1203 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1204 ; CHECK-NEXT: {{ $}}
1205 ; CHECK-NEXT: bb.4 (align 8):
1206 ; CHECK-NEXT: CONSTPOOL_ENTRY 0, %const.0, 16
1208 successors: %bb.1(0x80000000)
1209 liveins: $r0, $r1, $r2, $r7, $lr
1211 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1212 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1213 frame-setup CFI_INSTRUCTION offset $lr, -4
1214 frame-setup CFI_INSTRUCTION offset $r7, -8
1215 tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1216 t2IT 11, 8, implicit-def $itstate
1217 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1220 successors: %bb.2(0x80000000)
1221 liveins: $r0, $r1, $r2
1223 renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1224 renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1225 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1226 renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1227 renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1228 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1229 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1230 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1231 renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1232 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r2
1235 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1236 liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1238 renamable $vpr = MVE_VCTP32 renamable $r2, 0, $noreg, $noreg
1239 MVE_VPST 4, implicit $vpr
1240 renamable $vpr = MVE_VCMPs32r renamable $q0, renamable $r1, 11, 1, killed renamable $vpr, $noreg
1241 renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1242 renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1243 renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1244 renamable $lr = t2LoopDec killed renamable $lr, 1, implicit-def dead $cpsr
1245 t2LoopEnd killed renamable $lr, %bb.2, implicit-def dead $cpsr
1246 tB %bb.3, 14 /* CC::al */, $noreg
1249 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1252 CONSTPOOL_ENTRY 0, %const.0, 16
1258 tracksRegLiveness: true
1260 - { reg: '$r0', virtual-reg: '' }
1261 - { reg: '$r1', virtual-reg: '' }
1262 - { reg: '$r2', virtual-reg: '' }
1264 - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
1265 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
1266 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1267 - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
1268 stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
1269 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
1272 value: '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1274 isTargetSpecific: false
1276 ; CHECK-LABEL: name: predvpt
1278 ; CHECK-NEXT: successors: %bb.1(0x80000000)
1279 ; CHECK-NEXT: liveins: $lr, $r0, $r1, $r2, $r7
1280 ; CHECK-NEXT: {{ $}}
1281 ; CHECK-NEXT: frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1282 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
1283 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $lr, -4
1284 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $r7, -8
1285 ; CHECK-NEXT: tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1286 ; CHECK-NEXT: t2IT 11, 8, implicit-def $itstate
1287 ; CHECK-NEXT: frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1288 ; CHECK-NEXT: {{ $}}
1290 ; CHECK-NEXT: successors: %bb.2(0x80000000)
1291 ; CHECK-NEXT: liveins: $r0, $r1, $r2
1292 ; CHECK-NEXT: {{ $}}
1293 ; CHECK-NEXT: renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1294 ; CHECK-NEXT: renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1295 ; CHECK-NEXT: renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1296 ; CHECK-NEXT: renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1297 ; CHECK-NEXT: renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1298 ; CHECK-NEXT: renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1299 ; CHECK-NEXT: renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1300 ; CHECK-NEXT: renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1301 ; CHECK-NEXT: renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1302 ; CHECK-NEXT: {{ $}}
1303 ; CHECK-NEXT: bb.2 (align 4):
1304 ; CHECK-NEXT: successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1305 ; CHECK-NEXT: liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1306 ; CHECK-NEXT: {{ $}}
1307 ; CHECK-NEXT: MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1308 ; CHECK-NEXT: renamable $vpr = MVE_VCTP32 renamable $r2, 1, killed $vpr, $noreg
1309 ; CHECK-NEXT: MVE_VPST 8, implicit $vpr
1310 ; CHECK-NEXT: renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1311 ; CHECK-NEXT: renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1312 ; CHECK-NEXT: renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1313 ; CHECK-NEXT: $lr = t2LEUpdate killed renamable $lr, %bb.2
1314 ; CHECK-NEXT: {{ $}}
1316 ; CHECK-NEXT: frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1317 ; CHECK-NEXT: {{ $}}
1318 ; CHECK-NEXT: bb.4 (align 8):
1319 ; CHECK-NEXT: CONSTPOOL_ENTRY 0, %const.0, 16
1321 successors: %bb.1(0x80000000)
1322 liveins: $r0, $r1, $r2, $r7, $lr
1324 frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
1325 frame-setup CFI_INSTRUCTION def_cfa_offset 8
1326 frame-setup CFI_INSTRUCTION offset $lr, -4
1327 frame-setup CFI_INSTRUCTION offset $r7, -8
1328 tCMPi8 renamable $r2, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
1329 t2IT 11, 8, implicit-def $itstate
1330 frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
1333 successors: %bb.2(0x80000000)
1334 liveins: $r0, $r1, $r2
1336 renamable $r12 = t2LEApcrel %const.0, 14 /* CC::al */, $noreg
1337 renamable $r3, dead $cpsr = nuw tADDi3 renamable $r2, 3, 14 /* CC::al */, $noreg
1338 renamable $r3 = t2BICri killed renamable $r3, 3, 14 /* CC::al */, $noreg, $noreg
1339 renamable $q1 = MVE_VMOVimmi32 0, 0, $noreg, $noreg, undef renamable $q1
1340 renamable $q0 = MVE_VLDRWU32 killed renamable $r12, 0, 0, $noreg, $noreg :: (load (s128) from constant-pool, align 8)
1341 renamable $r12 = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
1342 renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1343 renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $r12, 19, 14 /* CC::al */, $noreg, $noreg
1344 renamable $q2 = MVE_VMOVimmi32 4, 0, $noreg, $noreg, undef renamable $q2
1345 renamable $lr = t2DoLoopStartTP killed renamable $lr, renamable $r2
1348 successors: %bb.2(0x7c000000), %bb.3(0x04000000)
1349 liveins: $lr, $q0, $q1, $q2, $r0, $r1, $r2
1351 MVE_VPTv4s32r 8, renamable $q0, renamable $r1, 11, implicit-def $vpr
1352 renamable $vpr = MVE_VCTP32 renamable $r2, 1, $vpr, $noreg
1353 MVE_VPST 8, implicit $vpr
1354 renamable $r0 = MVE_VSTRWU32_post renamable $q1, killed renamable $r0, 16, 1, killed renamable $vpr, $noreg :: (store (s128), align 4)
1355 renamable $r2, dead $cpsr = tSUBi8 killed renamable $r2, 4, 14 /* CC::al */, $noreg
1356 renamable $q0 = MVE_VADDi32 killed renamable $q0, renamable $q2, 0, $noreg, $noreg, undef renamable $q0
1357 renamable $lr = t2LoopDec killed renamable $lr, 1, implicit-def dead $cpsr
1358 t2LoopEnd killed renamable $lr, %bb.2, implicit-def dead $cpsr
1359 tB %bb.3, 14 /* CC::al */, $noreg
1362 frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1365 CONSTPOOL_ENTRY 0, %const.0, 16