• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:      $x12, renamable $x8 = LDPXi renamable $x0, 0 :: (load 8)
17# NOPRES:         $x10, renamable $x8 = LDPXi renamable $x0, 0 :: (load 8)
18# CHECK-NEXT:     renamable $x9 = LDRXui renamable $x0, 1 :: (load 8)
19# CHECK-NEXT:     STRXui renamable $x9, renamable $x0, 100 :: (store 8, align 4)
20# CHECK-NEXT:     renamable $x8 = ADDXrr $x8, $x8
21# PRESERVED-NEXT: STPXi renamable $x8, killed $x12, renamable $x0, 10 :: (store 8, align 4)
22# NOPRES-NEXT:    STPXi renamable $x8, killed $x10, renamable $x0, 10 :: (store 8, 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 8)
40    STRXui renamable killed $x9, renamable $x0, 11 :: (store 8, align 4)
41    renamable $x9 = LDRXui renamable $x0, 1 :: (load 8)
42    STRXui renamable $x9, renamable $x0, 100 :: (store 8, align 4)
43    renamable $x8 = ADDXrr $x8, $x8
44    STRXui renamable $x8, renamable $x0, 10 :: (store 8, align 4)
45    RET undef $lr
46
47...
48# CHECK-LABEL: name: test2
49# CHECK:       bb.0:
50# CHECK-NEXT:     liveins: $x0, $x1, $x10, $x11, $x12, $x13
51# CHECK:          renamable $w19 = LDRWui renamable $x0, 0 :: (load 8)
52# PRESERVED-NEXT: $x18, renamable $x8 = LDPXi renamable $x0, 1 :: (load 8)
53# NOPRES-NEXT:    $x15, renamable $x8 = LDPXi renamable $x0, 1 :: (load 8)
54# CHECK-NEXT:     renamable $x9 = LDRXui renamable $x0, 3 :: (load 8)
55# CHECK-NEXT:     renamable $x14 = LDRXui renamable $x0, 5 :: (load 8)
56# PRESERVED-NEXT: STPXi renamable $x9, killed $x18, renamable $x0, 10 :: (store 8, align 4)
57# NOPRES-NEXT:    STPXi renamable $x9, killed $x15, renamable $x0, 10 :: (store 8, align 4)
58# CHECK-NEXT:     STRXui killed renamable $x14, renamable $x0, 200 :: (store 8, align 4)
59# CHECK-NEXT:     renamable $w8 = ADDWrr $w19, $w19
60# CHECK-NEXT:     STRWui renamable $w8, renamable $x0, 100 :: (store 8, align 4)
61# CHECK-NEXT:     RET undef $lr
62#
63name:            test2
64alignment:       4
65tracksRegLiveness: true
66liveins:
67  - { reg: '$x0' }
68  - { reg: '$x1' }
69  - { reg: '$x8' }
70frameInfo:
71  maxAlignment:    1
72  maxCallFrameSize: 0
73machineFunctionInfo: {}
74body:             |
75  bb.0:
76    liveins: $x0, $x1, $x10, $x11, $x12, $x13
77    renamable $w19 = LDRWui renamable $x0, 0 :: (load 8)
78    renamable $x9, renamable $x8 = LDPXi renamable $x0, 1 :: (load 8)
79    STRXui renamable killed $x9, renamable $x0, 11 :: (store 8, align 4)
80    renamable $x9 = LDRXui renamable $x0, 3 :: (load 8)
81    renamable $x14 = LDRXui renamable $x0, 5 :: (load 8)
82    STRXui renamable $x9, renamable $x0, 10 :: (store 8, align 4)
83    STRXui renamable killed $x14, renamable $x0, 200 :: (store 8, align 4)
84    renamable $w8 = ADDWrr $w19, $w19
85    STRWui renamable $w8, renamable $x0, 100 :: (store 8, align 4)
86    RET undef $lr
87
88...
89---
90