[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / LowOverheadLoops / vpt-blocks.mir
blob84fd81098cd98a5ea8e43d403465ca3cfc202644
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
4 --- |
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) {
9   entry:
10     %cmp9 = icmp sgt i32 %n, 0
11     %0 = add i32 %n, 3
12     %1 = lshr i32 %0, 2
13     %2 = shl nuw i32 %1, 2
14     %3 = add i32 %2, -4
15     %4 = lshr i32 %3, 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)
22     br label %vector.body
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)
29     %9 = sub i32 %7, 4
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
46     ret void
47   }
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.
51     entry:
52       unreachable
53     vector.ph:
54       unreachable
55     vector.body:
56       unreachable
57     for.cond.cleanup:
58       unreachable
59   }
61   define arm_aapcs_vfpcc void @different_vcpt_operand(ptr nocapture %A, i32 %n, i32 %x) {
62     ; Intentionally left blank - see MIR sequence below.
63     entry:
64       unreachable
65     vector.ph:
66       unreachable
67     vector.body:
68       unreachable
69     for.cond.cleanup:
70       unreachable
71   }
73   define arm_aapcs_vfpcc void @else_vcpt(ptr nocapture %data, i32 %N, i32 %T) {
74   entry:
75     %cmp9 = icmp sgt i32 %N, 0
76     %0 = add i32 %N, 3
77     %1 = lshr i32 %0, 2
78     %2 = shl nuw i32 %1, 2
79     %3 = add i32 %2, -4
80     %4 = lshr i32 %3, 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)
87     br label %vector.body
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)
94     %9 = sub i32 %7, 4
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
111     ret void
112   }
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.
116     entry:
117       unreachable
118     vector.ph:
119       unreachable
120     vector.body:
121       unreachable
122     for.cond.cleanup:
123       unreachable
124   }
126   define arm_aapcs_vfpcc void @vctp_before_vpt(ptr nocapture %A, i32 %n, i32 %x) {
127     ; Intentionally left blank - see MIR sequence below.
128     entry:
129       unreachable
130     vector.ph:
131       unreachable
132     vector.body:
133       unreachable
134     for.cond.cleanup:
135       unreachable
136   }
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.
140     entry:
141       unreachable
142     vector.ph:
143       unreachable
144     vector.body:
145       unreachable
146     for.cond.cleanup:
147       unreachable
148   }
150   define arm_aapcs_vfpcc void @emptyblock() {
151     unreachable
152   }
153   define arm_aapcs_vfpcc void @predvcmp() {
154     unreachable
155   }
156   define arm_aapcs_vfpcc void @predvpt() {
157     unreachable
158   }
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)
167 name:            vpt_block
168 alignment:       2
169 exposesReturnsTwice: false
170 legalized:       false
171 regBankSelected: false
172 selected:        false
173 failedISel:      false
174 tracksRegLiveness: true
175 hasWinCFI:       false
176 registers:       []
177 liveins:
178   - { reg: '$r0', virtual-reg: '' }
179   - { reg: '$r1', virtual-reg: '' }
180   - { reg: '$r2', virtual-reg: '' }
181 frameInfo:
182   isFrameAddressTaken: false
183   isReturnAddressTaken: false
184   hasStackMap:     false
185   hasPatchPoint:   false
186   stackSize:       8
187   offsetAdjustment: 0
188   maxAlignment:    4
189   adjustsStack:    false
190   hasCalls:        false
191   stackProtector:  ''
192   maxCallFrameSize: 0
193   cvBytesOfCalleeSavedRegisters: 0
194   hasOpaqueSPAdjustment: false
195   hasVAStart:      false
196   hasMustTailInVarArgFunc: false
197   localFrameSize:  0
198   savePoint:       ''
199   restorePoint:    ''
200 fixedStack:      []
201 stack:
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: '' }
208 callSites:       []
209 constants:       []
210 machineFunctionInfo: {}
211 body:             |
212   ; CHECK-LABEL: name: vpt_block
213   ; CHECK: bb.0.entry:
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
239   bb.0.entry:
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
251   bb.1.vector.ph:
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
264   bb.2.vector.body:
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
285 alignment:       2
286 exposesReturnsTwice: false
287 legalized:       false
288 regBankSelected: false
289 selected:        false
290 failedISel:      false
291 tracksRegLiveness: true
292 hasWinCFI:       false
293 registers:       []
294 liveins:
295   - { reg: '$r0', virtual-reg: '' }
296   - { reg: '$r1', virtual-reg: '' }
297   - { reg: '$r2', virtual-reg: '' }
298 frameInfo:
299   isFrameAddressTaken: false
300   isReturnAddressTaken: false
301   hasStackMap:     false
302   hasPatchPoint:   false
303   stackSize:       8
304   offsetAdjustment: 0
305   maxAlignment:    4
306   adjustsStack:    false
307   hasCalls:        false
308   stackProtector:  ''
309   maxCallFrameSize: 0
310   cvBytesOfCalleeSavedRegisters: 0
311   hasOpaqueSPAdjustment: false
312   hasVAStart:      false
313   hasMustTailInVarArgFunc: false
314   localFrameSize:  0
315   savePoint:       ''
316   restorePoint:    ''
317 fixedStack:      []
318 stack:
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: '' }
325 callSites:       []
326 constants:       []
327 machineFunctionInfo: {}
328 body:             |
329   ; CHECK-LABEL: name: different_vcpt_reaching_def
330   ; CHECK: bb.0.entry:
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
365   ;
366   ; Tests that secondary VCTPs are refused when their operand's reaching definition is not the same as the main
367   ; VCTP's.
368   ;
369   bb.0.entry:
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
381   bb.1.vector.ph:
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
394   bb.2.vector.body:
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
416 alignment:       2
417 exposesReturnsTwice: false
418 legalized:       false
419 regBankSelected: false
420 selected:        false
421 failedISel:      false
422 tracksRegLiveness: true
423 hasWinCFI:       false
424 registers:       []
425 liveins:
426   - { reg: '$r0', virtual-reg: '' }
427   - { reg: '$r1', virtual-reg: '' }
428   - { reg: '$r2', virtual-reg: '' }
429 frameInfo:
430   isFrameAddressTaken: false
431   isReturnAddressTaken: false
432   hasStackMap:     false
433   hasPatchPoint:   false
434   stackSize:       8
435   offsetAdjustment: 0
436   maxAlignment:    4
437   adjustsStack:    false
438   hasCalls:        false
439   stackProtector:  ''
440   maxCallFrameSize: 0
441   cvBytesOfCalleeSavedRegisters: 0
442   hasOpaqueSPAdjustment: false
443   hasVAStart:      false
444   hasMustTailInVarArgFunc: false
445   localFrameSize:  0
446   savePoint:       ''
447   restorePoint:    ''
448 fixedStack:      []
449 stack:
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: '' }
456 callSites:       []
457 constants:       []
458 machineFunctionInfo: {}
459 body:             |
460   ; CHECK-LABEL: name: different_vcpt_operand
461   ; CHECK: bb.0.entry:
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
495   ;
496   ; Tests that secondary VCTPs are refused when their operand is not the same register as the main VCTP's.
497   ;
498   bb.0.entry:
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
510   bb.1.vector.ph:
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
523   bb.2.vector.body:
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
543 name:            else_vcpt
544 alignment:       2
545 exposesReturnsTwice: false
546 legalized:       false
547 regBankSelected: false
548 selected:        false
549 failedISel:      false
550 tracksRegLiveness: true
551 hasWinCFI:       false
552 registers:       []
553 liveins:
554   - { reg: '$r0', virtual-reg: '' }
555   - { reg: '$r1', virtual-reg: '' }
556   - { reg: '$r2', virtual-reg: '' }
557 frameInfo:
558   isFrameAddressTaken: false
559   isReturnAddressTaken: false
560   hasStackMap:     false
561   hasPatchPoint:   false
562   stackSize:       8
563   offsetAdjustment: 0
564   maxAlignment:    4
565   adjustsStack:    false
566   hasCalls:        false
567   stackProtector:  ''
568   maxCallFrameSize: 0
569   cvBytesOfCalleeSavedRegisters: 0
570   hasOpaqueSPAdjustment: false
571   hasVAStart:      false
572   hasMustTailInVarArgFunc: false
573   localFrameSize:  0
574   savePoint:       ''
575   restorePoint:    ''
576 fixedStack:      []
577 stack:
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: '' }
584 callSites:       []
585 constants:       []
586 machineFunctionInfo: {}
587 body:             |
588   ; CHECK-LABEL: name: else_vcpt
589   ; CHECK: bb.0.entry:
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
615   ;
616   ; Test including a else-predicated VCTP.
617   ;
618   bb.0.entry:
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
630   bb.1.vector.ph:
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
643   bb.2.vector.body:
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
664 alignment:       2
665 exposesReturnsTwice: false
666 legalized:       false
667 regBankSelected: false
668 selected:        false
669 failedISel:      false
670 tracksRegLiveness: true
671 hasWinCFI:       false
672 registers:       []
673 liveins:
674   - { reg: '$r0', virtual-reg: '' }
675   - { reg: '$r1', virtual-reg: '' }
676   - { reg: '$r2', virtual-reg: '' }
677 frameInfo:
678   isFrameAddressTaken: false
679   isReturnAddressTaken: false
680   hasStackMap:     false
681   hasPatchPoint:   false
682   stackSize:       8
683   offsetAdjustment: 0
684   maxAlignment:    4
685   adjustsStack:    false
686   hasCalls:        false
687   stackProtector:  ''
688   maxCallFrameSize: 0
689   cvBytesOfCalleeSavedRegisters: 0
690   hasOpaqueSPAdjustment: false
691   hasVAStart:      false
692   hasMustTailInVarArgFunc: false
693   localFrameSize:  0
694   savePoint:       ''
695   restorePoint:    ''
696 fixedStack:      []
697 stack:
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: '' }
704 callSites:       []
705 constants:       []
706 machineFunctionInfo: {}
707 body:             |
708   ; CHECK-LABEL: name: loop_invariant_vpt_operands
709   ; CHECK: bb.0.entry:
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
735   bb.0.entry:
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
746   bb.1.vector.ph:
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
759   bb.2.vector.body:
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
780 alignment:       2
781 exposesReturnsTwice: false
782 legalized:       false
783 regBankSelected: false
784 selected:        false
785 failedISel:      false
786 tracksRegLiveness: true
787 hasWinCFI:       false
788 registers:       []
789 liveins:
790   - { reg: '$r0', virtual-reg: '' }
791   - { reg: '$r1', virtual-reg: '' }
792   - { reg: '$r2', virtual-reg: '' }
793 frameInfo:
794   isFrameAddressTaken: false
795   isReturnAddressTaken: false
796   hasStackMap:     false
797   hasPatchPoint:   false
798   stackSize:       8
799   offsetAdjustment: 0
800   maxAlignment:    4
801   adjustsStack:    false
802   hasCalls:        false
803   stackProtector:  ''
804   maxCallFrameSize: 0
805   cvBytesOfCalleeSavedRegisters: 0
806   hasOpaqueSPAdjustment: false
807   hasVAStart:      false
808   hasMustTailInVarArgFunc: false
809   localFrameSize:  0
810   savePoint:       ''
811   restorePoint:    ''
812 fixedStack:      []
813 stack:
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: '' }
820 callSites:       []
821 constants:       []
822 machineFunctionInfo: {}
823 body:             |
824   ; CHECK-LABEL: name: vctp_before_vpt
825   ; CHECK: bb.0.entry:
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
849   bb.0.entry:
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
860   bb.1.vector.ph:
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
873   bb.2.vector.body:
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
890 alignment:       2
891 exposesReturnsTwice: false
892 legalized:       false
893 regBankSelected: false
894 selected:        false
895 failedISel:      false
896 tracksRegLiveness: true
897 hasWinCFI:       false
898 registers:       []
899 liveins:
900   - { reg: '$r0', virtual-reg: '' }
901   - { reg: '$r1', virtual-reg: '' }
902   - { reg: '$r2', virtual-reg: '' }
903 frameInfo:
904   isFrameAddressTaken: false
905   isReturnAddressTaken: false
906   hasStackMap:     false
907   hasPatchPoint:   false
908   stackSize:       8
909   offsetAdjustment: 0
910   maxAlignment:    4
911   adjustsStack:    false
912   hasCalls:        false
913   stackProtector:  ''
914   maxCallFrameSize: 0
915   cvBytesOfCalleeSavedRegisters: 0
916   hasOpaqueSPAdjustment: false
917   hasVAStart:      false
918   hasMustTailInVarArgFunc: false
919   localFrameSize:  0
920   savePoint:       ''
921   restorePoint:    ''
922 fixedStack:      []
923 stack:
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: '' }
930 callSites:       []
931 constants:       []
932 machineFunctionInfo: {}
933 body:             |
934   ; CHECK-LABEL: name: vpt_load_vctp_store
935   ; CHECK: bb.0.entry:
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
966   ;
967   ; This shouldn't be tail-predicated because the VLDR isn't predicated on the VCTP.
968   ;
969   bb.0.entry:
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
980   bb.1.vector.ph:
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
993   bb.2.vector.body:
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
1010 name:            emptyblock
1011 tracksRegLiveness: true
1012 liveins:
1013   - { reg: '$r0', virtual-reg: '' }
1014   - { reg: '$r1', virtual-reg: '' }
1015   - { reg: '$r2', virtual-reg: '' }
1016 stack:
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: '' }
1026 body:             |
1027   ; CHECK-LABEL: name: emptyblock
1028   ; CHECK: bb.0:
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
1039   ; CHECK: bb.1:
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
1057   ; CHECK: bb.3:
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
1060   bb.0:
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
1073   bb.1:
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
1091   bb.2 (align 4):
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
1105   bb.3:
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
1110 name:            predvcmp
1111 alignment:       8
1112 tracksRegLiveness: true
1113 liveins:
1114   - { reg: '$r0', virtual-reg: '' }
1115   - { reg: '$r1', virtual-reg: '' }
1116   - { reg: '$r2', virtual-reg: '' }
1117 stack:
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: '' }
1124 constants:
1125   - id:              0
1126     value:           '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1127     alignment:       8
1128     isTargetSpecific: false
1129 body:             |
1130   ; CHECK-LABEL: name: predvcmp
1131   ; CHECK: bb.0:
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
1141   ; CHECK: bb.1:
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
1156   ; CHECK: bb.3:
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
1160   bb.0:
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
1172   bb.1:
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
1187   bb.2 (align 4):
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
1201   bb.3:
1202     frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1204   bb.4 (align 8):
1205     CONSTPOOL_ENTRY 0, %const.0, 16
1209 name:            predvpt
1210 alignment:       8
1211 tracksRegLiveness: true
1212 liveins:
1213   - { reg: '$r0', virtual-reg: '' }
1214   - { reg: '$r1', virtual-reg: '' }
1215   - { reg: '$r2', virtual-reg: '' }
1216 stack:
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: '' }
1223 constants:
1224   - id:              0
1225     value:           '<4 x i32> <i32 0, i32 1, i32 2, i32 3>'
1226     alignment:       8
1227     isTargetSpecific: false
1228 body:             |
1229   ; CHECK-LABEL: name: predvpt
1230   ; CHECK: bb.0:
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
1240   ; CHECK: bb.1:
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
1262   ; CHECK: bb.3:
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
1266   bb.0:
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
1278   bb.1:
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
1293   bb.2 (align 4):
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
1307   bb.3:
1308     frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
1310   bb.4 (align 8):
1311     CONSTPOOL_ENTRY 0, %const.0, 16