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
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
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.
13 # CHECK-LABEL: name: test1
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
27 tracksRegLiveness: true
35 machineFunctionInfo: {}
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)
48 # CHECK-LABEL: name: test2
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
66 tracksRegLiveness: true
74 machineFunctionInfo: {}
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)