xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/anyregcc.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin                  -disable-fp-elim | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7     -disable-fp-elim | FileCheck --check-prefix=SSE %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -disable-fp-elim | FileCheck --check-prefix=AVX %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; Stackmap Header: no constants - 6 callsites
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .section __LLVM_STACKMAPS,__llvm_stackmaps
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   __LLVM_StackMaps:
9*9880d681SAndroid Build Coastguard Worker; Header
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 0
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
13*9880d681SAndroid Build Coastguard Worker; Num Functions
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 8
15*9880d681SAndroid Build Coastguard Worker; Num Constants
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
17*9880d681SAndroid Build Coastguard Worker; Num Callsites
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 8
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; Functions and stack size
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _test
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _property_access1
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _property_access2
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 24
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _property_access3
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 24
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _anyreg_test1
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _anyreg_test2
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _patchpoint_spilldef
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _patchpoint_spillargs
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 88
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; No constants
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; Callsites
41*9880d681SAndroid Build Coastguard Worker; test
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_test
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
44*9880d681SAndroid Build Coastguard Worker; 3 locations
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  3
46*9880d681SAndroid Build Coastguard Worker; Loc 0: Register
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 4
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
51*9880d681SAndroid Build Coastguard Worker; Loc 1: Register
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 4
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
56*9880d681SAndroid Build Coastguard Worker; Loc 2: Constant 3
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 4
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 3
61*9880d681SAndroid Build Coastguard Workerdefine i64 @test() nounwind ssp uwtable {
62*9880d681SAndroid Build Coastguard Workerentry:
63*9880d681SAndroid Build Coastguard Worker  call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 15, i8* null, i32 2, i32 1, i32 2, i64 3)
64*9880d681SAndroid Build Coastguard Worker  ret i64 0
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; property access 1 - %obj is an anyreg call argument and should therefore be in a register
68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_property_access1
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
70*9880d681SAndroid Build Coastguard Worker; 2 locations
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
72*9880d681SAndroid Build Coastguard Worker; Loc 0: Register <-- this is the return register
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
77*9880d681SAndroid Build Coastguard Worker; Loc 1: Register
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
82*9880d681SAndroid Build Coastguard Workerdefine i64 @property_access1(i8* %obj) nounwind ssp uwtable {
83*9880d681SAndroid Build Coastguard Workerentry:
84*9880d681SAndroid Build Coastguard Worker  %f = inttoptr i64 12297829382473034410 to i8*
85*9880d681SAndroid Build Coastguard Worker  %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 1, i32 15, i8* %f, i32 1, i8* %obj)
86*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; property access 2 - %obj is an anyreg call argument and should therefore be in a register
90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_property_access2
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
92*9880d681SAndroid Build Coastguard Worker; 2 locations
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
94*9880d681SAndroid Build Coastguard Worker; Loc 0: Register <-- this is the return register
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
99*9880d681SAndroid Build Coastguard Worker; Loc 1: Register
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
104*9880d681SAndroid Build Coastguard Workerdefine i64 @property_access2() nounwind ssp uwtable {
105*9880d681SAndroid Build Coastguard Workerentry:
106*9880d681SAndroid Build Coastguard Worker  %obj = alloca i64, align 8
107*9880d681SAndroid Build Coastguard Worker  %f = inttoptr i64 12297829382473034410 to i8*
108*9880d681SAndroid Build Coastguard Worker  %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 2, i32 15, i8* %f, i32 1, i64* %obj)
109*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; property access 3 - %obj is a frame index
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_property_access3
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
115*9880d681SAndroid Build Coastguard Worker; 2 locations
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
117*9880d681SAndroid Build Coastguard Worker; Loc 0: Register <-- this is the return register
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
122*9880d681SAndroid Build Coastguard Worker; Loc 1: Direct RBP - ofs
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 2
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 6
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long
127*9880d681SAndroid Build Coastguard Workerdefine i64 @property_access3() nounwind ssp uwtable {
128*9880d681SAndroid Build Coastguard Workerentry:
129*9880d681SAndroid Build Coastguard Worker  %obj = alloca i64, align 8
130*9880d681SAndroid Build Coastguard Worker  %f = inttoptr i64 12297829382473034410 to i8*
131*9880d681SAndroid Build Coastguard Worker  %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 3, i32 15, i8* %f, i32 0, i64* %obj)
132*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; anyreg_test1
136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_anyreg_test1
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
138*9880d681SAndroid Build Coastguard Worker; 14 locations
139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  14
140*9880d681SAndroid Build Coastguard Worker; Loc 0: Register <-- this is the return register
141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
145*9880d681SAndroid Build Coastguard Worker; Loc 1: Register
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
150*9880d681SAndroid Build Coastguard Worker; Loc 2: Register
151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
155*9880d681SAndroid Build Coastguard Worker; Loc 3: Register
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
160*9880d681SAndroid Build Coastguard Worker; Loc 4: Register
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
165*9880d681SAndroid Build Coastguard Worker; Loc 5: Register
166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
170*9880d681SAndroid Build Coastguard Worker; Loc 6: Register
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
175*9880d681SAndroid Build Coastguard Worker; Loc 7: Register
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
180*9880d681SAndroid Build Coastguard Worker; Loc 8: Register
181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
185*9880d681SAndroid Build Coastguard Worker; Loc 9: Register
186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
190*9880d681SAndroid Build Coastguard Worker; Loc 10: Register
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
195*9880d681SAndroid Build Coastguard Worker; Loc 11: Register
196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
200*9880d681SAndroid Build Coastguard Worker; Loc 12: Register
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
205*9880d681SAndroid Build Coastguard Worker; Loc 13: Register
206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
210*9880d681SAndroid Build Coastguard Workerdefine i64 @anyreg_test1(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
211*9880d681SAndroid Build Coastguard Workerentry:
212*9880d681SAndroid Build Coastguard Worker  %f = inttoptr i64 12297829382473034410 to i8*
213*9880d681SAndroid Build Coastguard Worker  %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 4, i32 15, i8* %f, i32 13, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
214*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; anyreg_test2
218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_anyreg_test2
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
220*9880d681SAndroid Build Coastguard Worker; 14 locations
221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  14
222*9880d681SAndroid Build Coastguard Worker; Loc 0: Register <-- this is the return register
223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
227*9880d681SAndroid Build Coastguard Worker; Loc 1: Register
228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
232*9880d681SAndroid Build Coastguard Worker; Loc 2: Register
233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
237*9880d681SAndroid Build Coastguard Worker; Loc 3: Register
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
242*9880d681SAndroid Build Coastguard Worker; Loc 4: Register
243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
247*9880d681SAndroid Build Coastguard Worker; Loc 5: Register
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
250*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
252*9880d681SAndroid Build Coastguard Worker; Loc 6: Register
253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
257*9880d681SAndroid Build Coastguard Worker; Loc 7: Register
258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
262*9880d681SAndroid Build Coastguard Worker; Loc 8: Register
263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
267*9880d681SAndroid Build Coastguard Worker; Loc 9: Register
268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
272*9880d681SAndroid Build Coastguard Worker; Loc 10: Register
273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
277*9880d681SAndroid Build Coastguard Worker; Loc 11: Register
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
282*9880d681SAndroid Build Coastguard Worker; Loc 12: Register
283*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
284*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
287*9880d681SAndroid Build Coastguard Worker; Loc 13: Register
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short {{[0-9]+}}
291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
292*9880d681SAndroid Build Coastguard Workerdefine i64 @anyreg_test2(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
293*9880d681SAndroid Build Coastguard Workerentry:
294*9880d681SAndroid Build Coastguard Worker  %f = inttoptr i64 12297829382473034410 to i8*
295*9880d681SAndroid Build Coastguard Worker  %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 15, i8* %f, i32 8, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
296*9880d681SAndroid Build Coastguard Worker  ret i64 %ret
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker; Test spilling the return value of an anyregcc call.
300*9880d681SAndroid Build Coastguard Worker;
301*9880d681SAndroid Build Coastguard Worker; <rdar://problem/15432754> [JS] Assertion: "Folded a def to a non-store!"
302*9880d681SAndroid Build Coastguard Worker;
303*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .long L{{.*}}-_patchpoint_spilldef
304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0
305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 3
306*9880d681SAndroid Build Coastguard Worker; Loc 0: Register (some register that will be spilled to the stack)
307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}}
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
311*9880d681SAndroid Build Coastguard Worker; Loc 1: Register RDI
312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 5
315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
316*9880d681SAndroid Build Coastguard Worker; Loc 1: Register RSI
317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 4
320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
321*9880d681SAndroid Build Coastguard Workerdefine i64 @patchpoint_spilldef(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
322*9880d681SAndroid Build Coastguard Workerentry:
323*9880d681SAndroid Build Coastguard Worker  %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 12, i32 15, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2)
324*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"() nounwind
325*9880d681SAndroid Build Coastguard Worker  ret i64 %result
326*9880d681SAndroid Build Coastguard Worker}
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Worker; Test spilling the arguments of an anyregcc call.
329*9880d681SAndroid Build Coastguard Worker;
330*9880d681SAndroid Build Coastguard Worker; <rdar://problem/15487687> [JS] AnyRegCC argument ends up being spilled
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .long L{{.*}}-_patchpoint_spillargs
333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0
334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 5
335*9880d681SAndroid Build Coastguard Worker; Loc 0: Return a register
336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}}
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
340*9880d681SAndroid Build Coastguard Worker; Loc 1: Arg0 in a Register
341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}}
344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
345*9880d681SAndroid Build Coastguard Worker; Loc 2: Arg1 in a Register
346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  1
347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}}
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long  0
350*9880d681SAndroid Build Coastguard Worker; Loc 3: Arg2 spilled to RBP +
351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  3
352*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 6
354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long
355*9880d681SAndroid Build Coastguard Worker; Loc 4: Arg3 spilled to RBP +
356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  3
357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte  8
358*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 6
359*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long
360*9880d681SAndroid Build Coastguard Workerdefine i64 @patchpoint_spillargs(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
361*9880d681SAndroid Build Coastguard Workerentry:
362*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"() nounwind
363*9880d681SAndroid Build Coastguard Worker  %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 13, i32 15, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
364*9880d681SAndroid Build Coastguard Worker  ret i64 %result
365*9880d681SAndroid Build Coastguard Worker}
366*9880d681SAndroid Build Coastguard Worker
367*9880d681SAndroid Build Coastguard Worker; Make sure all regs are spilled
368*9880d681SAndroid Build Coastguard Workerdefine anyregcc void @anyregcc1() {
369*9880d681SAndroid Build Coastguard Workerentry:
370*9880d681SAndroid Build Coastguard Worker;SSE-LABEL: anyregcc1
371*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rbp
372*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rax
373*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r15
374*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r14
375*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r13
376*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r12
377*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r11
378*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r10
379*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r9
380*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %r8
381*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rdi
382*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rsi
383*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rdx
384*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rcx
385*9880d681SAndroid Build Coastguard Worker;SSE:      pushq %rbx
386*9880d681SAndroid Build Coastguard Worker;SSE:      movaps %xmm15
387*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm14
388*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm13
389*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm12
390*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm11
391*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm10
392*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm9
393*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm8
394*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm7
395*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm6
396*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm5
397*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm4
398*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm3
399*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm2
400*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm1
401*9880d681SAndroid Build Coastguard Worker;SSE-NEXT: movaps %xmm0
402*9880d681SAndroid Build Coastguard Worker;AVX-LABEL:anyregcc1
403*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rbp
404*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rax
405*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r15
406*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r14
407*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r13
408*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r12
409*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r11
410*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r10
411*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r9
412*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %r8
413*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rdi
414*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rsi
415*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rdx
416*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rcx
417*9880d681SAndroid Build Coastguard Worker;AVX:      pushq %rbx
418*9880d681SAndroid Build Coastguard Worker;AVX:      vmovaps %ymm15
419*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm14
420*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm13
421*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm12
422*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm11
423*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm10
424*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm9
425*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm8
426*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm7
427*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm6
428*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm5
429*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm4
430*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm3
431*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm2
432*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm1
433*9880d681SAndroid Build Coastguard Worker;AVX-NEXT: vmovaps %ymm0
434*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "", "~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15},~{rbp},~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15}"()
435*9880d681SAndroid Build Coastguard Worker  ret void
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Worker; Make sure we don't spill any XMMs/YMMs
439*9880d681SAndroid Build Coastguard Workerdeclare anyregcc void @foo()
440*9880d681SAndroid Build Coastguard Workerdefine void @anyregcc2() {
441*9880d681SAndroid Build Coastguard Workerentry:
442*9880d681SAndroid Build Coastguard Worker;SSE-LABEL: anyregcc2
443*9880d681SAndroid Build Coastguard Worker;SSE-NOT: movaps %xmm
444*9880d681SAndroid Build Coastguard Worker;AVX-LABEL: anyregcc2
445*9880d681SAndroid Build Coastguard Worker;AVX-NOT: vmovups %ymm
446*9880d681SAndroid Build Coastguard Worker  %a0 = call <2 x double> asm sideeffect "", "={xmm0}"() nounwind
447*9880d681SAndroid Build Coastguard Worker  %a1 = call <2 x double> asm sideeffect "", "={xmm1}"() nounwind
448*9880d681SAndroid Build Coastguard Worker  %a2 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind
449*9880d681SAndroid Build Coastguard Worker  %a3 = call <2 x double> asm sideeffect "", "={xmm3}"() nounwind
450*9880d681SAndroid Build Coastguard Worker  %a4 = call <2 x double> asm sideeffect "", "={xmm4}"() nounwind
451*9880d681SAndroid Build Coastguard Worker  %a5 = call <2 x double> asm sideeffect "", "={xmm5}"() nounwind
452*9880d681SAndroid Build Coastguard Worker  %a6 = call <2 x double> asm sideeffect "", "={xmm6}"() nounwind
453*9880d681SAndroid Build Coastguard Worker  %a7 = call <2 x double> asm sideeffect "", "={xmm7}"() nounwind
454*9880d681SAndroid Build Coastguard Worker  %a8 = call <2 x double> asm sideeffect "", "={xmm8}"() nounwind
455*9880d681SAndroid Build Coastguard Worker  %a9 = call <2 x double> asm sideeffect "", "={xmm9}"() nounwind
456*9880d681SAndroid Build Coastguard Worker  %a10 = call <2 x double> asm sideeffect "", "={xmm10}"() nounwind
457*9880d681SAndroid Build Coastguard Worker  %a11 = call <2 x double> asm sideeffect "", "={xmm11}"() nounwind
458*9880d681SAndroid Build Coastguard Worker  %a12 = call <2 x double> asm sideeffect "", "={xmm12}"() nounwind
459*9880d681SAndroid Build Coastguard Worker  %a13 = call <2 x double> asm sideeffect "", "={xmm13}"() nounwind
460*9880d681SAndroid Build Coastguard Worker  %a14 = call <2 x double> asm sideeffect "", "={xmm14}"() nounwind
461*9880d681SAndroid Build Coastguard Worker  %a15 = call <2 x double> asm sideeffect "", "={xmm15}"() nounwind
462*9880d681SAndroid Build Coastguard Worker  call anyregcc void @foo()
463*9880d681SAndroid Build Coastguard Worker  call void asm sideeffect "", "{xmm0},{xmm1},{xmm2},{xmm3},{xmm4},{xmm5},{xmm6},{xmm7},{xmm8},{xmm9},{xmm10},{xmm11},{xmm12},{xmm13},{xmm14},{xmm15}"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> %a3, <2 x double> %a4, <2 x double> %a5, <2 x double> %a6, <2 x double> %a7, <2 x double> %a8, <2 x double> %a9, <2 x double> %a10, <2 x double> %a11, <2 x double> %a12, <2 x double> %a13, <2 x double> %a14, <2 x double> %a15)
464*9880d681SAndroid Build Coastguard Worker  ret void
465*9880d681SAndroid Build Coastguard Worker}
466*9880d681SAndroid Build Coastguard Worker
467*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
468*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)
469