xref: /llvm-project/llvm/test/CodeGen/AArch64/pr51516.mir (revision 401a45c61bac76378735ef94fd507e5fbf763edc)
1# RUN: llc -mtriple=aarch64-unknown-fuchsia -run-pass=greedy -verify-machineinstrs -o - %s | FileCheck %s
2
3# Check that we spill %31 and do not rematerialize it since the use operand
4# of ADDXri is killed by the STRXui in this block.
5
6# CHECK-LABEL: name: test
7# CHECK: bb.17:
8# CHECK:   STRXui
9# CHECK:   LDRXui
10# CHECK: bb.18:
11
12---
13name:            test
14tracksRegLiveness: true
15stack:
16  - { id: 0, type: variable-sized, offset: 0, alignment: 32,
17      stack-id: default }
18body:             |
19  bb.0.entry:
20    successors: %bb.2(0x40000000), %bb.1(0x40000000)
21    liveins: $x0
22
23    %22:gpr64common = COPY $x0
24    CBZW $wzr, %bb.2
25
26  bb.1:
27    successors: %bb.3(0x80000000)
28
29    %1:gpr64 = COPY $xzr
30    B %bb.3
31
32  bb.2:
33    successors: %bb.3(0x80000000)
34
35    $x0 = IMPLICIT_DEF
36    %1:gpr64 = COPY $x0
37
38  bb.3:
39    successors: %bb.4(0x30000000), %bb.5(0x50000000)
40
41    %2:gpr64common = COPY %1
42    CBNZX %1, %bb.5
43    B %bb.4
44
45  bb.4:
46    successors: %bb.5(0x80000000)
47
48    %31:gpr64common = SUBXri $sp, 288, 0
49    $sp = ANDXri %31, 7930
50    %2:gpr64common = COPY $xzr
51
52  bb.5:
53    successors: %bb.6(0x80000000)
54
55    %9:gpr64common = COPY $xzr
56    %35:gpr64sp = ADDXri %2, 32, 0
57    %4:gpr64common = UBFMXri %2, 3, 63
58    %37:gpr64 = MOVi64imm -506381209866536712
59    %38:gpr32 = MOVi32imm -202116109
60    %39:gpr64common = nuw ADDXri %22, 836, 0
61    %41:gpr64common = nuw ADDXri %22, 648, 0
62    STRXui %37, %4, 1
63    STRWui %38, %4, 8
64    %8:gpr64common = UBFMXri %39, 3, 63
65    %7:gpr64common = UBFMXri %41, 3, 63
66    %47:gpr64 = MOVi64imm 0
67
68  bb.6:
69    successors: %bb.8(0x30000000), %bb.7(0x50000000)
70
71    %44:gpr64common = ADDXrr %22, %9
72    %10:gpr64common = ADDXri %44, 648, 0
73    %11:gpr64common = ANDSXri %10, 4098, implicit-def $nzcv
74    Bcc 0, %bb.8, implicit killed $nzcv
75    B %bb.7
76
77  bb.7:
78    successors: %bb.8(0x80000000)
79
80    BL 0, csr_aarch64_aapcs, implicit-def dead $lr
81
82  bb.8:
83    successors: %bb.9(0x04000000), %bb.24(0x7c000000)
84
85    CBNZW $wzr, %bb.24
86    B %bb.9
87
88  bb.9:
89    successors: %bb.10(0x7ffff800), %bb.11(0x00000800)
90
91    %55:gpr64common = ADDXrr %22, %9
92    %56:gpr64sp = ADDXri %55, 648, 0
93    CBZX %11, %bb.10
94    B %bb.11
95
96  bb.10:
97    successors: %bb.11(0x80000000)
98
99    $x0 = ADDXri %55, 648, 0
100    $x2 = IMPLICIT_DEF
101    $w1 = COPY $wzr
102    $x1 = nuw ADDXri %35, 32, 0
103    BL 0, csr_aarch64_aapcs, implicit-def dead $lr
104    %66:gpr64sp = nuw ADDXri %35, 48, 0
105    $x0 = ADDXri %55, 696, 0
106    $x2 = IMPLICIT_DEF
107    $x1 = COPY %66
108
109  bb.11:
110    successors: %bb.15(0x7ffff800), %bb.12(0x00000800)
111
112    CBZX %11, %bb.15
113    B %bb.12
114
115  bb.12:
116    successors: %bb.13(0x00000000), %bb.14(0x80000000)
117
118    CBNZW $wzr, %bb.14
119    B %bb.13
120
121  bb.13:
122    successors:
123
124  bb.14:
125    successors: %bb.18(0x80000000)
126
127    $x1 = COPY %56
128    B %bb.18
129
130  bb.15:
131    successors: %bb.16(0x00000000), %bb.17(0x80000000)
132
133    %76:gpr32 = LDRBBui %7, 0
134    CBZW %76, %bb.17
135    B %bb.16
136
137  bb.16:
138    successors:
139
140    %74:gpr64common = ADDXrr %22, %9
141    %15:gpr64sp = ADDXri %74, 648, 0
142    $x0 = COPY %15
143
144  bb.17:
145    successors: %bb.18(0x80000000)
146
147    STRXui %22, %55, 81
148
149  bb.18:
150    successors: %bb.19(0x80000000), %bb.20(0x00000000)
151
152    %79:gpr32 = LDRBBui %8, 0
153    CBNZW %79, %bb.20
154    B %bb.19
155
156  bb.19:
157    successors: %bb.21(0x80000000), %bb.20(0x00000000)
158
159    %80:gpr32 = MOVi32imm 1
160    CBNZW %80, %bb.21
161    B %bb.20
162
163  bb.20:
164    successors:
165
166    %16:gpr64sp = ADDXri %22, 836, 0
167    $x0 = COPY %16
168
169  bb.21:
170    successors: %bb.24(0x00000000), %bb.22(0x80000000)
171
172    CBZW $wzr, %bb.24
173
174  bb.22:
175    successors: %bb.26(0x80000000)
176
177    B %bb.26
178
179  bb.24:
180    successors: %bb.25(0x04000000), %bb.6(0x7c000000)
181
182    %8:gpr64common = ADDXri %8, 24, 0
183    %7:gpr64common = ADDXri %7, 24, 0
184    CBNZW $wzr, %bb.6
185
186  bb.25:
187    successors: %bb.26(0x80000000)
188
189    %56:gpr64sp = COPY $xzr
190
191  bb.26:
192    successors: %bb.28(0x50000000), %bb.27(0x30000000)
193
194    undef %83.sub_32:gpr64 = MOVi32imm 1172321806
195    STRXui %83, %2, 0
196    CBNZX %1, %bb.28
197    B %bb.27
198
199  bb.27:
200    successors: %bb.28(0x80000000)
201
202    STRXui $xzr, %4, 0
203
204  bb.28:
205    $x0 = COPY %56
206    RET_ReallyLR implicit $x0
207
208...
209