xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-stackmap.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-darwin -mattr=+reserve-x18                             < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-darwin -mattr=+reserve-x18 -fast-isel -fast-isel-abort=1 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker;
4*9880d681SAndroid Build Coastguard Worker; Note: Print verbose stackmaps using -debug-only=stackmaps.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; We are not getting the correct stack alignment when cross compiling for arm64.
7*9880d681SAndroid Build Coastguard Worker; So specify a datalayout here.
8*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  __LLVM_StackMaps:
12*9880d681SAndroid Build Coastguard Worker; Header
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 1
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 0
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
16*9880d681SAndroid Build Coastguard Worker; Num Functions
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 11
18*9880d681SAndroid Build Coastguard Worker; Num LargeConstants
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 2
20*9880d681SAndroid Build Coastguard Worker; Num Callsites
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long 11
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; Functions and stack size
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _constantargs
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _osrinline
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 32
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _osrcold
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _propertyRead
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _propertyWrite
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _jsVoidCall
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _jsIntCall
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _spilledValue
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 160
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _spilledStackMapValue
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 128
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _liveConstant
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 16
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad _clobberLR
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad 112
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; Num LargeConstants
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   4294967295
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   4294967296
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; Constant arguments
52*9880d681SAndroid Build Coastguard Worker;
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .quad   1
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   L{{.*}}-_constantargs
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  4
57*9880d681SAndroid Build Coastguard Worker; SmallConstant
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   65535
62*9880d681SAndroid Build Coastguard Worker; SmallConstant
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   65536
67*9880d681SAndroid Build Coastguard Worker; SmallConstant
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   5
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
72*9880d681SAndroid Build Coastguard Worker; LargeConstant at index 0
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   5
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   1
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerdefine void @constantargs() {
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker  %0 = inttoptr i64 244837814094590 to i8*
81*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 20, i8* %0, i32 0, i64 65535, i64 65536, i64 4294967295, i64 4294967296)
82*9880d681SAndroid Build Coastguard Worker  ret void
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; Inline OSR Exit
86*9880d681SAndroid Build Coastguard Worker;
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_osrinline
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long  0
98*9880d681SAndroid Build Coastguard Workerdefine void @osrinline(i64 %a, i64 %b) {
99*9880d681SAndroid Build Coastguard Workerentry:
100*9880d681SAndroid Build Coastguard Worker  ; Runtime void->void call.
101*9880d681SAndroid Build Coastguard Worker  call void inttoptr (i64 244837814094590 to void ()*)()
102*9880d681SAndroid Build Coastguard Worker  ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars.
103*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b)
104*9880d681SAndroid Build Coastguard Worker  ret void
105*9880d681SAndroid Build Coastguard Worker}
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; Cold OSR Exit
108*9880d681SAndroid Build Coastguard Worker;
109*9880d681SAndroid Build Coastguard Worker; 2 live variables in register.
110*9880d681SAndroid Build Coastguard Worker;
111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_osrcold
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
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 Workerdefine void @osrcold(i64 %a, i64 %b) {
123*9880d681SAndroid Build Coastguard Workerentry:
124*9880d681SAndroid Build Coastguard Worker  %test = icmp slt i64 %a, %b
125*9880d681SAndroid Build Coastguard Worker  br i1 %test, label %ret, label %cold
126*9880d681SAndroid Build Coastguard Workercold:
127*9880d681SAndroid Build Coastguard Worker  ; OSR patchpoint with 12-byte nop-slide and 2 live vars.
128*9880d681SAndroid Build Coastguard Worker  %thunk = inttoptr i64 244837814094590 to i8*
129*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 20, i8* %thunk, i32 0, i64 %a, i64 %b)
130*9880d681SAndroid Build Coastguard Worker  unreachable
131*9880d681SAndroid Build Coastguard Workerret:
132*9880d681SAndroid Build Coastguard Worker  ret void
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; Property Read
136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_propertyRead
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
139*9880d681SAndroid Build Coastguard Worker;
140*9880d681SAndroid Build Coastguard Worker; FIXME: There are currently no stackmap entries. After moving to
141*9880d681SAndroid Build Coastguard Worker; AnyRegCC, we will have entries for the object and return value.
142*9880d681SAndroid Build Coastguard Workerdefine i64 @propertyRead(i64* %obj) {
143*9880d681SAndroid Build Coastguard Workerentry:
144*9880d681SAndroid Build Coastguard Worker  %resolveRead = inttoptr i64 244837814094590 to i8*
145*9880d681SAndroid Build Coastguard Worker  %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveRead, i32 1, i64* %obj)
146*9880d681SAndroid Build Coastguard Worker  %add = add i64 %result, 3
147*9880d681SAndroid Build Coastguard Worker  ret i64 %add
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; Property Write
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_propertyWrite
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
162*9880d681SAndroid Build Coastguard Workerdefine void @propertyWrite(i64 %dummy1, i64* %obj, i64 %dummy2, i64 %a) {
163*9880d681SAndroid Build Coastguard Workerentry:
164*9880d681SAndroid Build Coastguard Worker  %resolveWrite = inttoptr i64 244837814094590 to i8*
165*9880d681SAndroid Build Coastguard Worker  call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveWrite, i32 2, i64* %obj, i64 %a)
166*9880d681SAndroid Build Coastguard Worker  ret void
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker; Void JS Call
170*9880d681SAndroid Build Coastguard Worker;
171*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers.
172*9880d681SAndroid Build Coastguard Worker;
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_jsVoidCall
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
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; CHECK-NEXT:   .byte   1
181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
184*9880d681SAndroid Build Coastguard Workerdefine void @jsVoidCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
185*9880d681SAndroid Build Coastguard Workerentry:
186*9880d681SAndroid Build Coastguard Worker  %resolveCall = inttoptr i64 244837814094590 to i8*
187*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
188*9880d681SAndroid Build Coastguard Worker  ret void
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; i64 JS Call
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers.
194*9880d681SAndroid Build Coastguard Worker;
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long   L{{.*}}-_jsIntCall
196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  2
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   1
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  {{[0-9]+}}
205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   0
206*9880d681SAndroid Build Coastguard Workerdefine i64 @jsIntCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
207*9880d681SAndroid Build Coastguard Workerentry:
208*9880d681SAndroid Build Coastguard Worker  %resolveCall = inttoptr i64 244837814094590 to i8*
209*9880d681SAndroid Build Coastguard Worker  %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
210*9880d681SAndroid Build Coastguard Worker  %add = add i64 %result, 3
211*9880d681SAndroid Build Coastguard Worker  ret i64 %add
212*9880d681SAndroid Build Coastguard Worker}
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker; Spilled stack map values.
215*9880d681SAndroid Build Coastguard Worker;
216*9880d681SAndroid Build Coastguard Worker; Verify 28 stack map entries.
217*9880d681SAndroid Build Coastguard Worker;
218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_spilledValue
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 28
221*9880d681SAndroid Build Coastguard Worker;
222*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from RBP.
223*9880d681SAndroid Build Coastguard Worker; Location: Indirect FP + ...
224*9880d681SAndroid Build Coastguard Worker; CHECK:        .byte 3
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 29
227*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, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27) {
228*9880d681SAndroid Build Coastguard Workerentry:
229*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 20, 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, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27)
230*9880d681SAndroid Build Coastguard Worker  ret void
231*9880d681SAndroid Build Coastguard Worker}
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Worker; Spilled stack map values.
234*9880d681SAndroid Build Coastguard Worker;
235*9880d681SAndroid Build Coastguard Worker; Verify 23 stack map entries.
236*9880d681SAndroid Build Coastguard Worker;
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_spilledStackMapValue
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 30
240*9880d681SAndroid Build Coastguard Worker;
241*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from RBP.
242*9880d681SAndroid Build Coastguard Worker; Location: Indirect FP + ...
243*9880d681SAndroid Build Coastguard Worker; CHECK:        .byte 3
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte 8
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 29
246*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, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27, i64 %l28, i64 %l29) {
247*9880d681SAndroid Build Coastguard Workerentry:
248*9880d681SAndroid Build Coastguard Worker  call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 16, 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, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27, i64 %l28, i64 %l29)
249*9880d681SAndroid Build Coastguard Worker  ret void
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker; Map a constant value.
254*9880d681SAndroid Build Coastguard Worker;
255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_liveConstant
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
257*9880d681SAndroid Build Coastguard Worker; 1 location
258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 1
259*9880d681SAndroid Build Coastguard Worker; Loc 0: SmallConstant
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   8
262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  0
263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   33
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Workerdefine void @liveConstant() {
266*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 8, i32 33)
267*9880d681SAndroid Build Coastguard Worker  ret void
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Worker; Map a value when LR is the only free register.
271*9880d681SAndroid Build Coastguard Worker;
272*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  .long L{{.*}}-_clobberLR
273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 0
274*9880d681SAndroid Build Coastguard Worker; 1 location
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short 1
276*9880d681SAndroid Build Coastguard Worker; Loc 0: Indirect FP (r29) - offset
277*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   3
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .byte   4
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .short  29
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   .long   -{{[0-9]+}}
281*9880d681SAndroid Build Coastguard Workerdefine void @clobberLR(i32 %a) {
282*9880d681SAndroid Build Coastguard Worker  tail call void asm sideeffect "nop", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x31}"() nounwind
283*9880d681SAndroid Build Coastguard Worker  tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 8, i32 %a)
284*9880d681SAndroid Build Coastguard Worker  ret void
285*9880d681SAndroid Build Coastguard Worker}
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.stackmap(i64, i32, ...)
288*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...)
289*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...)
290