xref: /llvm-project/llvm/test/CodeGen/Thumb2/LowOverheadLoops/vcmp-vpst-combination-across-blocks.mir (revision 59c6bd156cc8b42758ce90909615748e21c6eee2)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -run-pass=arm-low-overhead-loops %s -o - --verify-machineinstrs | FileCheck %s
3
4--- |
5  define void @combine_previous() {
6  while.end6:
7    ret void
8  }
9
10  define void @combine_middle() {
11  while.end6:
12    ret void
13  }
14
15  define void @combine_last() {
16  while.end6:
17    ret void
18  }
19
20  define void @combine_kill_flags() {
21  while.end6:
22    ret void
23  }
24
25  define void @no_combination_diff_reg_value() {
26  while.end6:
27    ret void
28  }
29
30  define void @no_combination_vcmp_already_merged() {
31  while.end6:
32    ret void
33  }
34
35...
36---
37name:            combine_previous
38alignment:       8
39exposesReturnsTwice: false
40legalized:       false
41regBankSelected: false
42selected:        false
43failedISel:      false
44tracksRegLiveness: true
45hasWinCFI:       false
46registers:       []
47liveins:
48  - { reg: '$r0', virtual-reg: '' }
49  - { reg: '$r1', virtual-reg: '' }
50  - { reg: '$r2', virtual-reg: '' }
51frameInfo:
52fixedStack:      []
53stack:
54  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
55      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
56      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
57  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
58      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
59      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
60callSites:       []
61debugValueSubstitutions: []
62constants:
63  - id:              0
64    value:           float 0xC7EFFFFFE0000000
65    alignment:       4
66    isTargetSpecific: false
67machineFunctionInfo: {}
68body:             |
69  ; CHECK-LABEL: name: combine_previous
70  ; CHECK: bb.0:
71  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
72  ; CHECK-NEXT:   liveins: $r0, $r1
73  ; CHECK-NEXT: {{  $}}
74  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
75  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
76  ; CHECK-NEXT: {{  $}}
77  ; CHECK-NEXT: bb.1 (align 4):
78  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
79  ; CHECK-NEXT:   liveins: $lr, $q0, $r0
80  ; CHECK-NEXT: {{  $}}
81  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
82  ; CHECK-NEXT:   renamable $q0 = MVE_VORR renamable $q1, renamable $q1, 0, $noreg, $noreg, killed renamable $q0
83  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q1, renamable $q0, 12, implicit-def $vpr
84  ; CHECK-NEXT:   renamable $q0 = MVE_VORR killed renamable $q1, killed renamable $q1, 1, killed renamable $vpr, $noreg, killed renamable $q0
85  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
86  ; CHECK-NEXT: {{  $}}
87  ; CHECK-NEXT: bb.2:
88  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
89  ; CHECK-NEXT: {{  $}}
90  ; CHECK-NEXT: bb.3 (align 4):
91  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
92  bb.0:
93    successors: %bb.6(0x80000000)
94    liveins: $r0, $r1, $r2
95
96    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
97    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
98    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
99    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
100    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
101    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
102    $lr = t2DoLoopStart renamable $lr
103
104  bb.6 (align 4):
105    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
106    liveins: $lr, $q0, $r0, $r1, $r2
107
108    renamable $lr = t2LoopDec killed renamable $lr, 1
109    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
110    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
111    MVE_VPST 8, implicit $vpr
112    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
113    MVE_VPST 4, implicit $vpr
114    renamable $q0 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, renamable $q0
115    renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 1, killed renamable $vpr, $noreg
116    MVE_VPST 8, implicit $vpr
117    renamable $q0 = MVE_VORR killed renamable $q1, renamable $q1, 1, killed renamable $vpr, $noreg, killed renamable $q0
118    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
119    tB %bb.8, 14 /* CC::al */, $noreg
120
121  bb.8:
122    liveins: $r2, $r12, $q0
123    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
124
125  bb.9 (align 4):
126    CONSTPOOL_ENTRY 0, %const.0, 4
127
128...
129---
130name:            combine_middle
131alignment:       8
132exposesReturnsTwice: false
133legalized:       false
134regBankSelected: false
135selected:        false
136failedISel:      false
137tracksRegLiveness: true
138hasWinCFI:       false
139registers:       []
140liveins:
141  - { reg: '$r0', virtual-reg: '' }
142  - { reg: '$r1', virtual-reg: '' }
143  - { reg: '$r2', virtual-reg: '' }
144frameInfo:
145fixedStack:      []
146stack:
147  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
148      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
149      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
150  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
151      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
152      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
153callSites:       []
154debugValueSubstitutions: []
155constants:
156  - id:              0
157    value:           float 0xC7EFFFFFE0000000
158    alignment:       4
159    isTargetSpecific: false
160machineFunctionInfo: {}
161body:             |
162  ; CHECK-LABEL: name: combine_middle
163  ; CHECK: bb.0:
164  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
165  ; CHECK-NEXT:   liveins: $q2, $r0, $r1
166  ; CHECK-NEXT: {{  $}}
167  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
168  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
169  ; CHECK-NEXT: {{  $}}
170  ; CHECK-NEXT: bb.1 (align 4):
171  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
172  ; CHECK-NEXT:   liveins: $lr, $q0, $q2, $r0
173  ; CHECK-NEXT: {{  $}}
174  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
175  ; CHECK-NEXT:   renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 0, $noreg, $noreg, killed renamable $q2
176  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q1, renamable $q0, 12, implicit-def $vpr
177  ; CHECK-NEXT:   renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
178  ; CHECK-NEXT:   MVE_VPST 8, implicit $vpr
179  ; CHECK-NEXT:   dead renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, killed renamable $vpr, $noreg, killed renamable $q1
180  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
181  ; CHECK-NEXT: {{  $}}
182  ; CHECK-NEXT: bb.2:
183  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
184  ; CHECK-NEXT: {{  $}}
185  ; CHECK-NEXT: bb.3 (align 4):
186  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
187  bb.0:
188    successors: %bb.6(0x80000000)
189    liveins: $r0, $r1, $r2
190
191    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
192    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
193    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
194    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
195    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
196    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
197    $lr = t2DoLoopStart renamable $lr
198
199  bb.6 (align 4):
200    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
201    liveins: $lr, $q0, $r0, $r1, $r2, $q2
202
203    renamable $lr = t2LoopDec killed renamable $lr, 1
204    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
205    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
206    MVE_VPST 2, implicit $vpr
207    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
208    renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
209    renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 1, killed renamable $vpr, $noreg
210    MVE_VPST 8, implicit $vpr
211    renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
212    MVE_VPST 8, implicit $vpr
213    renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, renamable $vpr, $noreg, renamable $q1
214    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
215    tB %bb.8, 14 /* CC::al */, $noreg
216
217  bb.8:
218    liveins: $r2, $r12, $q0
219    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
220
221  bb.9 (align 4):
222    CONSTPOOL_ENTRY 0, %const.0, 4
223
224...
225---
226name:            combine_last
227alignment:       8
228exposesReturnsTwice: false
229legalized:       false
230regBankSelected: false
231selected:        false
232failedISel:      false
233tracksRegLiveness: true
234hasWinCFI:       false
235registers:       []
236liveins:
237  - { reg: '$r0', virtual-reg: '' }
238  - { reg: '$r1', virtual-reg: '' }
239  - { reg: '$r2', virtual-reg: '' }
240frameInfo:
241fixedStack:      []
242stack:
243  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
244      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
245      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
246  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
247      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
248      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
249callSites:       []
250debugValueSubstitutions: []
251constants:
252  - id:              0
253    value:           float 0xC7EFFFFFE0000000
254    alignment:       4
255    isTargetSpecific: false
256machineFunctionInfo: {}
257body:             |
258  ; CHECK-LABEL: name: combine_last
259  ; CHECK: bb.0:
260  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
261  ; CHECK-NEXT:   liveins: $q2, $r0, $r1
262  ; CHECK-NEXT: {{  $}}
263  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
264  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
265  ; CHECK-NEXT: {{  $}}
266  ; CHECK-NEXT: bb.1 (align 4):
267  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
268  ; CHECK-NEXT:   liveins: $lr, $q0, $q2, $r0
269  ; CHECK-NEXT: {{  $}}
270  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
271  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q1, renamable $q0, 12, implicit-def $vpr
272  ; CHECK-NEXT:   renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, killed renamable $vpr, $noreg, killed renamable $q2
273  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q2, renamable $q1, 12, implicit-def $vpr
274  ; CHECK-NEXT:   dead renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, killed renamable $vpr, $noreg, killed renamable $q1
275  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
276  ; CHECK-NEXT: {{  $}}
277  ; CHECK-NEXT: bb.2:
278  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
279  ; CHECK-NEXT: {{  $}}
280  ; CHECK-NEXT: bb.3 (align 4):
281  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
282  bb.0:
283    successors: %bb.6(0x80000000)
284    liveins: $r0, $r1, $r2
285
286    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
287    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
288    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
289    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
290    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
291    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
292    $lr = t2DoLoopStart renamable $lr
293
294  bb.6 (align 4):
295    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
296    liveins: $lr, $q0, $r0, $r1, $r2, $q2
297
298    renamable $lr = t2LoopDec killed renamable $lr, 1
299    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
300    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
301    MVE_VPST 8, implicit $vpr
302    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
303    MVE_VPST 2, implicit $vpr
304    renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 1, killed renamable $vpr, $noreg
305    renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
306    renamable $vpr = MVE_VCMPf32 renamable $q2, renamable $q1, 12, 1, killed renamable $vpr, $noreg
307    MVE_VPST 8, implicit $vpr
308    renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, renamable $vpr, $noreg, renamable $q1
309    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
310    tB %bb.8, 14 /* CC::al */, $noreg
311
312  bb.8:
313    liveins: $r2, $r12, $q0
314    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
315
316  bb.9 (align 4):
317    CONSTPOOL_ENTRY 0, %const.0, 4
318
319...
320---
321name:            combine_kill_flags
322alignment:       8
323exposesReturnsTwice: false
324legalized:       false
325regBankSelected: false
326selected:        false
327failedISel:      false
328tracksRegLiveness: true
329hasWinCFI:       false
330registers:       []
331liveins:
332  - { reg: '$r0', virtual-reg: '' }
333  - { reg: '$r1', virtual-reg: '' }
334  - { reg: '$r2', virtual-reg: '' }
335frameInfo:
336fixedStack:      []
337stack:
338  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
339      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
340      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
341  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
342      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
343      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
344callSites:       []
345debugValueSubstitutions: []
346constants:
347  - id:              0
348    value:           float 0xC7EFFFFFE0000000
349    alignment:       4
350    isTargetSpecific: false
351machineFunctionInfo: {}
352body:             |
353  ; CHECK-LABEL: name: combine_kill_flags
354  ; CHECK: bb.0:
355  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
356  ; CHECK-NEXT:   liveins: $q2, $r0, $r1
357  ; CHECK-NEXT: {{  $}}
358  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
359  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
360  ; CHECK-NEXT: {{  $}}
361  ; CHECK-NEXT: bb.1 (align 4):
362  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
363  ; CHECK-NEXT:   liveins: $lr, $q0, $q2, $r0
364  ; CHECK-NEXT: {{  $}}
365  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
366  ; CHECK-NEXT:   renamable $q2 = MVE_VORR killed renamable $q2, renamable $q1, 0, $noreg, $noreg, killed renamable $q2
367  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q0, killed renamable $q1, 12, implicit-def $vpr
368  ; CHECK-NEXT:   renamable $q0 = MVE_VORR killed renamable $q0, killed renamable $q0, 1, killed renamable $vpr, $noreg, killed renamable $q0
369  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
370  ; CHECK-NEXT: {{  $}}
371  ; CHECK-NEXT: bb.2:
372  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
373  ; CHECK-NEXT: {{  $}}
374  ; CHECK-NEXT: bb.3 (align 4):
375  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
376  bb.0:
377    successors: %bb.6(0x80000000)
378    liveins: $r0, $r1, $r2
379
380    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
381    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
382    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
383    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
384    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
385    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
386    $lr = t2DoLoopStart renamable $lr
387
388  bb.6 (align 4):
389    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
390    liveins: $lr, $q0, $r0, $r1, $r2, $q2
391
392    renamable $lr = t2LoopDec killed renamable $lr, 1
393    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
394    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
395    MVE_VPST 2, implicit $vpr
396    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
397    renamable $vpr = MVE_VCMPf32 renamable $q0, renamable $q1, 12, 1, killed renamable $vpr, $noreg
398    renamable $q2 = MVE_VORR renamable $q2, killed renamable $q1, 0, $noreg, $noreg, killed renamable $q2
399    MVE_VPST 8, implicit $vpr
400    renamable $q0 = MVE_VORR renamable $q0, renamable $q0, 1, renamable $vpr, $noreg, killed renamable $q0
401    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
402    tB %bb.8, 14 /* CC::al */, $noreg
403
404  bb.8:
405    liveins: $r2, $r12, $q0
406    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
407
408  bb.9 (align 4):
409    CONSTPOOL_ENTRY 0, %const.0, 4
410
411...
412---
413name:            no_combination_diff_reg_value
414alignment:       8
415exposesReturnsTwice: false
416legalized:       false
417regBankSelected: false
418selected:        false
419failedISel:      false
420tracksRegLiveness: true
421hasWinCFI:       false
422registers:       []
423liveins:
424  - { reg: '$r0', virtual-reg: '' }
425  - { reg: '$r1', virtual-reg: '' }
426  - { reg: '$r2', virtual-reg: '' }
427frameInfo:
428fixedStack:      []
429stack:
430  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
431      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
432      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
433  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
434      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
435      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
436callSites:       []
437debugValueSubstitutions: []
438constants:
439  - id:              0
440    value:           float 0xC7EFFFFFE0000000
441    alignment:       4
442    isTargetSpecific: false
443machineFunctionInfo: {}
444body:             |
445  ; CHECK-LABEL: name: no_combination_diff_reg_value
446  ; CHECK: bb.0:
447  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
448  ; CHECK-NEXT:   liveins: $r0, $r1
449  ; CHECK-NEXT: {{  $}}
450  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
451  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
452  ; CHECK-NEXT: {{  $}}
453  ; CHECK-NEXT: bb.1 (align 4):
454  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
455  ; CHECK-NEXT:   liveins: $lr, $q0, $r0
456  ; CHECK-NEXT: {{  $}}
457  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
458  ; CHECK-NEXT:   renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 0, $noreg, $noreg, killed renamable $q1
459  ; CHECK-NEXT:   renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 0, killed $noreg, $noreg
460  ; CHECK-NEXT:   renamable $q0 = MVE_VORR renamable $q1, renamable $q1, 0, $noreg, $noreg, killed renamable $q0
461  ; CHECK-NEXT:   MVE_VPST 8, implicit $vpr
462  ; CHECK-NEXT:   renamable $q0 = MVE_VORR killed renamable $q1, killed renamable $q1, 1, killed renamable $vpr, $noreg, killed renamable $q0
463  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
464  ; CHECK-NEXT: {{  $}}
465  ; CHECK-NEXT: bb.2:
466  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
467  ; CHECK-NEXT: {{  $}}
468  ; CHECK-NEXT: bb.3 (align 4):
469  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
470  bb.0:
471    successors: %bb.6(0x80000000)
472    liveins: $r0, $r1, $r2
473
474    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
475    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
476    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
477    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
478    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
479    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
480    $lr = t2DoLoopStart renamable $lr
481
482  bb.6 (align 4):
483    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
484    liveins: $lr, $q0, $r0, $r1, $r2
485
486    renamable $lr = t2LoopDec killed renamable $lr, 1
487    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
488    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
489    MVE_VPST 8, implicit $vpr
490    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
491    MVE_VPST 4, implicit $vpr
492    renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, renamable $vpr, $noreg, renamable $q1
493    renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 1, killed renamable $vpr, $noreg
494    renamable $q0 = MVE_VORR renamable $q1, renamable $q1, 0, $noreg, $noreg, killed renamable $q0
495    MVE_VPST 8, implicit $vpr
496    renamable $q0 = MVE_VORR killed renamable $q1, renamable $q1, 1, killed renamable $vpr, $noreg, killed renamable $q0
497    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
498    tB %bb.8, 14 /* CC::al */, $noreg
499
500  bb.8:
501    liveins: $r2, $r12, $q0
502    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
503
504  bb.9 (align 4):
505    CONSTPOOL_ENTRY 0, %const.0, 4
506
507...
508---
509name:            no_combination_vcmp_already_merged
510alignment:       8
511exposesReturnsTwice: false
512legalized:       false
513regBankSelected: false
514selected:        false
515failedISel:      false
516tracksRegLiveness: true
517hasWinCFI:       false
518registers:       []
519liveins:
520  - { reg: '$r0', virtual-reg: '' }
521  - { reg: '$r1', virtual-reg: '' }
522  - { reg: '$r2', virtual-reg: '' }
523frameInfo:
524fixedStack:      []
525stack:
526  - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4,
527      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false,
528      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
529  - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4,
530      stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true,
531      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
532callSites:       []
533debugValueSubstitutions: []
534constants:
535  - id:              0
536    value:           float 0xC7EFFFFFE0000000
537    alignment:       4
538    isTargetSpecific: false
539machineFunctionInfo: {}
540body:             |
541  ; CHECK-LABEL: name: no_combination_vcmp_already_merged
542  ; CHECK: bb.0:
543  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
544  ; CHECK-NEXT:   liveins: $q2, $r0, $r1
545  ; CHECK-NEXT: {{  $}}
546  ; CHECK-NEXT:   renamable $q0 = MVE_VDUP32 renamable $r1, 0, $noreg, $noreg, undef renamable $q0
547  ; CHECK-NEXT:   $lr = MVE_DLSTP_32 killed renamable $r1
548  ; CHECK-NEXT: {{  $}}
549  ; CHECK-NEXT: bb.1 (align 4):
550  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
551  ; CHECK-NEXT:   liveins: $lr, $q0, $q2, $r0
552  ; CHECK-NEXT: {{  $}}
553  ; CHECK-NEXT:   renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 0, $noreg, $noreg
554  ; CHECK-NEXT:   MVE_VPTv4f32 8, renamable $q1, renamable $q0, 12, implicit-def $vpr
555  ; CHECK-NEXT:   renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
556  ; CHECK-NEXT:   MVE_VPST 8, implicit $vpr
557  ; CHECK-NEXT:   dead renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, killed renamable $vpr, $noreg, killed renamable $q1
558  ; CHECK-NEXT:   $lr = MVE_LETP killed renamable $lr, %bb.1
559  ; CHECK-NEXT: {{  $}}
560  ; CHECK-NEXT: bb.2:
561  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
562  ; CHECK-NEXT: {{  $}}
563  ; CHECK-NEXT: bb.3 (align 4):
564  ; CHECK-NEXT:   CONSTPOOL_ENTRY 0, %const.0, 4
565  bb.0:
566    successors: %bb.6(0x80000000)
567    liveins: $r0, $r1, $r2
568
569    renamable $r3, dead $cpsr = nuw nsw tADDi3 renamable $r1, 3, 14 /* CC::al */, $noreg
570    renamable $q0 = MVE_VDUP32 killed renamable $r1, 0, $noreg, $noreg, undef renamable $q0
571    renamable $r3 = t2ANDri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
572    renamable $lr = t2SUBri killed renamable $r3, 4, 14 /* CC::al */, $noreg, $noreg
573    renamable $r3, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
574    renamable $lr = nuw nsw t2ADDrs killed renamable $r3, killed renamable $lr, 19, 14 /* CC::al */, $noreg, $noreg
575    $lr = t2DoLoopStart renamable $lr
576
577  bb.6 (align 4):
578    successors: %bb.6(0x7c000000), %bb.8(0x04000000)
579    liveins: $lr, $q0, $r0, $r1, $r2, $q2
580
581    renamable $lr = t2LoopDec killed renamable $lr, 1
582    renamable $vpr = MVE_VCTP32 renamable $r1, 0, $noreg, $noreg
583    renamable $r1, dead $cpsr = tSUBi8 killed renamable $r1, 4, 14 /* CC::al */, $noreg
584    MVE_VPST 8, implicit $vpr
585    renamable $r0, renamable $q1 = MVE_VLDRWU32_post killed renamable $r0, 16, 1, renamable $vpr, $noreg
586    MVE_VPST 4, implicit $vpr
587    renamable $vpr = MVE_VCMPf32 renamable $q1, renamable $q0, 12, 1, killed renamable $vpr, $noreg
588    renamable $q2 = MVE_VORR renamable $q1, renamable $q1, 1, renamable $vpr, $noreg, killed renamable $q2
589    MVE_VPST 8, implicit $vpr
590    renamable $q1 = MVE_VORR killed renamable $q1, renamable $q0, 1, renamable $vpr, $noreg, renamable $q1
591    t2LoopEnd renamable $lr, %bb.6, implicit-def dead $cpsr
592    tB %bb.8, 14 /* CC::al */, $noreg
593
594  bb.8:
595    liveins: $r2, $r12, $q0
596    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
597
598  bb.9 (align 4):
599    CONSTPOOL_ENTRY 0, %const.0, 4
600
601...
602