xref: /llvm-project/llvm/test/CodeGen/AArch64/stp-opt-with-renaming-reserved-regs.mir (revision 54732a3e0b0ff7d8cc722887a85abdf599aa41c5)
1# RUN: llc -run-pass=aarch64-ldst-opt -aarch64-load-store-renaming=true -mattr=+reserve-x10 \
2# RUN:     -mattr=+reserve-x11 -mattr=+reserve-x15 -mtriple=arm64-apple-iphoneos -verify-machineinstrs \
3# RUN:     -o - %s | FileCheck --check-prefix=CHECK --check-prefix=PRESERVED %s
4
5# RUN: llc -run-pass=aarch64-ldst-opt -aarch64-load-store-renaming=true -mtriple=arm64-apple-iphoneos \
6# RUN:     -verify-machineinstrs -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOPRES %s
7
8
9# Make sure we do not pick reserved registers. For test1, we would pick x10,
10# and for test2 we would pick x15, both of which are reserved.
11#
12---
13# CHECK-LABEL: name: test1
14# CHECK:       bb.0:
15# CHECK-NEXT:     liveins: $x0, $x1
16# PRESERVED:      $x9, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
17# NOPRES:         $x10, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
18# CHECK:          renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
19# CHECK-NEXT:     STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
20# CHECK-NEXT:     renamable $x8 = ADDXrr $x8, $x8
21# PRESERVED-NEXT: STRXui renamable $x8, renamable $x0, 10 :: (store (s64), align 4)
22# NOPRES-NEXT:    STPXi renamable $x8, killed $x10, renamable $x0, 10 :: (store (s64), align 4)
23# CHECK-NEXT:     RET undef $lr
24
25name:            test1
26alignment:       4
27tracksRegLiveness: true
28liveins:
29  - { reg: '$x0' }
30  - { reg: '$x1' }
31  - { reg: '$x8' }
32frameInfo:
33  maxAlignment:    1
34  maxCallFrameSize: 0
35machineFunctionInfo: {}
36body:             |
37  bb.0:
38    liveins: $x0, $x1
39    renamable $x9, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
40    STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
41    renamable $x9 = LDRXui renamable $x0, 1 :: (load (s64))
42    STRXui renamable $x9, renamable $x0, 100 :: (store (s64), align 4)
43    renamable $x8 = ADDXrr $x8, $x8
44    STRXui renamable $x8, renamable $x0, 10 :: (store (s64), align 4)
45    RET undef $lr
46
47...
48# CHECK-LABEL: name: test2
49# CHECK:       bb.0:
50# CHECK-NEXT:     liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x9, $x10, $x11, $x12, $x13
51# CHECK:          renamable $w19 = LDRWui renamable $x0, 0 :: (load (s64))
52# PRESERVED-NEXT: renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
53# NOPRES-NEXT:    renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
54# CHECK-NEXT:     STRXui killed renamable $x9, renamable $x0, 11 :: (store (s64), align 4)
55# CHECK-NEXT:     renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
56# CHECK-NEXT:     renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
57# PRESERVED-NEXT: STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
58# NOPRES-NEXT:    STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
59# CHECK-NEXT:     STRXui killed renamable $x14, renamable $x0, 200 :: (store (s64), align 4)
60# CHECK-NEXT:     renamable $w8 = ADDWrr $w19, $w19
61# CHECK-NEXT:     STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)
62# CHECK-NEXT:    RET undef $lr
63#
64name:            test2
65alignment:       4
66tracksRegLiveness: true
67liveins:
68  - { reg: '$x0' }
69  - { reg: '$x1' }
70  - { reg: '$x8' }
71frameInfo:
72  maxAlignment:    1
73  maxCallFrameSize: 0
74machineFunctionInfo: {}
75body:             |
76  bb.0:
77    liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x9, $x10, $x11, $x12, $x13
78    renamable $w19 = LDRWui renamable $x0, 0 :: (load (s64))
79    renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
80    STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
81    renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
82    renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
83    STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
84    STRXui renamable killed $x14, renamable $x0, 200 :: (store (s64), align 4)
85    renamable $w8 = ADDWrr $w19, $w19
86    STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)
87    RET undef $lr
88
89...
90---
91