xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/frame-20.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Like frame-03.ll, but for z13.  In this case we have 16 more registers
2*9880d681SAndroid Build Coastguard Worker; available.
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; This function should require all FPRs, but no other spill slots.
7*9880d681SAndroid Build Coastguard Worker; We need to save and restore 8 of the 16 FPRs, so the frame size
8*9880d681SAndroid Build Coastguard Worker; should be exactly 160 + 8 * 8 = 224.  The CFA offset is 160
9*9880d681SAndroid Build Coastguard Worker; (the caller-allocated part of the frame) + 224.
10*9880d681SAndroid Build Coastguard Workerdefine void @f1(double *%ptr) {
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
12*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -224
13*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 384
14*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 216(%r15)
15*9880d681SAndroid Build Coastguard Worker; CHECK: std %f9, 208(%r15)
16*9880d681SAndroid Build Coastguard Worker; CHECK: std %f10, 200(%r15)
17*9880d681SAndroid Build Coastguard Worker; CHECK: std %f11, 192(%r15)
18*9880d681SAndroid Build Coastguard Worker; CHECK: std %f12, 184(%r15)
19*9880d681SAndroid Build Coastguard Worker; CHECK: std %f13, 176(%r15)
20*9880d681SAndroid Build Coastguard Worker; CHECK: std %f14, 168(%r15)
21*9880d681SAndroid Build Coastguard Worker; CHECK: std %f15, 160(%r15)
22*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168
23*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f9, -176
24*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f10, -184
25*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f11, -192
26*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f12, -200
27*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f13, -208
28*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f14, -216
29*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f15, -224
30*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f0, 0(%r2)
31*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f7, 0(%r2)
32*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f8, 0(%r2)
33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f15, 0(%r2)
34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v16, 0(%r2)
35*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v23, 0(%r2)
36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v24, 0(%r2)
37*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v31, 0(%r2)
38*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 216(%r15)
39*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f9, 208(%r15)
40*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f10, 200(%r15)
41*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f11, 192(%r15)
42*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f12, 184(%r15)
43*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f13, 176(%r15)
44*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f14, 168(%r15)
45*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f15, 160(%r15)
46*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 224
47*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
48*9880d681SAndroid Build Coastguard Worker  %l0 = load volatile double, double *%ptr
49*9880d681SAndroid Build Coastguard Worker  %l1 = load volatile double, double *%ptr
50*9880d681SAndroid Build Coastguard Worker  %l2 = load volatile double, double *%ptr
51*9880d681SAndroid Build Coastguard Worker  %l3 = load volatile double, double *%ptr
52*9880d681SAndroid Build Coastguard Worker  %l4 = load volatile double, double *%ptr
53*9880d681SAndroid Build Coastguard Worker  %l5 = load volatile double, double *%ptr
54*9880d681SAndroid Build Coastguard Worker  %l6 = load volatile double, double *%ptr
55*9880d681SAndroid Build Coastguard Worker  %l7 = load volatile double, double *%ptr
56*9880d681SAndroid Build Coastguard Worker  %l8 = load volatile double, double *%ptr
57*9880d681SAndroid Build Coastguard Worker  %l9 = load volatile double, double *%ptr
58*9880d681SAndroid Build Coastguard Worker  %l10 = load volatile double, double *%ptr
59*9880d681SAndroid Build Coastguard Worker  %l11 = load volatile double, double *%ptr
60*9880d681SAndroid Build Coastguard Worker  %l12 = load volatile double, double *%ptr
61*9880d681SAndroid Build Coastguard Worker  %l13 = load volatile double, double *%ptr
62*9880d681SAndroid Build Coastguard Worker  %l14 = load volatile double, double *%ptr
63*9880d681SAndroid Build Coastguard Worker  %l15 = load volatile double, double *%ptr
64*9880d681SAndroid Build Coastguard Worker  %l16 = load volatile double, double *%ptr
65*9880d681SAndroid Build Coastguard Worker  %l17 = load volatile double, double *%ptr
66*9880d681SAndroid Build Coastguard Worker  %l18 = load volatile double, double *%ptr
67*9880d681SAndroid Build Coastguard Worker  %l19 = load volatile double, double *%ptr
68*9880d681SAndroid Build Coastguard Worker  %l20 = load volatile double, double *%ptr
69*9880d681SAndroid Build Coastguard Worker  %l21 = load volatile double, double *%ptr
70*9880d681SAndroid Build Coastguard Worker  %l22 = load volatile double, double *%ptr
71*9880d681SAndroid Build Coastguard Worker  %l23 = load volatile double, double *%ptr
72*9880d681SAndroid Build Coastguard Worker  %l24 = load volatile double, double *%ptr
73*9880d681SAndroid Build Coastguard Worker  %l25 = load volatile double, double *%ptr
74*9880d681SAndroid Build Coastguard Worker  %l26 = load volatile double, double *%ptr
75*9880d681SAndroid Build Coastguard Worker  %l27 = load volatile double, double *%ptr
76*9880d681SAndroid Build Coastguard Worker  %l28 = load volatile double, double *%ptr
77*9880d681SAndroid Build Coastguard Worker  %l29 = load volatile double, double *%ptr
78*9880d681SAndroid Build Coastguard Worker  %l30 = load volatile double, double *%ptr
79*9880d681SAndroid Build Coastguard Worker  %l31 = load volatile double, double *%ptr
80*9880d681SAndroid Build Coastguard Worker  %acc0 = fsub double %l0, %l0
81*9880d681SAndroid Build Coastguard Worker  %acc1 = fsub double %l1, %acc0
82*9880d681SAndroid Build Coastguard Worker  %acc2 = fsub double %l2, %acc1
83*9880d681SAndroid Build Coastguard Worker  %acc3 = fsub double %l3, %acc2
84*9880d681SAndroid Build Coastguard Worker  %acc4 = fsub double %l4, %acc3
85*9880d681SAndroid Build Coastguard Worker  %acc5 = fsub double %l5, %acc4
86*9880d681SAndroid Build Coastguard Worker  %acc6 = fsub double %l6, %acc5
87*9880d681SAndroid Build Coastguard Worker  %acc7 = fsub double %l7, %acc6
88*9880d681SAndroid Build Coastguard Worker  %acc8 = fsub double %l8, %acc7
89*9880d681SAndroid Build Coastguard Worker  %acc9 = fsub double %l9, %acc8
90*9880d681SAndroid Build Coastguard Worker  %acc10 = fsub double %l10, %acc9
91*9880d681SAndroid Build Coastguard Worker  %acc11 = fsub double %l11, %acc10
92*9880d681SAndroid Build Coastguard Worker  %acc12 = fsub double %l12, %acc11
93*9880d681SAndroid Build Coastguard Worker  %acc13 = fsub double %l13, %acc12
94*9880d681SAndroid Build Coastguard Worker  %acc14 = fsub double %l14, %acc13
95*9880d681SAndroid Build Coastguard Worker  %acc15 = fsub double %l15, %acc14
96*9880d681SAndroid Build Coastguard Worker  %acc16 = fsub double %l16, %acc15
97*9880d681SAndroid Build Coastguard Worker  %acc17 = fsub double %l17, %acc16
98*9880d681SAndroid Build Coastguard Worker  %acc18 = fsub double %l18, %acc17
99*9880d681SAndroid Build Coastguard Worker  %acc19 = fsub double %l19, %acc18
100*9880d681SAndroid Build Coastguard Worker  %acc20 = fsub double %l20, %acc19
101*9880d681SAndroid Build Coastguard Worker  %acc21 = fsub double %l21, %acc20
102*9880d681SAndroid Build Coastguard Worker  %acc22 = fsub double %l22, %acc21
103*9880d681SAndroid Build Coastguard Worker  %acc23 = fsub double %l23, %acc22
104*9880d681SAndroid Build Coastguard Worker  %acc24 = fsub double %l24, %acc23
105*9880d681SAndroid Build Coastguard Worker  %acc25 = fsub double %l25, %acc24
106*9880d681SAndroid Build Coastguard Worker  %acc26 = fsub double %l26, %acc25
107*9880d681SAndroid Build Coastguard Worker  %acc27 = fsub double %l27, %acc26
108*9880d681SAndroid Build Coastguard Worker  %acc28 = fsub double %l28, %acc27
109*9880d681SAndroid Build Coastguard Worker  %acc29 = fsub double %l29, %acc28
110*9880d681SAndroid Build Coastguard Worker  %acc30 = fsub double %l30, %acc29
111*9880d681SAndroid Build Coastguard Worker  %acc31 = fsub double %l31, %acc30
112*9880d681SAndroid Build Coastguard Worker  store volatile double %acc0, double *%ptr
113*9880d681SAndroid Build Coastguard Worker  store volatile double %acc1, double *%ptr
114*9880d681SAndroid Build Coastguard Worker  store volatile double %acc2, double *%ptr
115*9880d681SAndroid Build Coastguard Worker  store volatile double %acc3, double *%ptr
116*9880d681SAndroid Build Coastguard Worker  store volatile double %acc4, double *%ptr
117*9880d681SAndroid Build Coastguard Worker  store volatile double %acc5, double *%ptr
118*9880d681SAndroid Build Coastguard Worker  store volatile double %acc6, double *%ptr
119*9880d681SAndroid Build Coastguard Worker  store volatile double %acc7, double *%ptr
120*9880d681SAndroid Build Coastguard Worker  store volatile double %acc8, double *%ptr
121*9880d681SAndroid Build Coastguard Worker  store volatile double %acc9, double *%ptr
122*9880d681SAndroid Build Coastguard Worker  store volatile double %acc10, double *%ptr
123*9880d681SAndroid Build Coastguard Worker  store volatile double %acc11, double *%ptr
124*9880d681SAndroid Build Coastguard Worker  store volatile double %acc12, double *%ptr
125*9880d681SAndroid Build Coastguard Worker  store volatile double %acc13, double *%ptr
126*9880d681SAndroid Build Coastguard Worker  store volatile double %acc14, double *%ptr
127*9880d681SAndroid Build Coastguard Worker  store volatile double %acc15, double *%ptr
128*9880d681SAndroid Build Coastguard Worker  store volatile double %acc16, double *%ptr
129*9880d681SAndroid Build Coastguard Worker  store volatile double %acc17, double *%ptr
130*9880d681SAndroid Build Coastguard Worker  store volatile double %acc18, double *%ptr
131*9880d681SAndroid Build Coastguard Worker  store volatile double %acc19, double *%ptr
132*9880d681SAndroid Build Coastguard Worker  store volatile double %acc20, double *%ptr
133*9880d681SAndroid Build Coastguard Worker  store volatile double %acc21, double *%ptr
134*9880d681SAndroid Build Coastguard Worker  store volatile double %acc22, double *%ptr
135*9880d681SAndroid Build Coastguard Worker  store volatile double %acc23, double *%ptr
136*9880d681SAndroid Build Coastguard Worker  store volatile double %acc24, double *%ptr
137*9880d681SAndroid Build Coastguard Worker  store volatile double %acc25, double *%ptr
138*9880d681SAndroid Build Coastguard Worker  store volatile double %acc26, double *%ptr
139*9880d681SAndroid Build Coastguard Worker  store volatile double %acc27, double *%ptr
140*9880d681SAndroid Build Coastguard Worker  store volatile double %acc28, double *%ptr
141*9880d681SAndroid Build Coastguard Worker  store volatile double %acc29, double *%ptr
142*9880d681SAndroid Build Coastguard Worker  store volatile double %acc30, double *%ptr
143*9880d681SAndroid Build Coastguard Worker  store volatile double %acc31, double *%ptr
144*9880d681SAndroid Build Coastguard Worker  ret void
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; Like f1, but requires one fewer FPR.  We allocate in numerical order,
148*9880d681SAndroid Build Coastguard Worker; so %f15 is the one that gets dropped.
149*9880d681SAndroid Build Coastguard Workerdefine void @f2(double *%ptr) {
150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
151*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -216
152*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 376
153*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 208(%r15)
154*9880d681SAndroid Build Coastguard Worker; CHECK: std %f9, 200(%r15)
155*9880d681SAndroid Build Coastguard Worker; CHECK: std %f10, 192(%r15)
156*9880d681SAndroid Build Coastguard Worker; CHECK: std %f11, 184(%r15)
157*9880d681SAndroid Build Coastguard Worker; CHECK: std %f12, 176(%r15)
158*9880d681SAndroid Build Coastguard Worker; CHECK: std %f13, 168(%r15)
159*9880d681SAndroid Build Coastguard Worker; CHECK: std %f14, 160(%r15)
160*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168
161*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f9, -176
162*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f10, -184
163*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f11, -192
164*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f12, -200
165*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f13, -208
166*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f14, -216
167*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %v15
168*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %f15
169*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 208(%r15)
170*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f9, 200(%r15)
171*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f10, 192(%r15)
172*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f11, 184(%r15)
173*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f12, 176(%r15)
174*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f13, 168(%r15)
175*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f14, 160(%r15)
176*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 216
177*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
178*9880d681SAndroid Build Coastguard Worker  %l0 = load volatile double, double *%ptr
179*9880d681SAndroid Build Coastguard Worker  %l1 = load volatile double, double *%ptr
180*9880d681SAndroid Build Coastguard Worker  %l2 = load volatile double, double *%ptr
181*9880d681SAndroid Build Coastguard Worker  %l3 = load volatile double, double *%ptr
182*9880d681SAndroid Build Coastguard Worker  %l4 = load volatile double, double *%ptr
183*9880d681SAndroid Build Coastguard Worker  %l5 = load volatile double, double *%ptr
184*9880d681SAndroid Build Coastguard Worker  %l6 = load volatile double, double *%ptr
185*9880d681SAndroid Build Coastguard Worker  %l7 = load volatile double, double *%ptr
186*9880d681SAndroid Build Coastguard Worker  %l8 = load volatile double, double *%ptr
187*9880d681SAndroid Build Coastguard Worker  %l9 = load volatile double, double *%ptr
188*9880d681SAndroid Build Coastguard Worker  %l10 = load volatile double, double *%ptr
189*9880d681SAndroid Build Coastguard Worker  %l11 = load volatile double, double *%ptr
190*9880d681SAndroid Build Coastguard Worker  %l12 = load volatile double, double *%ptr
191*9880d681SAndroid Build Coastguard Worker  %l13 = load volatile double, double *%ptr
192*9880d681SAndroid Build Coastguard Worker  %l14 = load volatile double, double *%ptr
193*9880d681SAndroid Build Coastguard Worker  %l16 = load volatile double, double *%ptr
194*9880d681SAndroid Build Coastguard Worker  %l17 = load volatile double, double *%ptr
195*9880d681SAndroid Build Coastguard Worker  %l18 = load volatile double, double *%ptr
196*9880d681SAndroid Build Coastguard Worker  %l19 = load volatile double, double *%ptr
197*9880d681SAndroid Build Coastguard Worker  %l20 = load volatile double, double *%ptr
198*9880d681SAndroid Build Coastguard Worker  %l21 = load volatile double, double *%ptr
199*9880d681SAndroid Build Coastguard Worker  %l22 = load volatile double, double *%ptr
200*9880d681SAndroid Build Coastguard Worker  %l23 = load volatile double, double *%ptr
201*9880d681SAndroid Build Coastguard Worker  %l24 = load volatile double, double *%ptr
202*9880d681SAndroid Build Coastguard Worker  %l25 = load volatile double, double *%ptr
203*9880d681SAndroid Build Coastguard Worker  %l26 = load volatile double, double *%ptr
204*9880d681SAndroid Build Coastguard Worker  %l27 = load volatile double, double *%ptr
205*9880d681SAndroid Build Coastguard Worker  %l28 = load volatile double, double *%ptr
206*9880d681SAndroid Build Coastguard Worker  %l29 = load volatile double, double *%ptr
207*9880d681SAndroid Build Coastguard Worker  %l30 = load volatile double, double *%ptr
208*9880d681SAndroid Build Coastguard Worker  %l31 = load volatile double, double *%ptr
209*9880d681SAndroid Build Coastguard Worker  %acc0 = fsub double %l0, %l0
210*9880d681SAndroid Build Coastguard Worker  %acc1 = fsub double %l1, %acc0
211*9880d681SAndroid Build Coastguard Worker  %acc2 = fsub double %l2, %acc1
212*9880d681SAndroid Build Coastguard Worker  %acc3 = fsub double %l3, %acc2
213*9880d681SAndroid Build Coastguard Worker  %acc4 = fsub double %l4, %acc3
214*9880d681SAndroid Build Coastguard Worker  %acc5 = fsub double %l5, %acc4
215*9880d681SAndroid Build Coastguard Worker  %acc6 = fsub double %l6, %acc5
216*9880d681SAndroid Build Coastguard Worker  %acc7 = fsub double %l7, %acc6
217*9880d681SAndroid Build Coastguard Worker  %acc8 = fsub double %l8, %acc7
218*9880d681SAndroid Build Coastguard Worker  %acc9 = fsub double %l9, %acc8
219*9880d681SAndroid Build Coastguard Worker  %acc10 = fsub double %l10, %acc9
220*9880d681SAndroid Build Coastguard Worker  %acc11 = fsub double %l11, %acc10
221*9880d681SAndroid Build Coastguard Worker  %acc12 = fsub double %l12, %acc11
222*9880d681SAndroid Build Coastguard Worker  %acc13 = fsub double %l13, %acc12
223*9880d681SAndroid Build Coastguard Worker  %acc14 = fsub double %l14, %acc13
224*9880d681SAndroid Build Coastguard Worker  %acc16 = fsub double %l16, %acc14
225*9880d681SAndroid Build Coastguard Worker  %acc17 = fsub double %l17, %acc16
226*9880d681SAndroid Build Coastguard Worker  %acc18 = fsub double %l18, %acc17
227*9880d681SAndroid Build Coastguard Worker  %acc19 = fsub double %l19, %acc18
228*9880d681SAndroid Build Coastguard Worker  %acc20 = fsub double %l20, %acc19
229*9880d681SAndroid Build Coastguard Worker  %acc21 = fsub double %l21, %acc20
230*9880d681SAndroid Build Coastguard Worker  %acc22 = fsub double %l22, %acc21
231*9880d681SAndroid Build Coastguard Worker  %acc23 = fsub double %l23, %acc22
232*9880d681SAndroid Build Coastguard Worker  %acc24 = fsub double %l24, %acc23
233*9880d681SAndroid Build Coastguard Worker  %acc25 = fsub double %l25, %acc24
234*9880d681SAndroid Build Coastguard Worker  %acc26 = fsub double %l26, %acc25
235*9880d681SAndroid Build Coastguard Worker  %acc27 = fsub double %l27, %acc26
236*9880d681SAndroid Build Coastguard Worker  %acc28 = fsub double %l28, %acc27
237*9880d681SAndroid Build Coastguard Worker  %acc29 = fsub double %l29, %acc28
238*9880d681SAndroid Build Coastguard Worker  %acc30 = fsub double %l30, %acc29
239*9880d681SAndroid Build Coastguard Worker  %acc31 = fsub double %l31, %acc30
240*9880d681SAndroid Build Coastguard Worker  store volatile double %acc0, double *%ptr
241*9880d681SAndroid Build Coastguard Worker  store volatile double %acc1, double *%ptr
242*9880d681SAndroid Build Coastguard Worker  store volatile double %acc2, double *%ptr
243*9880d681SAndroid Build Coastguard Worker  store volatile double %acc3, double *%ptr
244*9880d681SAndroid Build Coastguard Worker  store volatile double %acc4, double *%ptr
245*9880d681SAndroid Build Coastguard Worker  store volatile double %acc5, double *%ptr
246*9880d681SAndroid Build Coastguard Worker  store volatile double %acc6, double *%ptr
247*9880d681SAndroid Build Coastguard Worker  store volatile double %acc7, double *%ptr
248*9880d681SAndroid Build Coastguard Worker  store volatile double %acc8, double *%ptr
249*9880d681SAndroid Build Coastguard Worker  store volatile double %acc9, double *%ptr
250*9880d681SAndroid Build Coastguard Worker  store volatile double %acc10, double *%ptr
251*9880d681SAndroid Build Coastguard Worker  store volatile double %acc11, double *%ptr
252*9880d681SAndroid Build Coastguard Worker  store volatile double %acc12, double *%ptr
253*9880d681SAndroid Build Coastguard Worker  store volatile double %acc13, double *%ptr
254*9880d681SAndroid Build Coastguard Worker  store volatile double %acc14, double *%ptr
255*9880d681SAndroid Build Coastguard Worker  store volatile double %acc16, double *%ptr
256*9880d681SAndroid Build Coastguard Worker  store volatile double %acc17, double *%ptr
257*9880d681SAndroid Build Coastguard Worker  store volatile double %acc18, double *%ptr
258*9880d681SAndroid Build Coastguard Worker  store volatile double %acc19, double *%ptr
259*9880d681SAndroid Build Coastguard Worker  store volatile double %acc20, double *%ptr
260*9880d681SAndroid Build Coastguard Worker  store volatile double %acc21, double *%ptr
261*9880d681SAndroid Build Coastguard Worker  store volatile double %acc22, double *%ptr
262*9880d681SAndroid Build Coastguard Worker  store volatile double %acc23, double *%ptr
263*9880d681SAndroid Build Coastguard Worker  store volatile double %acc24, double *%ptr
264*9880d681SAndroid Build Coastguard Worker  store volatile double %acc25, double *%ptr
265*9880d681SAndroid Build Coastguard Worker  store volatile double %acc26, double *%ptr
266*9880d681SAndroid Build Coastguard Worker  store volatile double %acc27, double *%ptr
267*9880d681SAndroid Build Coastguard Worker  store volatile double %acc28, double *%ptr
268*9880d681SAndroid Build Coastguard Worker  store volatile double %acc29, double *%ptr
269*9880d681SAndroid Build Coastguard Worker  store volatile double %acc30, double *%ptr
270*9880d681SAndroid Build Coastguard Worker  store volatile double %acc31, double *%ptr
271*9880d681SAndroid Build Coastguard Worker  ret void
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker; Like f1, but should require only one call-saved FPR.
275*9880d681SAndroid Build Coastguard Workerdefine void @f3(double *%ptr) {
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
277*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168
278*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 328
279*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 160(%r15)
280*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168
281*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]9}}
282*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]1[0-5]}}
283*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 160(%r15)
284*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 168
285*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
286*9880d681SAndroid Build Coastguard Worker  %l0 = load volatile double, double *%ptr
287*9880d681SAndroid Build Coastguard Worker  %l1 = load volatile double, double *%ptr
288*9880d681SAndroid Build Coastguard Worker  %l2 = load volatile double, double *%ptr
289*9880d681SAndroid Build Coastguard Worker  %l3 = load volatile double, double *%ptr
290*9880d681SAndroid Build Coastguard Worker  %l4 = load volatile double, double *%ptr
291*9880d681SAndroid Build Coastguard Worker  %l5 = load volatile double, double *%ptr
292*9880d681SAndroid Build Coastguard Worker  %l6 = load volatile double, double *%ptr
293*9880d681SAndroid Build Coastguard Worker  %l7 = load volatile double, double *%ptr
294*9880d681SAndroid Build Coastguard Worker  %l8 = load volatile double, double *%ptr
295*9880d681SAndroid Build Coastguard Worker  %l16 = load volatile double, double *%ptr
296*9880d681SAndroid Build Coastguard Worker  %l17 = load volatile double, double *%ptr
297*9880d681SAndroid Build Coastguard Worker  %l18 = load volatile double, double *%ptr
298*9880d681SAndroid Build Coastguard Worker  %l19 = load volatile double, double *%ptr
299*9880d681SAndroid Build Coastguard Worker  %l20 = load volatile double, double *%ptr
300*9880d681SAndroid Build Coastguard Worker  %l21 = load volatile double, double *%ptr
301*9880d681SAndroid Build Coastguard Worker  %l22 = load volatile double, double *%ptr
302*9880d681SAndroid Build Coastguard Worker  %l23 = load volatile double, double *%ptr
303*9880d681SAndroid Build Coastguard Worker  %l24 = load volatile double, double *%ptr
304*9880d681SAndroid Build Coastguard Worker  %l25 = load volatile double, double *%ptr
305*9880d681SAndroid Build Coastguard Worker  %l26 = load volatile double, double *%ptr
306*9880d681SAndroid Build Coastguard Worker  %l27 = load volatile double, double *%ptr
307*9880d681SAndroid Build Coastguard Worker  %l28 = load volatile double, double *%ptr
308*9880d681SAndroid Build Coastguard Worker  %l29 = load volatile double, double *%ptr
309*9880d681SAndroid Build Coastguard Worker  %l30 = load volatile double, double *%ptr
310*9880d681SAndroid Build Coastguard Worker  %l31 = load volatile double, double *%ptr
311*9880d681SAndroid Build Coastguard Worker  %acc0 = fsub double %l0, %l0
312*9880d681SAndroid Build Coastguard Worker  %acc1 = fsub double %l1, %acc0
313*9880d681SAndroid Build Coastguard Worker  %acc2 = fsub double %l2, %acc1
314*9880d681SAndroid Build Coastguard Worker  %acc3 = fsub double %l3, %acc2
315*9880d681SAndroid Build Coastguard Worker  %acc4 = fsub double %l4, %acc3
316*9880d681SAndroid Build Coastguard Worker  %acc5 = fsub double %l5, %acc4
317*9880d681SAndroid Build Coastguard Worker  %acc6 = fsub double %l6, %acc5
318*9880d681SAndroid Build Coastguard Worker  %acc7 = fsub double %l7, %acc6
319*9880d681SAndroid Build Coastguard Worker  %acc8 = fsub double %l8, %acc7
320*9880d681SAndroid Build Coastguard Worker  %acc16 = fsub double %l16, %acc8
321*9880d681SAndroid Build Coastguard Worker  %acc17 = fsub double %l17, %acc16
322*9880d681SAndroid Build Coastguard Worker  %acc18 = fsub double %l18, %acc17
323*9880d681SAndroid Build Coastguard Worker  %acc19 = fsub double %l19, %acc18
324*9880d681SAndroid Build Coastguard Worker  %acc20 = fsub double %l20, %acc19
325*9880d681SAndroid Build Coastguard Worker  %acc21 = fsub double %l21, %acc20
326*9880d681SAndroid Build Coastguard Worker  %acc22 = fsub double %l22, %acc21
327*9880d681SAndroid Build Coastguard Worker  %acc23 = fsub double %l23, %acc22
328*9880d681SAndroid Build Coastguard Worker  %acc24 = fsub double %l24, %acc23
329*9880d681SAndroid Build Coastguard Worker  %acc25 = fsub double %l25, %acc24
330*9880d681SAndroid Build Coastguard Worker  %acc26 = fsub double %l26, %acc25
331*9880d681SAndroid Build Coastguard Worker  %acc27 = fsub double %l27, %acc26
332*9880d681SAndroid Build Coastguard Worker  %acc28 = fsub double %l28, %acc27
333*9880d681SAndroid Build Coastguard Worker  %acc29 = fsub double %l29, %acc28
334*9880d681SAndroid Build Coastguard Worker  %acc30 = fsub double %l30, %acc29
335*9880d681SAndroid Build Coastguard Worker  %acc31 = fsub double %l31, %acc30
336*9880d681SAndroid Build Coastguard Worker  store volatile double %acc0, double *%ptr
337*9880d681SAndroid Build Coastguard Worker  store volatile double %acc1, double *%ptr
338*9880d681SAndroid Build Coastguard Worker  store volatile double %acc2, double *%ptr
339*9880d681SAndroid Build Coastguard Worker  store volatile double %acc3, double *%ptr
340*9880d681SAndroid Build Coastguard Worker  store volatile double %acc4, double *%ptr
341*9880d681SAndroid Build Coastguard Worker  store volatile double %acc5, double *%ptr
342*9880d681SAndroid Build Coastguard Worker  store volatile double %acc6, double *%ptr
343*9880d681SAndroid Build Coastguard Worker  store volatile double %acc7, double *%ptr
344*9880d681SAndroid Build Coastguard Worker  store volatile double %acc8, double *%ptr
345*9880d681SAndroid Build Coastguard Worker  store volatile double %acc16, double *%ptr
346*9880d681SAndroid Build Coastguard Worker  store volatile double %acc17, double *%ptr
347*9880d681SAndroid Build Coastguard Worker  store volatile double %acc18, double *%ptr
348*9880d681SAndroid Build Coastguard Worker  store volatile double %acc19, double *%ptr
349*9880d681SAndroid Build Coastguard Worker  store volatile double %acc20, double *%ptr
350*9880d681SAndroid Build Coastguard Worker  store volatile double %acc21, double *%ptr
351*9880d681SAndroid Build Coastguard Worker  store volatile double %acc22, double *%ptr
352*9880d681SAndroid Build Coastguard Worker  store volatile double %acc23, double *%ptr
353*9880d681SAndroid Build Coastguard Worker  store volatile double %acc24, double *%ptr
354*9880d681SAndroid Build Coastguard Worker  store volatile double %acc25, double *%ptr
355*9880d681SAndroid Build Coastguard Worker  store volatile double %acc26, double *%ptr
356*9880d681SAndroid Build Coastguard Worker  store volatile double %acc27, double *%ptr
357*9880d681SAndroid Build Coastguard Worker  store volatile double %acc28, double *%ptr
358*9880d681SAndroid Build Coastguard Worker  store volatile double %acc29, double *%ptr
359*9880d681SAndroid Build Coastguard Worker  store volatile double %acc30, double *%ptr
360*9880d681SAndroid Build Coastguard Worker  store volatile double %acc31, double *%ptr
361*9880d681SAndroid Build Coastguard Worker  ret void
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker; This function should use all call-clobbered FPRs and vector registers
365*9880d681SAndroid Build Coastguard Worker; but no call-saved ones.  It shouldn't need to create a frame.
366*9880d681SAndroid Build Coastguard Workerdefine void @f4(double *%ptr) {
367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
368*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r15
369*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv][89]}}
370*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]1[0-5]}}
371*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
372*9880d681SAndroid Build Coastguard Worker  %l0 = load volatile double, double *%ptr
373*9880d681SAndroid Build Coastguard Worker  %l1 = load volatile double, double *%ptr
374*9880d681SAndroid Build Coastguard Worker  %l2 = load volatile double, double *%ptr
375*9880d681SAndroid Build Coastguard Worker  %l3 = load volatile double, double *%ptr
376*9880d681SAndroid Build Coastguard Worker  %l4 = load volatile double, double *%ptr
377*9880d681SAndroid Build Coastguard Worker  %l5 = load volatile double, double *%ptr
378*9880d681SAndroid Build Coastguard Worker  %l6 = load volatile double, double *%ptr
379*9880d681SAndroid Build Coastguard Worker  %l7 = load volatile double, double *%ptr
380*9880d681SAndroid Build Coastguard Worker  %l16 = load volatile double, double *%ptr
381*9880d681SAndroid Build Coastguard Worker  %l17 = load volatile double, double *%ptr
382*9880d681SAndroid Build Coastguard Worker  %l18 = load volatile double, double *%ptr
383*9880d681SAndroid Build Coastguard Worker  %l19 = load volatile double, double *%ptr
384*9880d681SAndroid Build Coastguard Worker  %l20 = load volatile double, double *%ptr
385*9880d681SAndroid Build Coastguard Worker  %l21 = load volatile double, double *%ptr
386*9880d681SAndroid Build Coastguard Worker  %l22 = load volatile double, double *%ptr
387*9880d681SAndroid Build Coastguard Worker  %l23 = load volatile double, double *%ptr
388*9880d681SAndroid Build Coastguard Worker  %l24 = load volatile double, double *%ptr
389*9880d681SAndroid Build Coastguard Worker  %l25 = load volatile double, double *%ptr
390*9880d681SAndroid Build Coastguard Worker  %l26 = load volatile double, double *%ptr
391*9880d681SAndroid Build Coastguard Worker  %l27 = load volatile double, double *%ptr
392*9880d681SAndroid Build Coastguard Worker  %l28 = load volatile double, double *%ptr
393*9880d681SAndroid Build Coastguard Worker  %l29 = load volatile double, double *%ptr
394*9880d681SAndroid Build Coastguard Worker  %l30 = load volatile double, double *%ptr
395*9880d681SAndroid Build Coastguard Worker  %l31 = load volatile double, double *%ptr
396*9880d681SAndroid Build Coastguard Worker  %acc0 = fsub double %l0, %l0
397*9880d681SAndroid Build Coastguard Worker  %acc1 = fsub double %l1, %acc0
398*9880d681SAndroid Build Coastguard Worker  %acc2 = fsub double %l2, %acc1
399*9880d681SAndroid Build Coastguard Worker  %acc3 = fsub double %l3, %acc2
400*9880d681SAndroid Build Coastguard Worker  %acc4 = fsub double %l4, %acc3
401*9880d681SAndroid Build Coastguard Worker  %acc5 = fsub double %l5, %acc4
402*9880d681SAndroid Build Coastguard Worker  %acc6 = fsub double %l6, %acc5
403*9880d681SAndroid Build Coastguard Worker  %acc7 = fsub double %l7, %acc6
404*9880d681SAndroid Build Coastguard Worker  %acc16 = fsub double %l16, %acc7
405*9880d681SAndroid Build Coastguard Worker  %acc17 = fsub double %l17, %acc16
406*9880d681SAndroid Build Coastguard Worker  %acc18 = fsub double %l18, %acc17
407*9880d681SAndroid Build Coastguard Worker  %acc19 = fsub double %l19, %acc18
408*9880d681SAndroid Build Coastguard Worker  %acc20 = fsub double %l20, %acc19
409*9880d681SAndroid Build Coastguard Worker  %acc21 = fsub double %l21, %acc20
410*9880d681SAndroid Build Coastguard Worker  %acc22 = fsub double %l22, %acc21
411*9880d681SAndroid Build Coastguard Worker  %acc23 = fsub double %l23, %acc22
412*9880d681SAndroid Build Coastguard Worker  %acc24 = fsub double %l24, %acc23
413*9880d681SAndroid Build Coastguard Worker  %acc25 = fsub double %l25, %acc24
414*9880d681SAndroid Build Coastguard Worker  %acc26 = fsub double %l26, %acc25
415*9880d681SAndroid Build Coastguard Worker  %acc27 = fsub double %l27, %acc26
416*9880d681SAndroid Build Coastguard Worker  %acc28 = fsub double %l28, %acc27
417*9880d681SAndroid Build Coastguard Worker  %acc29 = fsub double %l29, %acc28
418*9880d681SAndroid Build Coastguard Worker  %acc30 = fsub double %l30, %acc29
419*9880d681SAndroid Build Coastguard Worker  %acc31 = fsub double %l31, %acc30
420*9880d681SAndroid Build Coastguard Worker  store volatile double %acc0, double *%ptr
421*9880d681SAndroid Build Coastguard Worker  store volatile double %acc1, double *%ptr
422*9880d681SAndroid Build Coastguard Worker  store volatile double %acc2, double *%ptr
423*9880d681SAndroid Build Coastguard Worker  store volatile double %acc3, double *%ptr
424*9880d681SAndroid Build Coastguard Worker  store volatile double %acc4, double *%ptr
425*9880d681SAndroid Build Coastguard Worker  store volatile double %acc5, double *%ptr
426*9880d681SAndroid Build Coastguard Worker  store volatile double %acc6, double *%ptr
427*9880d681SAndroid Build Coastguard Worker  store volatile double %acc7, double *%ptr
428*9880d681SAndroid Build Coastguard Worker  store volatile double %acc16, double *%ptr
429*9880d681SAndroid Build Coastguard Worker  store volatile double %acc17, double *%ptr
430*9880d681SAndroid Build Coastguard Worker  store volatile double %acc18, double *%ptr
431*9880d681SAndroid Build Coastguard Worker  store volatile double %acc19, double *%ptr
432*9880d681SAndroid Build Coastguard Worker  store volatile double %acc20, double *%ptr
433*9880d681SAndroid Build Coastguard Worker  store volatile double %acc21, double *%ptr
434*9880d681SAndroid Build Coastguard Worker  store volatile double %acc22, double *%ptr
435*9880d681SAndroid Build Coastguard Worker  store volatile double %acc23, double *%ptr
436*9880d681SAndroid Build Coastguard Worker  store volatile double %acc24, double *%ptr
437*9880d681SAndroid Build Coastguard Worker  store volatile double %acc25, double *%ptr
438*9880d681SAndroid Build Coastguard Worker  store volatile double %acc26, double *%ptr
439*9880d681SAndroid Build Coastguard Worker  store volatile double %acc27, double *%ptr
440*9880d681SAndroid Build Coastguard Worker  store volatile double %acc28, double *%ptr
441*9880d681SAndroid Build Coastguard Worker  store volatile double %acc29, double *%ptr
442*9880d681SAndroid Build Coastguard Worker  store volatile double %acc30, double *%ptr
443*9880d681SAndroid Build Coastguard Worker  store volatile double %acc31, double *%ptr
444*9880d681SAndroid Build Coastguard Worker  ret void
445*9880d681SAndroid Build Coastguard Worker}
446