1 # RUN: llc -run-pass=aarch64-ldst-opt -mtriple=arm64-apple-iphoneos -verify-machineinstrs -aarch64-load-store-renaming=true -o - %s | FileCheck %s
2 # RUN: llc -run-pass=aarch64-ldst-opt -mtriple=arm64-apple-iphoneos -verify-machineinstrs -aarch64-load-store-renaming=false -o - %s | FileCheck --check-prefix=NO-RENAME %s
10 # CHECK-LABEL: name: test1
12 # CHECK-NEXT: liveins: $x0, $x1
13 # CHECK: $x10, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
14 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
15 # CHECK-NEXT: STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
16 # CHECK-NEXT: renamable $x8 = ADDXrr $x8, $x8
17 # CHECK-NEXT: STPXi renamable $x8, killed $x10, renamable $x0, 10 :: (store (s64), align 4)
18 # CHECK-NEXT: RET undef $lr
22 tracksRegLiveness: true
30 machineFunctionInfo: {}
34 renamable $x9, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
35 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
36 renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
37 STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
38 renamable $x8 = ADDXrr $x8, $x8
39 STRXui renamable $x8, renamable $x0, 10 :: (store (s64), align 4)
44 # CHECK-LABEL: name: test2
46 # CHECK-NEXT: liveins: $x0, $x9, $x1
48 # CHECK: $x10, renamable $x8 = LDPXi renamable $x9, 0 :: (load (s64))
49 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
50 # CHECK-NEXT: STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
51 # CHECK-NEXT: renamable $x8 = ADDXrr $x8, $x8
52 # CHECK-NEXT: STPXi renamable $x8, killed $x10, renamable $x0, 10 :: (store (s64), align 4)
53 # CHECK-NEXT: RET undef $lr
57 tracksRegLiveness: true
65 machineFunctionInfo: {}
68 liveins: $x0, $x9, $x1
69 renamable $x9, renamable $x8 = LDPXi renamable $x9, 0 :: (load (s64))
70 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
71 renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
72 STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
73 renamable $x8 = ADDXrr $x8, $x8
74 STRXui renamable $x8, renamable $x0, 10 :: (store (s64), align 4)
79 # MOVK has a tied operand and we currently do not rename across tied defs.
81 # CHECK-NEXT: liveins: $x0
83 # CHECK: renamable $x8 = MRS 58880
84 # CHECK-NEXT: renamable $x8 = MOVZXi 15309, 0
85 # CHECK-NEXT: renamable $x8 = MOVKXi renamable $x8, 26239, 16
86 # CHECK-NEXT: STRXui renamable $x8, renamable $x0, 0, implicit killed $x8 :: (store (s64))
87 # CHECK-NEXT: renamable $x8 = MRS 55840
88 # CHECK-NEXT: STRXui killed renamable $x8, killed renamable $x0, 1, implicit killed $x8 :: (store (s64))
89 # CHECK-NEXT: RET undef $lr
93 tracksRegLiveness: true
98 machineFunctionInfo: {}
103 renamable $x8 = MRS 58880, implicit-def $nzcv
104 renamable $x8 = MOVZXi 15309, 0
105 renamable $x8 = MOVKXi renamable $x8, 26239, 16
106 STRXui renamable $x8, renamable $x0, 0, implicit killed $x8 :: (store (s64))
107 renamable $x8 = MRS 55840, implicit-def $nzcv
108 STRXui killed renamable $x8, renamable killed $x0, 1, implicit killed $x8 :: (store (s64))
113 # CHECK-LABEL: name: test4
115 # CHECK-NEXT: liveins: $x0, $x1
117 # CHECK: $x9 = MRS 58880
118 # CHECK-NEXT: renamable $x8 = MRS 55840
119 # CHECK-NEXT: STPXi $x9, killed renamable $x8, killed renamable $x0, 0 :: (store (s32))
120 # CHECK-NEXT: RET undef $lr
124 tracksRegLiveness: true
132 machineFunctionInfo: {}
137 renamable $x8 = MRS 58880, implicit-def $nzcv
138 STRXui renamable $x8, renamable $x0, 0, implicit killed $x8 :: (store (s32))
139 renamable $x8 = MRS 55840, implicit-def $nzcv
140 STRXui killed renamable $x8, renamable killed $x0, 1, implicit killed $x8 :: (store (s32))
145 # CHECK-LABEL: name: test5
147 # CHECK-NEXT: liveins: $x0, $x1
149 # CHECK: $x9 = MRS 58880
150 # CHECK-NEXT: renamable $x8 = MRS 55840
151 # CHECK-NEXT: STPWi $w9, killed renamable $w8, killed renamable $x0, 0 :: (store (s32))
152 # CHECK-NEXT: RET undef $lr
156 tracksRegLiveness: true
164 machineFunctionInfo: {}
169 renamable $x8 = MRS 58880, implicit-def $nzcv
170 STRWui renamable $w8, renamable $x0, 0, implicit killed $x8 :: (store (s32))
171 renamable $x8 = MRS 55840, implicit-def $nzcv
172 STRWui killed renamable $w8, renamable killed $x0, 1, implicit killed $x8 :: (store (s32))
177 # CHECK-LABEL: name: test6
179 # CHECK: liveins: $x0, $x1, $q3
181 # CHECK: renamable $q9 = LDRQui $x0, 0 :: (load (s128))
182 # CHECK-NEXT: renamable $q9 = XTNv8i16 renamable $q9, killed renamable $q3
183 # CHECK-NEXT: STRQui renamable $q9, renamable $x0, 11 :: (store (s128), align 4)
184 # CHECK-NEXT: renamable $q9 = FADDv2f64 renamable $q9, renamable $q9, implicit $fpcr
185 # CHECK-NEXT: STRQui renamable $q9, renamable $x0, 10 :: (store (s128), align 4)
186 # CHECK-NEXT: RET undef $lr
188 # XTN has a tied use-def.
191 tracksRegLiveness: true
200 machineFunctionInfo: {}
203 liveins: $x0, $x1, $q3
204 renamable $q9 = LDRQui $x0, 0 :: (load (s128))
205 renamable $q9 = XTNv8i16 renamable $q9, killed renamable $q3
206 STRQui renamable $q9, renamable $x0, 11 :: (store (s128), align 4)
207 renamable $q9 = FADDv2f64 renamable $q9, renamable $q9, implicit $fpcr
208 STRQui renamable $q9, renamable $x0, 10 :: (store (s128), align 4)
213 # Currently we do not rename across frame-setup instructions.
214 # CHECK-LABEL: name: test7
216 # CHECK-NEXT: liveins: $x0, $x1
218 # CHECK: $sp = frame-setup SUBXri $sp, 64, 0
219 # CHECK-NEXT: renamable $x9 = frame-setup LDRXui renamable $x0, 0 :: (load (s64))
220 # CHECK-NEXT: STRXui renamable $x9, $x0, 10 :: (store (s64), align 4)
221 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
222 # CHECK-NEXT: STRXui renamable $x9, $x0, 11 :: (store (s64), align 4)
223 # CHECK-NEXT: RET undef $lr
227 tracksRegLiveness: true
239 - { id: 0, type: spill-slot, offset: -48, size: 16, alignment: 16 }
240 - { id: 1, type: spill-slot, offset: -64, size: 16, alignment: 16 }
241 machineFunctionInfo: {}
245 $sp = frame-setup SUBXri $sp, 64, 0
246 renamable $x9 = frame-setup LDRXui renamable $x0, 0 :: (load (s64))
247 STRXui renamable $x9, $x0, 10 :: (store (s64), align 4)
248 renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
249 STRXui renamable $x9, $x0, 11 :: (store (s64), align 4)
253 # CHECK-LABEL: name: test8
255 # CHECK-NEXT: liveins: $x0, $x1
257 # CHECK: renamable $x8 = MRS 58880
258 # CHECK-NEXT: $w9 = ORRWrs $wzr, killed renamable $w8, 0, implicit-def $x9
259 # CHECK-NEXT: renamable $x8 = MRS 55840
260 # CHECK-NEXT: STPWi $w9, killed renamable $w8, killed renamable $x0, 0 :: (store (s32))
261 # CHECK-NEXT: RET undef $lr
265 tracksRegLiveness: true
273 machineFunctionInfo: {}
278 renamable $x8 = MRS 58880, implicit-def $nzcv
279 renamable $w8 = ORRWrs $wzr, killed renamable $w8, 0, implicit-def $x8
280 STRWui renamable $w8, renamable $x0, 0, implicit killed $x8 :: (store (s32))
281 renamable $x8 = MRS 55840, implicit-def $nzcv
282 STRWui killed renamable $w8, renamable killed $x0, 1, implicit killed $x8 :: (store (s32))
287 # The reg class returned for $q9 contains only the first 16 Q registers.
288 # TODO: Can we check that all instructions that require renaming also support
289 # the second 16 Q registers?
290 # CHECK-LABEL: name: test9
292 # CHECK: liveins: $x0, $x1, $q0, $q1, $q2, $q3, $q4, $q5, $q6, $q7
294 # CHECK: renamable $q9 = LDRQui $x0, 0 :: (load (s128))
295 # CHECK-NEXT: STRQui killed renamable $q9, renamable $x0, 10 :: (store (s128), align 4)
296 # CHECK: renamable $q9 = LDRQui $x0, 1 :: (load (s128))
297 # CHECK-NEXT: STRQui renamable $q9, renamable $x0, 11 :: (store (s128), align 4)
298 # CHECK-NEXT: RET undef $lr
302 tracksRegLiveness: true
311 machineFunctionInfo: {}
314 liveins: $x0, $x1, $q0, $q1, $q2, $q3, $q4, $q5, $q6, $q7
315 renamable $q9 = LDRQui $x0, 0 :: (load (s128))
316 STRQui renamable killed $q9, renamable $x0, 10 :: (store (s128), align 4)
317 renamable $q9 = LDRQui $x0, 1 :: (load (s128))
318 STRQui renamable $q9, renamable $x0, 11 :: (store (s128), align 4)
323 # The livein $q7 is killed early, so we can re-use it for renaming.
324 # CHECK-LABEL: name: test10
326 # CHECK: liveins: $x0, $x1, $q0, $q1, $q2, $q3, $q4, $q5, $q6, $q7
328 # CHECK: renamable $q7 = FADDv2f64 renamable $q7, renamable $q7, implicit $fpcr
329 # CHECK-NEXT: STRQui killed renamable $q7, renamable $x0, 100 :: (store (s128), align 4)
330 # CHECK-NEXT: $q7, renamable $q9 = LDPQi $x0, 0 :: (load (s128))
331 # CHECK-NEXT: STPQi killed renamable $q9, killed $q7, renamable $x0, 10 :: (store (s128), align 4)
332 # CHECK-NEXT: RET undef $lr
336 tracksRegLiveness: true
345 machineFunctionInfo: {}
348 liveins: $x0, $x1, $q0, $q1, $q2, $q3, $q4, $q5, $q6, $q7
349 renamable $q7 = FADDv2f64 renamable $q7, renamable $q7, implicit $fpcr
350 STRQui renamable killed $q7, renamable $x0, 100 :: (store (s128), align 4)
351 renamable $q9 = LDRQui $x0, 0 :: (load (s128))
352 STRQui renamable killed $q9, renamable $x0, 11 :: (store (s128), align 4)
353 renamable $q9 = LDRQui $x0, 1 :: (load (s128))
354 STRQui renamable killed $q9, renamable $x0, 10 :: (store (s128), align 4)
359 # Make sure we do not use any registers that are defined between paired candidates
360 # ($x14 in this example)
361 # CHECK-LABEL: name: test11
363 # CHECK-NEXT: liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x11, $x12, $x13
365 # CHECK: renamable $w10 = LDRWui renamable $x0, 0 :: (load (s64))
366 # CHECK-NEXT: renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
367 # CHECK-NEXT: STRXui killed renamable $x9, renamable $x0, 11 :: (store (s64), align 4)
368 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
369 # CHECK-NEXT: renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
370 # CHECK-NEXT: STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
371 # CHECK-NEXT: STRXui killed renamable $x14, renamable $x0, 200 :: (store (s64), align 4)
372 # CHECK-NEXT: renamable $w8 = ADDWrr $w10, $w10
373 # CHECK-NEXT: STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)
374 # CHECK-NEXT: RET undef $lr
378 tracksRegLiveness: true
386 machineFunctionInfo: {}
389 liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x11, $x12, $x13
390 renamable $w10 = LDRWui renamable $x0, 0 :: (load (s64))
391 renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
392 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
393 renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
394 renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
395 STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
396 STRXui renamable killed $x14, renamable $x0, 200 :: (store (s64), align 4)
397 renamable $w8 = ADDWrr $w10, $w10
398 STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)
403 # Check that we correctly deal with killed registers in stores that get merged forward,
404 # which extends the live range of the first store operand.
405 # CHECK-LABEL: name: test12
407 # CHECK-NEXT: liveins: $x0, $x1
409 # CHECK: renamable $x10 = LDRXui renamable $x0, 0 :: (load (s64))
410 # CHECK-NEXT: $x11, renamable $x8 = LDPXi renamable $x0, 3 :: (load (s64))
411 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
412 # CHECK-NEXT: renamable $x8 = ADDXrr $x8, $x8
413 # CHECK-NEXT: STPXi renamable $x8, killed $x11, renamable $x0, 10 :: (store (s64), align 4)
414 # CHECK-NEXT: STPXi killed renamable $x10, renamable $x9, renamable $x0, 20 :: (store (s64), align 4)
415 # CHECK-NEXT: RET undef $lr
419 tracksRegLiveness: true
427 machineFunctionInfo: {}
431 renamable $x10 = LDRXui renamable $x0, 0 :: (load (s64))
432 STRXui renamable killed $x10, renamable $x0, 20 :: (store (s64), align 4)
433 renamable $x9, renamable $x8 = LDPXi renamable $x0, 3 :: (load (s64))
434 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
435 renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
436 renamable $x8 = ADDXrr $x8, $x8
437 STRXui renamable $x8, renamable $x0, 10 :: (store (s64), align 4)
438 STRXui renamable $x9, renamable $x0, 21 :: (store (s64), align 4)
443 # Make sure we do not use any registers that are defined between def to rename and the first
444 # paired store. ($x14 in this example)
445 # CHECK-LABEL: name: test13
447 # CHECK-NEXT: liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x10, $x11, $x12, $x13
448 # CHECK: renamable $x9, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
449 # CHECK-NEXT: renamable $x14 = LDRXui renamable $x0, 4 :: (load (s64))
450 # CHECK-NEXT: STRXui killed renamable $x14, renamable $x0, 100 :: (store (s64), align 4)
451 # CHECK-NEXT: STRXui killed renamable $x9, renamable $x0, 11 :: (store (s64), align 4)
452 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
453 # CHECK-NEXT: STRXui renamable $x9, renamable $x0, 10 :: (store (s64))
454 # CHECK-NEXT: RET undef $lr
458 tracksRegLiveness: true
466 machineFunctionInfo: {}
469 liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x10, $x11, $x12, $x13
470 renamable $x9, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
471 renamable $x14 = LDRXui renamable $x0, 4 :: (load (s64))
472 STRXui renamable killed $x14, renamable $x0, 100 :: (store (s64), align 4)
473 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
474 renamable $x9 = LDRXui renamable $x0, 2 :: (load (s64))
475 STRXui renamable $x9, renamable $x0, 10 :: (store (s64))
479 # Make sure we do not rename if pseudo-defs. Noop pseudo instructions like KILL
480 # may lead to a missing definition of the rename register.
482 # CHECK-LABEL: name: test14_pseudo
484 # CHECK-NEXT: liveins: $w8, $fp, $w25
485 # CHECK: renamable $w8 = KILL killed renamable $w8, implicit-def $x8
486 # CHECK-NEXT: STURXi killed renamable $x8, $fp, -40 :: (store (s64))
487 # CHECK-NEXT: $w8 = ORRWrs $wzr, killed $w25, 0, implicit-def $x8
488 # CHECK-NEXT: STURXi killed renamable $x8, $fp, -32 :: (store (s64))
489 # CHECK-NEXT: RET undef $lr
493 tracksRegLiveness: true
501 machineFunctionInfo: {}
504 liveins: $w8, $fp, $w25
506 renamable $w8 = KILL killed renamable $w8, implicit-def $x8
507 STURXi killed renamable $x8, $fp, -40 :: (store (s64))
508 $w8 = ORRWrs $wzr, killed $w25, 0, implicit-def $x8
509 STURXi killed renamable $x8, $fp, -32 :: (store (s64))
513 # Make sure we do not pick a register marked as undef for renaming.
515 # CHECK-LABEL: name: test15_undef_op
517 # CHECK-NEXT: liveins: $x0, $x1, $x8
518 # CHECK: renamable $x10, $x11 = LDPXi renamable $x0, 0 :: (load (s64))
519 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
520 # CHECK-NEXT: STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
521 # CHECK-NEXT: renamable $x10 = ADDXrr $x10, $x10
522 # CHECK-NEXT: STPXi renamable $x10, killed $x11, renamable $x0, 10 :: (store (s64), align 4)
523 # CHECK-NEXT: RET undef $lr
525 name: test15_undef_op
527 tracksRegLiveness: true
535 machineFunctionInfo: {}
538 liveins: $x0, $x1, $x8
539 renamable $x10, renamable $x9 = LDPXi renamable $x0, 0 :: (load (s64))
540 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
541 renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
542 STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
543 renamable $x10 = ADDXrr $x10, $x10
544 STRXui renamable $x10, renamable $x0, 10 :: (store (s64), align 4)
549 # During ISel, the order of load/store pairs can be optimized and changed
550 # so that only a single register is used. Due to this register reuse, LDP/STPs
551 # are not generated. These tests check that LDP/STPs will be generated after
552 # register renaming is attempted.
556 # CHECK-LABEL: name: ldst32
557 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 32)
558 # CHECK-NEXT: STPQi killed renamable $q0, killed $q1, $sp, 2 :: (store (s128), align 32)
559 # CHECK-NEXT: RET undef $lr
563 tracksRegLiveness: true
571 renamable $q0 = LDRQui $sp, 1 :: (load 16)
572 STRQui killed renamable $q0, $sp, 3 :: (store 16, basealign 32)
573 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 32)
574 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 32)
580 # CHECK-LABEL: name: ldst64
581 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 64)
582 # CHECK-NEXT: STPQi killed renamable $q0, killed $q1, $sp, 2 :: (store (s128), align 64)
583 # CHECK-NEXT: RET undef $lr
587 tracksRegLiveness: true
595 renamable $q0 = LDRQui $sp, 1 :: (load 16)
596 STRQui killed renamable $q0, $sp, 3 :: (store 16, basealign 64)
597 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 64)
598 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 64)
604 # CHECK-LABEL: name: ldst128
605 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 128)
606 # CHECK-NEXT: STPQi killed renamable $q0, killed $q1, $sp, 2 :: (store (s128), align 128)
607 # CHECK-NEXT: RET undef $lr
611 tracksRegLiveness: true
619 renamable $q0 = LDRQui $sp, 1 :: (load 16)
620 STRQui killed renamable $q0, $sp, 3 :: (store 16, basealign 128)
621 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 128)
622 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 128)
628 # CHECK-LABEL: name: ldst-no-reg-available
629 # CHECK: liveins: $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10
630 # CHECK: renamable $q0 = LDRQui $sp, 1 :: (load (s128))
631 # CHECK-NEXT: STRQui killed renamable $q0, $sp, 3 :: (store (s128), align 32)
632 # CHECK-NEXT: renamable $q0 = LDRQui $sp, 0 :: (load (s128), align 32)
633 # CHECK-NEXT: STRQui killed renamable $q0, $sp, 2 :: (store (s128), align 32)
634 # CHECK-NEXT: RET undef $lr
636 name: ldst-no-reg-available
638 tracksRegLiveness: true
646 liveins: $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10
647 renamable $q0 = LDRQui $sp, 1 :: (load 16)
648 STRQui killed renamable $q0, $sp, 3 :: (store 16, basealign 32)
649 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 32)
650 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 32)
656 # CHECK-LABEL: name: ldst-basereg-modified
657 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 32)
658 # CHECK-NEXT: STRQui killed $q1, $sp, 3 :: (store (s128), align 32)
659 # CHECK-NEXT: $sp = ADDXri $sp, 16, 0
660 # CHECK-NEXT: STRQui killed renamable $q0, $sp, 2 :: (store (s128), align 32)
661 # CHECK-NEXT: RET undef $lr
663 name: ldst-basereg-modified
665 tracksRegLiveness: true
673 renamable $q0 = LDRQui $sp, 1 :: (load 16)
674 STRQui killed renamable $q0, $sp, 3 :: (store 16, basealign 32)
675 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 32)
676 $sp = ADDXri $sp, 16, 0
677 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 32)
683 # CHECK-LABEL: name: ldr-dest-reg-implicit-killed
684 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 32)
685 # CHECK-NEXT: STPSi $s1, renamable $s0, $sp, 9 :: (store (s32))
686 # CHECK-NEXT: RET undef $lr
688 name: ldr-dest-reg-implicit-killed
690 tracksRegLiveness: true
698 renamable $q0 = LDRQui $sp, 1 :: (load 16)
699 STRSui renamable $s0, $sp, 9, implicit killed $q0 :: (store (s32))
700 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 32)
701 STRSui renamable $s0, $sp, 10, implicit killed $q0 :: (store (s32))
707 # CHECK-LABEL: name: bundled
708 # CHECK: renamable $q0, $q1 = LDPQi $sp, 0 :: (load (s128)), (load (s128), align 32)
709 # CHECK-NEXT: STPSi $s1, renamable $s0, $sp, 9 :: (store (s32))
710 # CHECK-NEXT: BUNDLE implicit-def $z3
711 # CHECK-NEXT: $z3 = MOVPRFX_ZZ $z19
712 # CHECK-NEXT: $z3 = FMUL_ZPmZ_S renamable $p0, killed $z3, renamable $z16
714 # CHECK-NEXT: RET undef $lr
718 tracksRegLiveness: true
726 liveins: $z3, $z19, $p0, $z16
727 renamable $q0 = LDRQui $sp, 1 :: (load 16)
728 STRSui renamable $s0, $sp, 9, implicit killed $q0 :: (store (s32))
729 BUNDLE implicit-def $z3, implicit-def $q3, implicit-def $d3, implicit-def $s3, implicit-def $h3, implicit-def $b3, implicit $z19, implicit $p0, implicit $z16 {
730 $z3 = MOVPRFX_ZZ $z19
731 $z3 = FMUL_ZPmZ_S renamable $p0, killed $z3, renamable $z16
733 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 32)
734 STRSui renamable $s0, $sp, 10, implicit killed $q0 :: (store (s32))
739 # CHECK-LABEL: name: bundled_use
740 # CHECK: renamable $q0 = LDRQui $sp, 1
741 # CHECK-NEXT: STRQui renamable $q0, $sp, 3, implicit-def $z0
742 # CHECK-NEXT: BUNDLE implicit-def $z3
743 # CHECK-NEXT: $z3 = MOVPRFX_ZZ $z19
744 # CHECK-NEXT: $z3 = FMUL_ZPmZ_S renamable $p0, killed $z3, renamable $z0
746 # CHECK-NEXT: renamable $q0 = LDRQui $sp, 0
747 # CHECK-NEXT: STRQui killed renamable $q0, $sp, 2
748 # CHECK-NEXT: RET undef $lr
752 tracksRegLiveness: true
760 liveins: $z3, $z19, $p0, $z16
761 renamable $q0 = LDRQui $sp, 1 :: (load 16)
762 STRQui renamable $q0, $sp, 3, implicit-def $z0 :: (store 16, basealign 128)
763 BUNDLE implicit-def $z3, implicit-def $q3, implicit-def $d3, implicit-def $s3, implicit-def $h3, implicit-def $b3, implicit $z19, implicit $p0, implicit $z0, implicit $q0 {
764 $z3 = MOVPRFX_ZZ $z19
765 $z3 = FMUL_ZPmZ_S renamable $p0, killed $z3, renamable $z0
767 renamable $q0 = LDRQui $sp, 0 :: (load 16, align 128)
768 STRQui killed renamable $q0, $sp, 2 :: (store 16, align 128)
774 # CHECK-LABEL: name: bundle_at_limit
775 # CHECK: renamable $x3, $x4 = LDPXi $sp, 1 :: (load (s64))
777 name: bundle_at_limit
779 tracksRegLiveness: true
787 liveins: $x0, $x1, $x2, $z0, $p0, $z3, $z19
788 renamable $x3 = LDRXui $sp, 2 :: (load (s64))
789 $x2 = ADDXri renamable $x2, 1, 0
790 $x2 = ADDXri renamable $x3, 1, 0
791 $x2 = ADDXri renamable $x2, 1, 0
792 $x2 = ADDXri renamable $x2, 1, 0
793 $x2 = ADDXri renamable $x2, 1, 0
794 $x2 = ADDXri renamable $x2, 1, 0
795 $x2 = ADDXri renamable $x2, 1, 0
796 $x2 = ADDXri renamable $x2, 1, 0
797 $x2 = ADDXri renamable $x2, 1, 0
798 $x2 = ADDXri renamable $x2, 1, 0
799 $x2 = ADDXri renamable $x2, 1, 0
800 $x2 = ADDXri renamable $x2, 1, 0
801 $x2 = ADDXri renamable $x2, 1, 0
802 $x2 = ADDXri renamable $x2, 1, 0
803 $x2 = ADDXri renamable $x2, 1, 0
804 $x2 = ADDXri renamable $x2, 1, 0
805 $x2 = ADDXri renamable $x3, 1, 0
806 BUNDLE implicit-def $z3, implicit-def $q3, implicit-def $d3, implicit-def $s3, implicit-def $h3, implicit-def $b3, implicit $z19, implicit $p0, implicit $z0 {
807 $z3 = MOVPRFX_ZZ $z19
808 $z3 = FMUL_ZPmZ_S renamable $p0, killed $z3, renamable $z0
810 $x2 = ADDXri renamable $x3, 1, 0
811 renamable $x3 = LDRXui $sp, 1 :: (load (s64))