xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/stackmap.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; Note: Print verbose stackmaps using -debug-only=stackmaps.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  __LLVM_StackMaps:
7*9880d681SAndroid Build Coastguard Worker; Header
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 0
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
11*9880d681SAndroid Build Coastguard Worker; Num Functions
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 16
13*9880d681SAndroid Build Coastguard Worker; Num LargeConstants
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 3
15*9880d681SAndroid Build Coastguard Worker; Num Callsites
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 20
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; Functions and stack size
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _constantargs
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _osrinline
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 24
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _osrcold
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _propertyRead
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _propertyWrite
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _jsVoidCall
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _jsIntCall
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _spilledValue
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _spilledStackMapValue
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _spillSubReg
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _subRegOffset
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _liveConstant
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _directFrameIdx
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _longid
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 8
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _clobberScratch
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 56
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _needsStackRealignment
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad -1
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; Large Constants
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   2147483648
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   4294967295
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   4294967296
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Callsites
58*9880d681SAndroid Build Coastguard Worker; Constant arguments
59*9880d681SAndroid Build Coastguard Worker;
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   1
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   L{{.*}}-_constantargs
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  12
64*9880d681SAndroid Build Coastguard Worker; SmallConstant
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -1
69*9880d681SAndroid Build Coastguard Worker; SmallConstant
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -1
74*9880d681SAndroid Build Coastguard Worker; SmallConstant
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   65536
79*9880d681SAndroid Build Coastguard Worker; SmallConstant
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   2000000000
84*9880d681SAndroid Build Coastguard Worker; SmallConstant
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   2147483647
89*9880d681SAndroid Build Coastguard Worker; SmallConstant
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -1
94*9880d681SAndroid Build Coastguard Worker; SmallConstant
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -1
99*9880d681SAndroid Build Coastguard Worker; SmallConstant
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
104*9880d681SAndroid Build Coastguard Worker; LargeConstant at index 0
105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   5
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
109*9880d681SAndroid Build Coastguard Worker; LargeConstant at index 1
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   5
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   1
114*9880d681SAndroid Build Coastguard Worker; LargeConstant at index 2
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   5
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   2
119*9880d681SAndroid Build Coastguard Worker; SmallConstant
120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -1
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine void @constantargs() {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  %0 = inttoptr i64 12345 to i8*
128*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 15, i8* %0, i32 0, i16 65535, i16 -1, i32 65536, i32 2000000000, i32 2147483647, i32 -1, i32 4294967295, i32 4294967296, i64 2147483648, i64 4294967295, i64 4294967296, i64 -1)
129*9880d681SAndroid Build Coastguard Worker  ret void
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; Inline OSR Exit
133*9880d681SAndroid Build Coastguard Worker;
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_osrinline
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
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 Workerdefine void @osrinline(i64 %a, i64 %b) {
146*9880d681SAndroid Build Coastguard Workerentry:
147*9880d681SAndroid Build Coastguard Worker  ; Runtime void->void call.
148*9880d681SAndroid Build Coastguard Worker  call void inttoptr (i64 -559038737 to void ()*)()
149*9880d681SAndroid Build Coastguard Worker  ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars.
150*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b)
151*9880d681SAndroid Build Coastguard Worker  ret void
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker; Cold OSR Exit
155*9880d681SAndroid Build Coastguard Worker;
156*9880d681SAndroid Build Coastguard Worker; 2 live variables in register.
157*9880d681SAndroid Build Coastguard Worker;
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_osrcold
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
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; CHECK-NEXT:   .byte   1
166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
169*9880d681SAndroid Build Coastguard Workerdefine void @osrcold(i64 %a, i64 %b) {
170*9880d681SAndroid Build Coastguard Workerentry:
171*9880d681SAndroid Build Coastguard Worker  %test = icmp slt i64 %a, %b
172*9880d681SAndroid Build Coastguard Worker  br i1 %test, label %ret, label %cold
173*9880d681SAndroid Build Coastguard Workercold:
174*9880d681SAndroid Build Coastguard Worker  ; OSR patchpoint with 12-byte nop-slide and 2 live vars.
175*9880d681SAndroid Build Coastguard Worker  %thunk = inttoptr i64 -559038737 to i8*
176*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 15, i8* %thunk, i32 0, i64 %a, i64 %b)
177*9880d681SAndroid Build Coastguard Worker  unreachable
178*9880d681SAndroid Build Coastguard Workerret:
179*9880d681SAndroid Build Coastguard Worker  ret void
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker; Property Read
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_propertyRead
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
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; CHECK-NEXT:   .byte   1
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
194*9880d681SAndroid Build Coastguard Workerdefine i64 @propertyRead(i64* %obj) {
195*9880d681SAndroid Build Coastguard Workerentry:
196*9880d681SAndroid Build Coastguard Worker  %resolveRead = inttoptr i64 -559038737 to i8*
197*9880d681SAndroid Build Coastguard Worker  %result = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 15, i8* %resolveRead, i32 1, i64* %obj)
198*9880d681SAndroid Build Coastguard Worker  %add = add i64 %result, 3
199*9880d681SAndroid Build Coastguard Worker  ret i64 %add
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker; Property Write
203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_propertyWrite
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
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 Worker; CHECK-NEXT:   .byte   1
211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
214*9880d681SAndroid Build Coastguard Workerdefine void @propertyWrite(i64 %dummy1, i64* %obj, i64 %dummy2, i64 %a) {
215*9880d681SAndroid Build Coastguard Workerentry:
216*9880d681SAndroid Build Coastguard Worker  %resolveWrite = inttoptr i64 -559038737 to i8*
217*9880d681SAndroid Build Coastguard Worker  call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 15, i8* %resolveWrite, i32 2, i64* %obj, i64 %a)
218*9880d681SAndroid Build Coastguard Worker  ret void
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker; Void JS Call
222*9880d681SAndroid Build Coastguard Worker;
223*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers.
224*9880d681SAndroid Build Coastguard Worker;
225*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_jsVoidCall
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
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; CHECK-NEXT:   .byte   1
233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
236*9880d681SAndroid Build Coastguard Workerdefine void @jsVoidCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
237*9880d681SAndroid Build Coastguard Workerentry:
238*9880d681SAndroid Build Coastguard Worker  %resolveCall = inttoptr i64 -559038737 to i8*
239*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 15, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
240*9880d681SAndroid Build Coastguard Worker  ret void
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Worker; i64 JS Call
244*9880d681SAndroid Build Coastguard Worker;
245*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers.
246*9880d681SAndroid Build Coastguard Worker;
247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_jsIntCall
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
250*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
258*9880d681SAndroid Build Coastguard Workerdefine i64 @jsIntCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
259*9880d681SAndroid Build Coastguard Workerentry:
260*9880d681SAndroid Build Coastguard Worker  %resolveCall = inttoptr i64 -559038737 to i8*
261*9880d681SAndroid Build Coastguard Worker  %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 15, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
262*9880d681SAndroid Build Coastguard Worker  %add = add i64 %result, 3
263*9880d681SAndroid Build Coastguard Worker  ret i64 %add
264*9880d681SAndroid Build Coastguard Worker}
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker; Spilled stack map values.
267*9880d681SAndroid Build Coastguard Worker;
268*9880d681SAndroid Build Coastguard Worker; Verify 17 stack map entries.
269*9880d681SAndroid Build Coastguard Worker;
270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_spilledValue
271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 17
273*9880d681SAndroid Build Coastguard Worker;
274*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from RBP.
275*9880d681SAndroid Build Coastguard Worker; Location: Indirect RBP + ...
276*9880d681SAndroid Build Coastguard Worker; CHECK:        .byte 3
277*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 6
279*9880d681SAndroid Build Coastguard Workerdefine void @spilledValue(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16) {
280*9880d681SAndroid Build Coastguard Workerentry:
281*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 15, i8* null, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16)
282*9880d681SAndroid Build Coastguard Worker  ret void
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Worker; Spilled stack map values.
286*9880d681SAndroid Build Coastguard Worker;
287*9880d681SAndroid Build Coastguard Worker; Verify 17 stack map entries.
288*9880d681SAndroid Build Coastguard Worker;
289*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_spilledStackMapValue
290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 17
292*9880d681SAndroid Build Coastguard Worker;
293*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from RBP.
294*9880d681SAndroid Build Coastguard Worker; Location: Indirect RBP + ...
295*9880d681SAndroid Build Coastguard Worker; CHECK:        .byte 3
296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 6
298*9880d681SAndroid Build Coastguard Workerdefine webkit_jscc void @spilledStackMapValue(i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16) {
299*9880d681SAndroid Build Coastguard Workerentry:
300*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 15, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16)
301*9880d681SAndroid Build Coastguard Worker  ret void
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Worker; Spill a subregister stackmap operand.
305*9880d681SAndroid Build Coastguard Worker;
306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_spillSubReg
307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
308*9880d681SAndroid Build Coastguard Worker; 4 locations
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 1
310*9880d681SAndroid Build Coastguard Worker;
311*9880d681SAndroid Build Coastguard Worker; Check that the subregister operand is a 4-byte spill.
312*9880d681SAndroid Build Coastguard Worker; Location: Indirect, 4-byte, RBP + ...
313*9880d681SAndroid Build Coastguard Worker; CHECK:        .byte 3
314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 4
315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 6
316*9880d681SAndroid Build Coastguard Workerdefine void @spillSubReg(i64 %arg) #0 {
317*9880d681SAndroid Build Coastguard Workerbb:
318*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb1, label %bb2
319*9880d681SAndroid Build Coastguard Worker
320*9880d681SAndroid Build Coastguard Workerbb1:
321*9880d681SAndroid Build Coastguard Worker  unreachable
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerbb2:
324*9880d681SAndroid Build Coastguard Worker  %tmp = load i64, i64* inttoptr (i64 140685446136880 to i64*)
325*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb16, label %bb17
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerbb16:
328*9880d681SAndroid Build Coastguard Worker  unreachable
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerbb17:
331*9880d681SAndroid Build Coastguard Worker  %tmp32 = trunc i64 %tmp to i32
332*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb60, label %bb61
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerbb60:
335*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
336*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 13, i32 5, i32 %tmp32)
337*9880d681SAndroid Build Coastguard Worker  unreachable
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Workerbb61:
340*9880d681SAndroid Build Coastguard Worker  unreachable
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker; Map a single byte subregister. There is no DWARF register number, so
344*9880d681SAndroid Build Coastguard Worker; we expect the register to be encoded with the proper size and spill offset. We don't know which
345*9880d681SAndroid Build Coastguard Worker;
346*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_subRegOffset
347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
348*9880d681SAndroid Build Coastguard Worker; 2 locations
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 2
350*9880d681SAndroid Build Coastguard Worker;
351*9880d681SAndroid Build Coastguard Worker; Check that the subregister operands are 1-byte spills.
352*9880d681SAndroid Build Coastguard Worker; Location 0: Register, 4-byte, AL
353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
355*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
357*9880d681SAndroid Build Coastguard Worker;
358*9880d681SAndroid Build Coastguard Worker; Location 1: Register, 4-byte, BL
359*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 3
362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 0
363*9880d681SAndroid Build Coastguard Workerdefine void @subRegOffset(i16 %arg) {
364*9880d681SAndroid Build Coastguard Worker  %v = mul i16 %arg, 5
365*9880d681SAndroid Build Coastguard Worker  %a0 = trunc i16 %v to i8
366*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{bx}"() nounwind
367*9880d681SAndroid Build Coastguard Worker  %arghi = lshr i16 %v, 8
368*9880d681SAndroid Build Coastguard Worker  %a1 = trunc i16 %arghi to i8
369*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"() nounwind
370*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 5, i8 %a0, i8 %a1)
371*9880d681SAndroid Build Coastguard Worker  ret void
372*9880d681SAndroid Build Coastguard Worker}
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Worker; Map a constant value.
375*9880d681SAndroid Build Coastguard Worker;
376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_liveConstant
377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
378*9880d681SAndroid Build Coastguard Worker; 1 location
379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 1
380*9880d681SAndroid Build Coastguard Worker; Loc 0: SmallConstant
381*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
382*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
383*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
384*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   33
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine void @liveConstant() {
387*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 5, i32 33)
388*9880d681SAndroid Build Coastguard Worker  ret void
389*9880d681SAndroid Build Coastguard Worker}
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Worker; Directly map an alloca's address.
392*9880d681SAndroid Build Coastguard Worker;
393*9880d681SAndroid Build Coastguard Worker; Callsite 16
394*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_directFrameIdx
395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
396*9880d681SAndroid Build Coastguard Worker; 1 location
397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	1
398*9880d681SAndroid Build Coastguard Worker; Loc 0: Direct RBP - ofs
399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	2
400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	8
401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	6
402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long
403*9880d681SAndroid Build Coastguard Worker
404*9880d681SAndroid Build Coastguard Worker; Callsite 17
405*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long	L{{.*}}-_directFrameIdx
406*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	0
407*9880d681SAndroid Build Coastguard Worker; 2 locations
408*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	2
409*9880d681SAndroid Build Coastguard Worker; Loc 0: Direct RBP - ofs
410*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	2
411*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	8
412*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	6
413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long
414*9880d681SAndroid Build Coastguard Worker; Loc 1: Direct RBP - ofs
415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	2
416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte	8
417*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short	6
418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long
419*9880d681SAndroid Build Coastguard Workerdefine void @directFrameIdx() {
420*9880d681SAndroid Build Coastguard Workerentry:
421*9880d681SAndroid Build Coastguard Worker  %metadata1 = alloca i64, i32 3, align 8
422*9880d681SAndroid Build Coastguard Worker  store i64 11, i64* %metadata1
423*9880d681SAndroid Build Coastguard Worker  store i64 12, i64* %metadata1
424*9880d681SAndroid Build Coastguard Worker  store i64 13, i64* %metadata1
425*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, i64* %metadata1)
426*9880d681SAndroid Build Coastguard Worker  %metadata2 = alloca i8, i32 4, align 8
427*9880d681SAndroid Build Coastguard Worker  %metadata3 = alloca i16, i32 4, align 8
428*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 17, i32 5, i8* null, i32 0, i8* %metadata2, i16* %metadata3)
429*9880d681SAndroid Build Coastguard Worker  ret void
430*9880d681SAndroid Build Coastguard Worker}
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Worker; Test a 64-bit ID.
433*9880d681SAndroid Build Coastguard Worker;
434*9880d681SAndroid Build Coastguard Worker; CHECK:        .quad 4294967295
435*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_longid
436*9880d681SAndroid Build Coastguard Worker; CHECK:        .quad 4294967296
437*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_longid
438*9880d681SAndroid Build Coastguard Worker; CHECK:        .quad 9223372036854775807
439*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_longid
440*9880d681SAndroid Build Coastguard Worker; CHECK:        .quad -1
441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_longid
442*9880d681SAndroid Build Coastguard Workerdefine void @longid() {
443*9880d681SAndroid Build Coastguard Workerentry:
444*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967295, i32 0, i8* null, i32 0)
445*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4294967296, i32 0, i8* null, i32 0)
446*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 9223372036854775807, i32 0, i8* null, i32 0)
447*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 -1, i32 0, i8* null, i32 0)
448*9880d681SAndroid Build Coastguard Worker  ret void
449*9880d681SAndroid Build Coastguard Worker}
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker; Map a value when R11 is the only free register.
452*9880d681SAndroid Build Coastguard Worker; The scratch register should not be used for a live stackmap value.
453*9880d681SAndroid Build Coastguard Worker;
454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_clobberScratch
455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
456*9880d681SAndroid Build Coastguard Worker; 1 location
457*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 1
458*9880d681SAndroid Build Coastguard Worker; Loc 0: Indirect fp - offset
459*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   3
460*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
461*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  6
462*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -{{[0-9]+}}
463*9880d681SAndroid Build Coastguard Workerdefine void @clobberScratch(i32 %a) {
464*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r12},~{r13},~{r14},~{r15}"() nounwind
465*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 8, i32 %a)
466*9880d681SAndroid Build Coastguard Worker  ret void
467*9880d681SAndroid Build Coastguard Worker}
468*9880d681SAndroid Build Coastguard Worker
469*9880d681SAndroid Build Coastguard Worker; A stack frame which needs to be realigned at runtime (to meet alignment
470*9880d681SAndroid Build Coastguard Worker; criteria for values on the stack) does not have a fixed frame size.
471*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_needsStackRealignment
472*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
473*9880d681SAndroid Build Coastguard Worker; 0 locations
474*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
475*9880d681SAndroid Build Coastguard Workerdefine void @needsStackRealignment() {
476*9880d681SAndroid Build Coastguard Worker  %val = alloca i64, i32 3, align 128
477*9880d681SAndroid Build Coastguard Worker  tail call void (...) @escape_values(i64* %val)
478*9880d681SAndroid Build Coastguard Worker; Note: Adding any non-constant to the stackmap would fail because we
479*9880d681SAndroid Build Coastguard Worker; expected to be able to address off the frame pointer.  In a realigned
480*9880d681SAndroid Build Coastguard Worker; frame, we must use the stack pointer instead.  This is a separate bug.
481*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0)
482*9880d681SAndroid Build Coastguard Worker  ret void
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Workerdeclare void @escape_values(...)
485*9880d681SAndroid Build Coastguard Worker
486*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.stackmap(i64, i32, ...)
487*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
488*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)
489