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: $x18, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
17 # NOPRES: $x10, renamable $x8 = LDPXi renamable $x0, 0 :: (load (s64))
18 # CHECK-NEXT: 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: STPXi renamable $x8, killed $x18, 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, $x10, $x11, $x12, $x13
51 # CHECK: renamable $w19 = LDRWui renamable $x0, 0 :: (load (s64))
52 # PRESERVED-NEXT: $x18, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
53 # NOPRES-NEXT: $x18, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
54 # CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
55 # CHECK-NEXT: renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
56 # PRESERVED-NEXT: STPXi renamable $x9, killed $x18, renamable $x0, 10 :: (store (s64), align 4)
57 # NOPRES-NEXT: STPXi renamable $x9, killed $x18, renamable $x0, 10 :: (store (s64), align 4)
58 # CHECK-NEXT: STRXui killed renamable $x14, renamable $x0, 200 :: (store (s64), align 4)
59 # CHECK-NEXT: renamable $w8 = ADDWrr $w19, $w19
60 # CHECK-NEXT: STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)
61 # CHECK-NEXT: RET undef $lr
65 tracksRegLiveness: true
73 machineFunctionInfo: {}
76 liveins: $x0, $x1, $x10, $x11, $x12, $x13
77 renamable $w19 = LDRWui renamable $x0, 0 :: (load (s64))
78 renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load (s64))
79 STRXui renamable killed $x9, renamable $x0, 11 :: (store (s64), align 4)
80 renamable $x9 = LDRXui renamable $x0, 3 :: (load (s64))
81 renamable $x14 = LDRXui renamable $x0, 5 :: (load (s64))
82 STRXui renamable $x9, renamable $x0, 10 :: (store (s64), align 4)
83 STRXui renamable killed $x14, renamable $x0, 200 :: (store (s64), align 4)
84 renamable $w8 = ADDWrr $w19, $w19
85 STRWui renamable $w8, renamable $x0, 100 :: (store (s64), align 4)