xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/spill-01.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test spilling using MVC.  The tests here assume z10 register pressure,
2*9880d681SAndroid Build Coastguard Worker; without the high words being available.
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 -verify-machineinstrs | FileCheck %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdeclare void @foo()
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker@g0 = global i32 0
9*9880d681SAndroid Build Coastguard Worker@g1 = global i32 1
10*9880d681SAndroid Build Coastguard Worker@g2 = global i32 2
11*9880d681SAndroid Build Coastguard Worker@g3 = global i32 3
12*9880d681SAndroid Build Coastguard Worker@g4 = global i32 4
13*9880d681SAndroid Build Coastguard Worker@g5 = global i32 5
14*9880d681SAndroid Build Coastguard Worker@g6 = global i32 6
15*9880d681SAndroid Build Coastguard Worker@g7 = global i32 7
16*9880d681SAndroid Build Coastguard Worker@g8 = global i32 8
17*9880d681SAndroid Build Coastguard Worker@g9 = global i32 9
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker@h0 = global i64 0
20*9880d681SAndroid Build Coastguard Worker@h1 = global i64 1
21*9880d681SAndroid Build Coastguard Worker@h2 = global i64 2
22*9880d681SAndroid Build Coastguard Worker@h3 = global i64 3
23*9880d681SAndroid Build Coastguard Worker@h4 = global i64 4
24*9880d681SAndroid Build Coastguard Worker@h5 = global i64 5
25*9880d681SAndroid Build Coastguard Worker@h6 = global i64 6
26*9880d681SAndroid Build Coastguard Worker@h7 = global i64 7
27*9880d681SAndroid Build Coastguard Worker@h8 = global i64 8
28*9880d681SAndroid Build Coastguard Worker@h9 = global i64 9
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; This function shouldn't spill anything
31*9880d681SAndroid Build Coastguard Workerdefine void @f1(i32 *%ptr0) {
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
33*9880d681SAndroid Build Coastguard Worker; CHECK: stmg
34*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -160
35*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r15
36*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
37*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r15
38*9880d681SAndroid Build Coastguard Worker; CHECK: lmg
39*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
40*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i32, i32 *%ptr0, i32 2
41*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i32, i32 *%ptr0, i32 4
42*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i32, i32 *%ptr0, i32 6
43*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr i32, i32 *%ptr0, i32 8
44*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr i32, i32 *%ptr0, i32 10
45*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr i32, i32 *%ptr0, i32 12
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker  %val0 = load i32 , i32 *%ptr0
48*9880d681SAndroid Build Coastguard Worker  %val1 = load i32 , i32 *%ptr1
49*9880d681SAndroid Build Coastguard Worker  %val2 = load i32 , i32 *%ptr2
50*9880d681SAndroid Build Coastguard Worker  %val3 = load i32 , i32 *%ptr3
51*9880d681SAndroid Build Coastguard Worker  %val4 = load i32 , i32 *%ptr4
52*9880d681SAndroid Build Coastguard Worker  %val5 = load i32 , i32 *%ptr5
53*9880d681SAndroid Build Coastguard Worker  %val6 = load i32 , i32 *%ptr6
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker  call void @foo()
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker  store i32 %val0, i32 *%ptr0
58*9880d681SAndroid Build Coastguard Worker  store i32 %val1, i32 *%ptr1
59*9880d681SAndroid Build Coastguard Worker  store i32 %val2, i32 *%ptr2
60*9880d681SAndroid Build Coastguard Worker  store i32 %val3, i32 *%ptr3
61*9880d681SAndroid Build Coastguard Worker  store i32 %val4, i32 *%ptr4
62*9880d681SAndroid Build Coastguard Worker  store i32 %val5, i32 *%ptr5
63*9880d681SAndroid Build Coastguard Worker  store i32 %val6, i32 *%ptr6
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker  ret void
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker; Test a case where at least one i32 load and at least one i32 store
69*9880d681SAndroid Build Coastguard Worker; need spills.
70*9880d681SAndroid Build Coastguard Workerdefine void @f2(i32 *%ptr0) {
71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
72*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET1:16[04]]](4,%r15), [[OFFSET2:[0-9]+]]({{%r[0-9]+}})
73*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
74*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET2]](4,{{%r[0-9]+}}), [[OFFSET1]](%r15)
75*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
76*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i32, i32 *%ptr0, i64 2
77*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i32, i32 *%ptr0, i64 4
78*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i32, i32 *%ptr0, i64 6
79*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr i32, i32 *%ptr0, i64 8
80*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr i32, i32 *%ptr0, i64 10
81*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr i32, i32 *%ptr0, i64 12
82*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr i32, i32 *%ptr0, i64 14
83*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr i32, i32 *%ptr0, i64 16
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker  %val0 = load i32 , i32 *%ptr0
86*9880d681SAndroid Build Coastguard Worker  %val1 = load i32 , i32 *%ptr1
87*9880d681SAndroid Build Coastguard Worker  %val2 = load i32 , i32 *%ptr2
88*9880d681SAndroid Build Coastguard Worker  %val3 = load i32 , i32 *%ptr3
89*9880d681SAndroid Build Coastguard Worker  %val4 = load i32 , i32 *%ptr4
90*9880d681SAndroid Build Coastguard Worker  %val5 = load i32 , i32 *%ptr5
91*9880d681SAndroid Build Coastguard Worker  %val6 = load i32 , i32 *%ptr6
92*9880d681SAndroid Build Coastguard Worker  %val7 = load i32 , i32 *%ptr7
93*9880d681SAndroid Build Coastguard Worker  %val8 = load i32 , i32 *%ptr8
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker  call void @foo()
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker  store i32 %val0, i32 *%ptr0
98*9880d681SAndroid Build Coastguard Worker  store i32 %val1, i32 *%ptr1
99*9880d681SAndroid Build Coastguard Worker  store i32 %val2, i32 *%ptr2
100*9880d681SAndroid Build Coastguard Worker  store i32 %val3, i32 *%ptr3
101*9880d681SAndroid Build Coastguard Worker  store i32 %val4, i32 *%ptr4
102*9880d681SAndroid Build Coastguard Worker  store i32 %val5, i32 *%ptr5
103*9880d681SAndroid Build Coastguard Worker  store i32 %val6, i32 *%ptr6
104*9880d681SAndroid Build Coastguard Worker  store i32 %val7, i32 *%ptr7
105*9880d681SAndroid Build Coastguard Worker  store i32 %val8, i32 *%ptr8
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; Test a case where at least one i64 load and at least one i64 store
111*9880d681SAndroid Build Coastguard Worker; need spills.
112*9880d681SAndroid Build Coastguard Workerdefine void @f3(i64 *%ptr0) {
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
114*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 160(8,%r15), [[OFFSET:[0-9]+]]({{%r[0-9]+}})
115*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
116*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET]](8,{{%r[0-9]+}}), 160(%r15)
117*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
118*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i64, i64 *%ptr0, i64 2
119*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i64, i64 *%ptr0, i64 4
120*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i64, i64 *%ptr0, i64 6
121*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr i64, i64 *%ptr0, i64 8
122*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr i64, i64 *%ptr0, i64 10
123*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr i64, i64 *%ptr0, i64 12
124*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr i64, i64 *%ptr0, i64 14
125*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr i64, i64 *%ptr0, i64 16
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker  %val0 = load i64 , i64 *%ptr0
128*9880d681SAndroid Build Coastguard Worker  %val1 = load i64 , i64 *%ptr1
129*9880d681SAndroid Build Coastguard Worker  %val2 = load i64 , i64 *%ptr2
130*9880d681SAndroid Build Coastguard Worker  %val3 = load i64 , i64 *%ptr3
131*9880d681SAndroid Build Coastguard Worker  %val4 = load i64 , i64 *%ptr4
132*9880d681SAndroid Build Coastguard Worker  %val5 = load i64 , i64 *%ptr5
133*9880d681SAndroid Build Coastguard Worker  %val6 = load i64 , i64 *%ptr6
134*9880d681SAndroid Build Coastguard Worker  %val7 = load i64 , i64 *%ptr7
135*9880d681SAndroid Build Coastguard Worker  %val8 = load i64 , i64 *%ptr8
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker  call void @foo()
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker  store i64 %val0, i64 *%ptr0
140*9880d681SAndroid Build Coastguard Worker  store i64 %val1, i64 *%ptr1
141*9880d681SAndroid Build Coastguard Worker  store i64 %val2, i64 *%ptr2
142*9880d681SAndroid Build Coastguard Worker  store i64 %val3, i64 *%ptr3
143*9880d681SAndroid Build Coastguard Worker  store i64 %val4, i64 *%ptr4
144*9880d681SAndroid Build Coastguard Worker  store i64 %val5, i64 *%ptr5
145*9880d681SAndroid Build Coastguard Worker  store i64 %val6, i64 *%ptr6
146*9880d681SAndroid Build Coastguard Worker  store i64 %val7, i64 *%ptr7
147*9880d681SAndroid Build Coastguard Worker  store i64 %val8, i64 *%ptr8
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker  ret void
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker; Test a case where at least at least one f32 load and at least one f32 store
154*9880d681SAndroid Build Coastguard Worker; need spills.  The 8 call-saved FPRs could be used for 8 of the %vals
155*9880d681SAndroid Build Coastguard Worker; (and are at the time of writing), but it would really be better to use
156*9880d681SAndroid Build Coastguard Worker; MVC for all 10.
157*9880d681SAndroid Build Coastguard Workerdefine void @f4(float *%ptr0) {
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
159*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET1:16[04]]](4,%r15), [[OFFSET2:[0-9]+]]({{%r[0-9]+}})
160*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
161*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET2]](4,{{%r[0-9]+}}), [[OFFSET1]](%r15)
162*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
163*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr float, float *%ptr0, i64 2
164*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr float, float *%ptr0, i64 4
165*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr float, float *%ptr0, i64 6
166*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr float, float *%ptr0, i64 8
167*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr float, float *%ptr0, i64 10
168*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr float, float *%ptr0, i64 12
169*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr float, float *%ptr0, i64 14
170*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr float, float *%ptr0, i64 16
171*9880d681SAndroid Build Coastguard Worker  %ptr9 = getelementptr float, float *%ptr0, i64 18
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker  %val0 = load float , float *%ptr0
174*9880d681SAndroid Build Coastguard Worker  %val1 = load float , float *%ptr1
175*9880d681SAndroid Build Coastguard Worker  %val2 = load float , float *%ptr2
176*9880d681SAndroid Build Coastguard Worker  %val3 = load float , float *%ptr3
177*9880d681SAndroid Build Coastguard Worker  %val4 = load float , float *%ptr4
178*9880d681SAndroid Build Coastguard Worker  %val5 = load float , float *%ptr5
179*9880d681SAndroid Build Coastguard Worker  %val6 = load float , float *%ptr6
180*9880d681SAndroid Build Coastguard Worker  %val7 = load float , float *%ptr7
181*9880d681SAndroid Build Coastguard Worker  %val8 = load float , float *%ptr8
182*9880d681SAndroid Build Coastguard Worker  %val9 = load float , float *%ptr9
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker  call void @foo()
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker  store float %val0, float *%ptr0
187*9880d681SAndroid Build Coastguard Worker  store float %val1, float *%ptr1
188*9880d681SAndroid Build Coastguard Worker  store float %val2, float *%ptr2
189*9880d681SAndroid Build Coastguard Worker  store float %val3, float *%ptr3
190*9880d681SAndroid Build Coastguard Worker  store float %val4, float *%ptr4
191*9880d681SAndroid Build Coastguard Worker  store float %val5, float *%ptr5
192*9880d681SAndroid Build Coastguard Worker  store float %val6, float *%ptr6
193*9880d681SAndroid Build Coastguard Worker  store float %val7, float *%ptr7
194*9880d681SAndroid Build Coastguard Worker  store float %val8, float *%ptr8
195*9880d681SAndroid Build Coastguard Worker  store float %val9, float *%ptr9
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker  ret void
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker; Similarly for f64.
201*9880d681SAndroid Build Coastguard Workerdefine void @f5(double *%ptr0) {
202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
203*9880d681SAndroid Build Coastguard Worker; CHECK: mvc 160(8,%r15), [[OFFSET:[0-9]+]]({{%r[0-9]+}})
204*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
205*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[OFFSET]](8,{{%r[0-9]+}}), 160(%r15)
206*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
207*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr double, double *%ptr0, i64 2
208*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr double, double *%ptr0, i64 4
209*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr double, double *%ptr0, i64 6
210*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr double, double *%ptr0, i64 8
211*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr double, double *%ptr0, i64 10
212*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr double, double *%ptr0, i64 12
213*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr double, double *%ptr0, i64 14
214*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr double, double *%ptr0, i64 16
215*9880d681SAndroid Build Coastguard Worker  %ptr9 = getelementptr double, double *%ptr0, i64 18
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker  %val0 = load double , double *%ptr0
218*9880d681SAndroid Build Coastguard Worker  %val1 = load double , double *%ptr1
219*9880d681SAndroid Build Coastguard Worker  %val2 = load double , double *%ptr2
220*9880d681SAndroid Build Coastguard Worker  %val3 = load double , double *%ptr3
221*9880d681SAndroid Build Coastguard Worker  %val4 = load double , double *%ptr4
222*9880d681SAndroid Build Coastguard Worker  %val5 = load double , double *%ptr5
223*9880d681SAndroid Build Coastguard Worker  %val6 = load double , double *%ptr6
224*9880d681SAndroid Build Coastguard Worker  %val7 = load double , double *%ptr7
225*9880d681SAndroid Build Coastguard Worker  %val8 = load double , double *%ptr8
226*9880d681SAndroid Build Coastguard Worker  %val9 = load double , double *%ptr9
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker  call void @foo()
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Worker  store double %val0, double *%ptr0
231*9880d681SAndroid Build Coastguard Worker  store double %val1, double *%ptr1
232*9880d681SAndroid Build Coastguard Worker  store double %val2, double *%ptr2
233*9880d681SAndroid Build Coastguard Worker  store double %val3, double *%ptr3
234*9880d681SAndroid Build Coastguard Worker  store double %val4, double *%ptr4
235*9880d681SAndroid Build Coastguard Worker  store double %val5, double *%ptr5
236*9880d681SAndroid Build Coastguard Worker  store double %val6, double *%ptr6
237*9880d681SAndroid Build Coastguard Worker  store double %val7, double *%ptr7
238*9880d681SAndroid Build Coastguard Worker  store double %val8, double *%ptr8
239*9880d681SAndroid Build Coastguard Worker  store double %val9, double *%ptr9
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker  ret void
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker; Repeat f2 with atomic accesses.  We shouldn't use MVC here.
245*9880d681SAndroid Build Coastguard Workerdefine void @f6(i32 *%ptr0) {
246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
247*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mvc
248*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
249*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i32, i32 *%ptr0, i64 2
250*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i32, i32 *%ptr0, i64 4
251*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i32, i32 *%ptr0, i64 6
252*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr i32, i32 *%ptr0, i64 8
253*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr i32, i32 *%ptr0, i64 10
254*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr i32, i32 *%ptr0, i64 12
255*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr i32, i32 *%ptr0, i64 14
256*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr i32, i32 *%ptr0, i64 16
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker  %val0 = load atomic i32 , i32 *%ptr0 unordered, align 4
259*9880d681SAndroid Build Coastguard Worker  %val1 = load atomic i32 , i32 *%ptr1 unordered, align 4
260*9880d681SAndroid Build Coastguard Worker  %val2 = load atomic i32 , i32 *%ptr2 unordered, align 4
261*9880d681SAndroid Build Coastguard Worker  %val3 = load atomic i32 , i32 *%ptr3 unordered, align 4
262*9880d681SAndroid Build Coastguard Worker  %val4 = load atomic i32 , i32 *%ptr4 unordered, align 4
263*9880d681SAndroid Build Coastguard Worker  %val5 = load atomic i32 , i32 *%ptr5 unordered, align 4
264*9880d681SAndroid Build Coastguard Worker  %val6 = load atomic i32 , i32 *%ptr6 unordered, align 4
265*9880d681SAndroid Build Coastguard Worker  %val7 = load atomic i32 , i32 *%ptr7 unordered, align 4
266*9880d681SAndroid Build Coastguard Worker  %val8 = load atomic i32 , i32 *%ptr8 unordered, align 4
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker  call void @foo()
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val0, i32 *%ptr0 unordered, align 4
271*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val1, i32 *%ptr1 unordered, align 4
272*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val2, i32 *%ptr2 unordered, align 4
273*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val3, i32 *%ptr3 unordered, align 4
274*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val4, i32 *%ptr4 unordered, align 4
275*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val5, i32 *%ptr5 unordered, align 4
276*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val6, i32 *%ptr6 unordered, align 4
277*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val7, i32 *%ptr7 unordered, align 4
278*9880d681SAndroid Build Coastguard Worker  store atomic i32 %val8, i32 *%ptr8 unordered, align 4
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker  ret void
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker; ...likewise volatile accesses.
284*9880d681SAndroid Build Coastguard Workerdefine void @f7(i32 *%ptr0) {
285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
286*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mvc
287*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
288*9880d681SAndroid Build Coastguard Worker  %ptr1 = getelementptr i32, i32 *%ptr0, i64 2
289*9880d681SAndroid Build Coastguard Worker  %ptr2 = getelementptr i32, i32 *%ptr0, i64 4
290*9880d681SAndroid Build Coastguard Worker  %ptr3 = getelementptr i32, i32 *%ptr0, i64 6
291*9880d681SAndroid Build Coastguard Worker  %ptr4 = getelementptr i32, i32 *%ptr0, i64 8
292*9880d681SAndroid Build Coastguard Worker  %ptr5 = getelementptr i32, i32 *%ptr0, i64 10
293*9880d681SAndroid Build Coastguard Worker  %ptr6 = getelementptr i32, i32 *%ptr0, i64 12
294*9880d681SAndroid Build Coastguard Worker  %ptr7 = getelementptr i32, i32 *%ptr0, i64 14
295*9880d681SAndroid Build Coastguard Worker  %ptr8 = getelementptr i32, i32 *%ptr0, i64 16
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker  %val0 = load volatile i32 , i32 *%ptr0
298*9880d681SAndroid Build Coastguard Worker  %val1 = load volatile i32 , i32 *%ptr1
299*9880d681SAndroid Build Coastguard Worker  %val2 = load volatile i32 , i32 *%ptr2
300*9880d681SAndroid Build Coastguard Worker  %val3 = load volatile i32 , i32 *%ptr3
301*9880d681SAndroid Build Coastguard Worker  %val4 = load volatile i32 , i32 *%ptr4
302*9880d681SAndroid Build Coastguard Worker  %val5 = load volatile i32 , i32 *%ptr5
303*9880d681SAndroid Build Coastguard Worker  %val6 = load volatile i32 , i32 *%ptr6
304*9880d681SAndroid Build Coastguard Worker  %val7 = load volatile i32 , i32 *%ptr7
305*9880d681SAndroid Build Coastguard Worker  %val8 = load volatile i32 , i32 *%ptr8
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker  call void @foo()
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 *%ptr0
310*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 *%ptr1
311*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val2, i32 *%ptr2
312*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val3, i32 *%ptr3
313*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val4, i32 *%ptr4
314*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val5, i32 *%ptr5
315*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val6, i32 *%ptr6
316*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val7, i32 *%ptr7
317*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val8, i32 *%ptr8
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker  ret void
320*9880d681SAndroid Build Coastguard Worker}
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Worker; Check that LRL and STRL are not converted.
323*9880d681SAndroid Build Coastguard Workerdefine void @f8() {
324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
325*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mvc
326*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
327*9880d681SAndroid Build Coastguard Worker  %val0 = load i32 , i32 *@g0
328*9880d681SAndroid Build Coastguard Worker  %val1 = load i32 , i32 *@g1
329*9880d681SAndroid Build Coastguard Worker  %val2 = load i32 , i32 *@g2
330*9880d681SAndroid Build Coastguard Worker  %val3 = load i32 , i32 *@g3
331*9880d681SAndroid Build Coastguard Worker  %val4 = load i32 , i32 *@g4
332*9880d681SAndroid Build Coastguard Worker  %val5 = load i32 , i32 *@g5
333*9880d681SAndroid Build Coastguard Worker  %val6 = load i32 , i32 *@g6
334*9880d681SAndroid Build Coastguard Worker  %val7 = load i32 , i32 *@g7
335*9880d681SAndroid Build Coastguard Worker  %val8 = load i32 , i32 *@g8
336*9880d681SAndroid Build Coastguard Worker  %val9 = load i32 , i32 *@g9
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Worker  call void @foo()
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker  store i32 %val0, i32 *@g0
341*9880d681SAndroid Build Coastguard Worker  store i32 %val1, i32 *@g1
342*9880d681SAndroid Build Coastguard Worker  store i32 %val2, i32 *@g2
343*9880d681SAndroid Build Coastguard Worker  store i32 %val3, i32 *@g3
344*9880d681SAndroid Build Coastguard Worker  store i32 %val4, i32 *@g4
345*9880d681SAndroid Build Coastguard Worker  store i32 %val5, i32 *@g5
346*9880d681SAndroid Build Coastguard Worker  store i32 %val6, i32 *@g6
347*9880d681SAndroid Build Coastguard Worker  store i32 %val7, i32 *@g7
348*9880d681SAndroid Build Coastguard Worker  store i32 %val8, i32 *@g8
349*9880d681SAndroid Build Coastguard Worker  store i32 %val9, i32 *@g9
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Worker  ret void
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Worker; Likewise LGRL and STGRL.
355*9880d681SAndroid Build Coastguard Workerdefine void @f9() {
356*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
357*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mvc
358*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
359*9880d681SAndroid Build Coastguard Worker  %val0 = load i64 , i64 *@h0
360*9880d681SAndroid Build Coastguard Worker  %val1 = load i64 , i64 *@h1
361*9880d681SAndroid Build Coastguard Worker  %val2 = load i64 , i64 *@h2
362*9880d681SAndroid Build Coastguard Worker  %val3 = load i64 , i64 *@h3
363*9880d681SAndroid Build Coastguard Worker  %val4 = load i64 , i64 *@h4
364*9880d681SAndroid Build Coastguard Worker  %val5 = load i64 , i64 *@h5
365*9880d681SAndroid Build Coastguard Worker  %val6 = load i64 , i64 *@h6
366*9880d681SAndroid Build Coastguard Worker  %val7 = load i64 , i64 *@h7
367*9880d681SAndroid Build Coastguard Worker  %val8 = load i64 , i64 *@h8
368*9880d681SAndroid Build Coastguard Worker  %val9 = load i64 , i64 *@h9
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker  call void @foo()
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Worker  store i64 %val0, i64 *@h0
373*9880d681SAndroid Build Coastguard Worker  store i64 %val1, i64 *@h1
374*9880d681SAndroid Build Coastguard Worker  store i64 %val2, i64 *@h2
375*9880d681SAndroid Build Coastguard Worker  store i64 %val3, i64 *@h3
376*9880d681SAndroid Build Coastguard Worker  store i64 %val4, i64 *@h4
377*9880d681SAndroid Build Coastguard Worker  store i64 %val5, i64 *@h5
378*9880d681SAndroid Build Coastguard Worker  store i64 %val6, i64 *@h6
379*9880d681SAndroid Build Coastguard Worker  store i64 %val7, i64 *@h7
380*9880d681SAndroid Build Coastguard Worker  store i64 %val8, i64 *@h8
381*9880d681SAndroid Build Coastguard Worker  store i64 %val9, i64 *@h9
382*9880d681SAndroid Build Coastguard Worker
383*9880d681SAndroid Build Coastguard Worker  ret void
384*9880d681SAndroid Build Coastguard Worker}
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; This showed a problem with the way stack coloring updated instructions.
387*9880d681SAndroid Build Coastguard Worker; The copy from %val9 to %newval8 can be done using an MVC, which then
388*9880d681SAndroid Build Coastguard Worker; has two frame index operands.  Stack coloring chose a valid renumbering
389*9880d681SAndroid Build Coastguard Worker; [FI0, FI1] -> [FI1, FI2], but applied it in the form FI0 -> FI1 -> FI2,
390*9880d681SAndroid Build Coastguard Worker; so that both operands ended up being the same.
391*9880d681SAndroid Build Coastguard Workerdefine void @f10() {
392*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
393*9880d681SAndroid Build Coastguard Worker; CHECK: lgrl [[REG:%r[0-9]+]], h9
394*9880d681SAndroid Build Coastguard Worker; CHECK: stg [[REG]], [[VAL9:[0-9]+]](%r15)
395*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
396*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
397*9880d681SAndroid Build Coastguard Worker; CHECK: mvc [[NEWVAL8:[0-9]+]](8,%r15), [[VAL9]](%r15)
398*9880d681SAndroid Build Coastguard Worker; CHECK: brasl %r14, foo@PLT
399*9880d681SAndroid Build Coastguard Worker; CHECK: lg [[REG:%r[0-9]+]], [[NEWVAL8]](%r15)
400*9880d681SAndroid Build Coastguard Worker; CHECK: stgrl [[REG]], h8
401*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
402*9880d681SAndroid Build Coastguard Workerentry:
403*9880d681SAndroid Build Coastguard Worker  %val8 = load volatile i64 , i64 *@h8
404*9880d681SAndroid Build Coastguard Worker  %val0 = load volatile i64 , i64 *@h0
405*9880d681SAndroid Build Coastguard Worker  %val1 = load volatile i64 , i64 *@h1
406*9880d681SAndroid Build Coastguard Worker  %val2 = load volatile i64 , i64 *@h2
407*9880d681SAndroid Build Coastguard Worker  %val3 = load volatile i64 , i64 *@h3
408*9880d681SAndroid Build Coastguard Worker  %val4 = load volatile i64 , i64 *@h4
409*9880d681SAndroid Build Coastguard Worker  %val5 = load volatile i64 , i64 *@h5
410*9880d681SAndroid Build Coastguard Worker  %val6 = load volatile i64 , i64 *@h6
411*9880d681SAndroid Build Coastguard Worker  %val7 = load volatile i64 , i64 *@h7
412*9880d681SAndroid Build Coastguard Worker  %val9 = load volatile i64 , i64 *@h9
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker  call void @foo()
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val0, i64 *@h0
417*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val1, i64 *@h1
418*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
419*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
420*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
421*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
422*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
423*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Worker  %check = load volatile i64 , i64 *@h0
426*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i64 %check, 0
427*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %skip, label %fallthru
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Workerfallthru:
430*9880d681SAndroid Build Coastguard Worker  call void @foo()
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val0, i64 *@h0
433*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val1, i64 *@h1
434*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
435*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
436*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
437*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
438*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
439*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
440*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val8, i64 *@h8
441*9880d681SAndroid Build Coastguard Worker  br label %skip
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerskip:
444*9880d681SAndroid Build Coastguard Worker  %newval8 = phi i64 [ %val8, %entry ], [ %val9, %fallthru ]
445*9880d681SAndroid Build Coastguard Worker  call void @foo()
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val0, i64 *@h0
448*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val1, i64 *@h1
449*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
450*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
451*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
452*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
453*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
454*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
455*9880d681SAndroid Build Coastguard Worker  store volatile i64 %newval8, i64 *@h8
456*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val9, i64 *@h9
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Worker  ret void
459*9880d681SAndroid Build Coastguard Worker}
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Worker; This used to generate a no-op MVC.  It is very sensitive to spill heuristics.
462*9880d681SAndroid Build Coastguard Workerdefine void @f11() {
463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
464*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: mvc [[OFFSET:[0-9]+]](8,%r15), [[OFFSET]](%r15)
465*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
466*9880d681SAndroid Build Coastguard Workerentry:
467*9880d681SAndroid Build Coastguard Worker  %val0 = load volatile i64 , i64 *@h0
468*9880d681SAndroid Build Coastguard Worker  %val1 = load volatile i64 , i64 *@h1
469*9880d681SAndroid Build Coastguard Worker  %val2 = load volatile i64 , i64 *@h2
470*9880d681SAndroid Build Coastguard Worker  %val3 = load volatile i64 , i64 *@h3
471*9880d681SAndroid Build Coastguard Worker  %val4 = load volatile i64 , i64 *@h4
472*9880d681SAndroid Build Coastguard Worker  %val5 = load volatile i64 , i64 *@h5
473*9880d681SAndroid Build Coastguard Worker  %val6 = load volatile i64 , i64 *@h6
474*9880d681SAndroid Build Coastguard Worker  %val7 = load volatile i64 , i64 *@h7
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Worker  %altval0 = load volatile i64 , i64 *@h0
477*9880d681SAndroid Build Coastguard Worker  %altval1 = load volatile i64 , i64 *@h1
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Worker  call void @foo()
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val0, i64 *@h0
482*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val1, i64 *@h1
483*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
484*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
485*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
486*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
487*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
488*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Worker  %check = load volatile i64 , i64 *@h0
491*9880d681SAndroid Build Coastguard Worker  %cond = icmp eq i64 %check, 0
492*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a1, label %b1
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Workera1:
495*9880d681SAndroid Build Coastguard Worker  call void @foo()
496*9880d681SAndroid Build Coastguard Worker  br label %join1
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerb1:
499*9880d681SAndroid Build Coastguard Worker  call void @foo()
500*9880d681SAndroid Build Coastguard Worker  br label %join1
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerjoin1:
503*9880d681SAndroid Build Coastguard Worker  %newval0 = phi i64 [ %val0, %a1 ], [ %altval0, %b1 ]
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Worker  call void @foo()
506*9880d681SAndroid Build Coastguard Worker
507*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val1, i64 *@h1
508*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
509*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
510*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
511*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
512*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
513*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
514*9880d681SAndroid Build Coastguard Worker  br i1 %cond, label %a2, label %b2
515*9880d681SAndroid Build Coastguard Worker
516*9880d681SAndroid Build Coastguard Workera2:
517*9880d681SAndroid Build Coastguard Worker  call void @foo()
518*9880d681SAndroid Build Coastguard Worker  br label %join2
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Workerb2:
521*9880d681SAndroid Build Coastguard Worker  call void @foo()
522*9880d681SAndroid Build Coastguard Worker  br label %join2
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Workerjoin2:
525*9880d681SAndroid Build Coastguard Worker  %newval1 = phi i64 [ %val1, %a2 ], [ %altval1, %b2 ]
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Worker  call void @foo()
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
530*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
531*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
532*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
533*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
534*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
535*9880d681SAndroid Build Coastguard Worker
536*9880d681SAndroid Build Coastguard Worker  call void @foo()
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Worker  store volatile i64 %newval0, i64 *@h0
539*9880d681SAndroid Build Coastguard Worker  store volatile i64 %newval1, i64 *@h1
540*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val2, i64 *@h2
541*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val3, i64 *@h3
542*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val4, i64 *@h4
543*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val5, i64 *@h5
544*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val6, i64 *@h6
545*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val7, i64 *@h7
546*9880d681SAndroid Build Coastguard Worker
547*9880d681SAndroid Build Coastguard Worker  ret void
548*9880d681SAndroid Build Coastguard Worker}
549