1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
3 ; Stackmap Header: no constants - 6 callsites
4 ; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps
5 ; CHECK-NEXT: __LLVM_StackMaps:
15 ; CHECK-NEXT: .long L{{.*}}-_test
16 ; CHECK-NEXT: .short 0
18 ; CHECK-NEXT: .short 3
22 ; CHECK-NEXT: .short {{[0-9]+}}
27 ; CHECK-NEXT: .short {{[0-9]+}}
32 ; CHECK-NEXT: .short 0
34 define i64 @test() nounwind ssp uwtable {
36 call anyregcc void (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i32 0, i32 12, i8* null, i32 2, i32 1, i32 2, i64 3)
40 ; property access 1 - %obj is an anyreg call argument and should therefore be in a register
42 ; CHECK-NEXT: .long L{{.*}}-_property_access1
43 ; CHECK-NEXT: .short 0
45 ; CHECK-NEXT: .short 2
46 ; Loc 0: Register <-- this is the return register
49 ; CHECK-NEXT: .short {{[0-9]+}}
54 ; CHECK-NEXT: .short {{[0-9]+}}
56 define i64 @property_access1(i8* %obj) nounwind ssp uwtable {
58 %f = inttoptr i64 12297829382473034410 to i8*
59 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 1, i32 12, i8* %f, i32 1, i8* %obj)
63 ; property access 2 - %obj is an anyreg call argument and should therefore be in a register
65 ; CHECK-NEXT: .long L{{.*}}-_property_access2
66 ; CHECK-NEXT: .short 0
68 ; CHECK-NEXT: .short 2
69 ; Loc 0: Register <-- this is the return register
72 ; CHECK-NEXT: .short {{[0-9]+}}
77 ; CHECK-NEXT: .short {{[0-9]+}}
79 define i64 @property_access2() nounwind ssp uwtable {
81 %obj = alloca i64, align 8
82 %f = inttoptr i64 12297829382473034410 to i8*
83 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 2, i32 12, i8* %f, i32 1, i64* %obj)
87 ; property access 3 - %obj is a frame index
89 ; CHECK-NEXT: .long L{{.*}}-_property_access3
90 ; CHECK-NEXT: .short 0
92 ; CHECK-NEXT: .short 2
93 ; Loc 0: Register <-- this is the return register
96 ; CHECK-NEXT: .short {{[0-9]+}}
98 ; Loc 1: Register <-- this will be folded once folding for FI is implemented
100 ; CHECK-NEXT: .byte 0
101 ; CHECK-NEXT: .short {{[0-9]+}}
102 ; CHECK-NEXT: .long 0
103 define i64 @property_access3() nounwind ssp uwtable {
105 %obj = alloca i64, align 8
106 %f = inttoptr i64 12297829382473034410 to i8*
107 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 3, i32 12, i8* %f, i32 0, i64* %obj)
112 ; CHECK-NEXT: .long 4
113 ; CHECK-NEXT: .long L{{.*}}-_anyreg_test1
114 ; CHECK-NEXT: .short 0
116 ; CHECK-NEXT: .short 15
117 ; Loc 0: Register <-- this is the return register
118 ; CHECK-NEXT: .byte 1
119 ; CHECK-NEXT: .byte 0
120 ; CHECK-NEXT: .short {{[0-9]+}}
121 ; CHECK-NEXT: .long 0
123 ; CHECK-NEXT: .byte 1
124 ; CHECK-NEXT: .byte 0
125 ; CHECK-NEXT: .short {{[0-9]+}}
126 ; CHECK-NEXT: .long 0
128 ; CHECK-NEXT: .byte 1
129 ; CHECK-NEXT: .byte 0
130 ; CHECK-NEXT: .short {{[0-9]+}}
131 ; CHECK-NEXT: .long 0
133 ; CHECK-NEXT: .byte 1
134 ; CHECK-NEXT: .byte 0
135 ; CHECK-NEXT: .short {{[0-9]+}}
136 ; CHECK-NEXT: .long 0
138 ; CHECK-NEXT: .byte 1
139 ; CHECK-NEXT: .byte 0
140 ; CHECK-NEXT: .short {{[0-9]+}}
141 ; CHECK-NEXT: .long 0
143 ; CHECK-NEXT: .byte 1
144 ; CHECK-NEXT: .byte 0
145 ; CHECK-NEXT: .short {{[0-9]+}}
146 ; CHECK-NEXT: .long 0
148 ; CHECK-NEXT: .byte 1
149 ; CHECK-NEXT: .byte 0
150 ; CHECK-NEXT: .short {{[0-9]+}}
151 ; CHECK-NEXT: .long 0
153 ; CHECK-NEXT: .byte 1
154 ; CHECK-NEXT: .byte 0
155 ; CHECK-NEXT: .short {{[0-9]+}}
156 ; CHECK-NEXT: .long 0
158 ; CHECK-NEXT: .byte 1
159 ; CHECK-NEXT: .byte 0
160 ; CHECK-NEXT: .short {{[0-9]+}}
161 ; CHECK-NEXT: .long 0
163 ; CHECK-NEXT: .byte 1
164 ; CHECK-NEXT: .byte 0
165 ; CHECK-NEXT: .short {{[0-9]+}}
166 ; CHECK-NEXT: .long 0
168 ; CHECK-NEXT: .byte 1
169 ; CHECK-NEXT: .byte 0
170 ; CHECK-NEXT: .short {{[0-9]+}}
171 ; CHECK-NEXT: .long 0
173 ; CHECK-NEXT: .byte 1
174 ; CHECK-NEXT: .byte 0
175 ; CHECK-NEXT: .short {{[0-9]+}}
176 ; CHECK-NEXT: .long 0
178 ; CHECK-NEXT: .byte 1
179 ; CHECK-NEXT: .byte 0
180 ; CHECK-NEXT: .short {{[0-9]+}}
181 ; CHECK-NEXT: .long 0
183 ; CHECK-NEXT: .byte 1
184 ; CHECK-NEXT: .byte 0
185 ; CHECK-NEXT: .short {{[0-9]+}}
186 ; CHECK-NEXT: .long 0
188 ; CHECK-NEXT: .byte 1
189 ; CHECK-NEXT: .byte 0
190 ; CHECK-NEXT: .short {{[0-9]+}}
191 ; CHECK-NEXT: .long 0
192 define 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, i8* %a14) nounwind ssp uwtable {
194 %f = inttoptr i64 12297829382473034410 to i8*
195 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 4, i32 12, i8* %f, i32 14, 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, i8* %a14)
200 ; CHECK-NEXT: .long 5
201 ; CHECK-NEXT: .long L{{.*}}-_anyreg_test2
202 ; CHECK-NEXT: .short 0
204 ; CHECK-NEXT: .short 15
205 ; Loc 0: Register <-- this is the return register
206 ; CHECK-NEXT: .byte 1
207 ; CHECK-NEXT: .byte 0
208 ; CHECK-NEXT: .short {{[0-9]+}}
209 ; CHECK-NEXT: .long 0
211 ; CHECK-NEXT: .byte 1
212 ; CHECK-NEXT: .byte 0
213 ; CHECK-NEXT: .short {{[0-9]+}}
214 ; CHECK-NEXT: .long 0
216 ; CHECK-NEXT: .byte 1
217 ; CHECK-NEXT: .byte 0
218 ; CHECK-NEXT: .short {{[0-9]+}}
219 ; CHECK-NEXT: .long 0
221 ; CHECK-NEXT: .byte 1
222 ; CHECK-NEXT: .byte 0
223 ; CHECK-NEXT: .short {{[0-9]+}}
224 ; CHECK-NEXT: .long 0
226 ; CHECK-NEXT: .byte 1
227 ; CHECK-NEXT: .byte 0
228 ; CHECK-NEXT: .short {{[0-9]+}}
229 ; CHECK-NEXT: .long 0
231 ; CHECK-NEXT: .byte 1
232 ; CHECK-NEXT: .byte 0
233 ; CHECK-NEXT: .short {{[0-9]+}}
234 ; CHECK-NEXT: .long 0
236 ; CHECK-NEXT: .byte 1
237 ; CHECK-NEXT: .byte 0
238 ; CHECK-NEXT: .short {{[0-9]+}}
239 ; CHECK-NEXT: .long 0
241 ; CHECK-NEXT: .byte 1
242 ; CHECK-NEXT: .byte 0
243 ; CHECK-NEXT: .short {{[0-9]+}}
244 ; CHECK-NEXT: .long 0
246 ; CHECK-NEXT: .byte 1
247 ; CHECK-NEXT: .byte 0
248 ; CHECK-NEXT: .short {{[0-9]+}}
249 ; CHECK-NEXT: .long 0
251 ; CHECK-NEXT: .byte 1
252 ; CHECK-NEXT: .byte 0
253 ; CHECK-NEXT: .short {{[0-9]+}}
254 ; CHECK-NEXT: .long 0
256 ; CHECK-NEXT: .byte 1
257 ; CHECK-NEXT: .byte 0
258 ; CHECK-NEXT: .short {{[0-9]+}}
259 ; CHECK-NEXT: .long 0
261 ; CHECK-NEXT: .byte 1
262 ; CHECK-NEXT: .byte 0
263 ; CHECK-NEXT: .short {{[0-9]+}}
264 ; CHECK-NEXT: .long 0
266 ; CHECK-NEXT: .byte 1
267 ; CHECK-NEXT: .byte 0
268 ; CHECK-NEXT: .short {{[0-9]+}}
269 ; CHECK-NEXT: .long 0
271 ; CHECK-NEXT: .byte 1
272 ; CHECK-NEXT: .byte 0
273 ; CHECK-NEXT: .short {{[0-9]+}}
274 ; CHECK-NEXT: .long 0
276 ; CHECK-NEXT: .byte 1
277 ; CHECK-NEXT: .byte 0
278 ; CHECK-NEXT: .short {{[0-9]+}}
279 ; CHECK-NEXT: .long 0
280 define 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, i8* %a14) nounwind ssp uwtable {
282 %f = inttoptr i64 12297829382473034410 to i8*
283 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 5, i32 12, 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, i8* %a14)
287 declare void @llvm.experimental.patchpoint.void(i32, i32, i8*, i32, ...)
288 declare i64 @llvm.experimental.patchpoint.i64(i32, i32, i8*, i32, ...)