1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | 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; We are not getting the correct stack alignment when cross compiling for arm64. 6*9880d681SAndroid Build Coastguard Worker; So specify a datalayout here. 7*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 8*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: constantargs: 11*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[constantargs_BEGIN:.*]]:{{$}} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: osrinline: 14*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[osrinline_BEGIN:.*]]:{{$}} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: osrcold: 17*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[osrcold_BEGIN:.*]]:{{$}} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: propertyRead: 20*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[propertyRead_BEGIN:.*]]:{{$}} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: propertyWrite: 23*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[propertyWrite_BEGIN:.*]]:{{$}} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: jsVoidCall: 26*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[jsVoidCall_BEGIN:.*]]:{{$}} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: jsIntCall: 29*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[jsIntCall_BEGIN:.*]]:{{$}} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: spilledValue: 32*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[spilledValue_BEGIN:.*]]:{{$}} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: spilledStackMapValue: 35*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[spilledStackMapValue_BEGIN:.*]]:{{$}} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: liveConstant: 38*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[liveConstant_BEGIN:.*]]:{{$}} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clobberLR: 41*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}.L[[clobberLR_BEGIN:.*]]:{{$}} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .section .llvm_stackmaps 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: __LLVM_StackMaps: 46*9880d681SAndroid Build Coastguard Worker; Header 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 0 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 50*9880d681SAndroid Build Coastguard Worker; Num Functions 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 11 52*9880d681SAndroid Build Coastguard Worker; Num LargeConstants 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 2 54*9880d681SAndroid Build Coastguard Worker; Num Callsites 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 11 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; Functions and stack size 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad constantargs 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad osrinline 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 144 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad osrcold 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad propertyRead 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad propertyWrite 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad jsVoidCall 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad jsIntCall 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 128 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad spilledValue 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 304 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad spilledStackMapValue 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 224 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad liveConstant 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 64 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad clobberLR 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 208 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker; Num LargeConstants 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 4294967295 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 4294967296 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker; Constant arguments 86*9880d681SAndroid Build Coastguard Worker; 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 1 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long .L{{.*}}-.L[[constantargs_BEGIN]] 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 4 91*9880d681SAndroid Build Coastguard Worker; SmallConstant 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 4 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 65535 96*9880d681SAndroid Build Coastguard Worker; SmallConstant 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 4 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 65536 101*9880d681SAndroid Build Coastguard Worker; SmallConstant 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 5 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 106*9880d681SAndroid Build Coastguard Worker; LargeConstant at index 0 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 5 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 1 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine void @constantargs() { 113*9880d681SAndroid Build Coastguard Workerentry: 114*9880d681SAndroid Build Coastguard Worker %0 = inttoptr i64 244837814094590 to i8* 115*9880d681SAndroid Build Coastguard Worker tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 40, i8* %0, i32 0, i64 65535, i64 65536, i64 4294967295, i64 4294967296) 116*9880d681SAndroid Build Coastguard Worker ret void 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker; Inline OSR Exit 120*9880d681SAndroid Build Coastguard Worker; 121*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[osrinline_BEGIN]] 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 2 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 132*9880d681SAndroid Build Coastguard Workerdefine void @osrinline(i64 %a, i64 %b) { 133*9880d681SAndroid Build Coastguard Workerentry: 134*9880d681SAndroid Build Coastguard Worker ; Runtime void->void call. 135*9880d681SAndroid Build Coastguard Worker call void inttoptr (i64 244837814094590 to void ()*)() 136*9880d681SAndroid Build Coastguard Worker ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars. 137*9880d681SAndroid Build Coastguard Worker call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b) 138*9880d681SAndroid Build Coastguard Worker ret void 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker; Cold OSR Exit 142*9880d681SAndroid Build Coastguard Worker; 143*9880d681SAndroid Build Coastguard Worker; 2 live variables in register. 144*9880d681SAndroid Build Coastguard Worker; 145*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[osrcold_BEGIN]] 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 2 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 156*9880d681SAndroid Build Coastguard Workerdefine void @osrcold(i64 %a, i64 %b) { 157*9880d681SAndroid Build Coastguard Workerentry: 158*9880d681SAndroid Build Coastguard Worker %test = icmp slt i64 %a, %b 159*9880d681SAndroid Build Coastguard Worker br i1 %test, label %ret, label %cold 160*9880d681SAndroid Build Coastguard Workercold: 161*9880d681SAndroid Build Coastguard Worker ; OSR patchpoint with 12-byte nop-slide and 2 live vars. 162*9880d681SAndroid Build Coastguard Worker %thunk = inttoptr i64 244837814094590 to i8* 163*9880d681SAndroid Build Coastguard Worker call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 40, i8* %thunk, i32 0, i64 %a, i64 %b) 164*9880d681SAndroid Build Coastguard Worker unreachable 165*9880d681SAndroid Build Coastguard Workerret: 166*9880d681SAndroid Build Coastguard Worker ret void 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker; Property Read 170*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[propertyRead_BEGIN]] 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker; FIXME: There are currently no stackmap entries. After moving to 175*9880d681SAndroid Build Coastguard Worker; AnyRegCC, we will have entries for the object and return value. 176*9880d681SAndroid Build Coastguard Workerdefine i64 @propertyRead(i64* %obj) { 177*9880d681SAndroid Build Coastguard Workerentry: 178*9880d681SAndroid Build Coastguard Worker %resolveRead = inttoptr i64 244837814094590 to i8* 179*9880d681SAndroid Build Coastguard Worker %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 40, i8* %resolveRead, i32 1, i64* %obj) 180*9880d681SAndroid Build Coastguard Worker %add = add i64 %result, 3 181*9880d681SAndroid Build Coastguard Worker ret i64 %add 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker; Property Write 185*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[propertyWrite_BEGIN]] 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 2 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 196*9880d681SAndroid Build Coastguard Workerdefine void @propertyWrite(i64 %dummy1, i64* %obj, i64 %dummy2, i64 %a) { 197*9880d681SAndroid Build Coastguard Workerentry: 198*9880d681SAndroid Build Coastguard Worker %resolveWrite = inttoptr i64 244837814094590 to i8* 199*9880d681SAndroid Build Coastguard Worker call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 40, i8* %resolveWrite, i32 2, i64* %obj, i64 %a) 200*9880d681SAndroid Build Coastguard Worker ret void 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker; Void JS Call 204*9880d681SAndroid Build Coastguard Worker; 205*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers. 206*9880d681SAndroid Build Coastguard Worker; 207*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[jsVoidCall_BEGIN]] 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 2 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 Worker; CHECK-NEXT: .byte 1 215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 218*9880d681SAndroid Build Coastguard Workerdefine void @jsVoidCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) { 219*9880d681SAndroid Build Coastguard Workerentry: 220*9880d681SAndroid Build Coastguard Worker %resolveCall = inttoptr i64 244837814094590 to i8* 221*9880d681SAndroid Build Coastguard Worker call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 40, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2) 222*9880d681SAndroid Build Coastguard Worker ret void 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker; i64 JS Call 226*9880d681SAndroid Build Coastguard Worker; 227*9880d681SAndroid Build Coastguard Worker; 2 live variables in registers. 228*9880d681SAndroid Build Coastguard Worker; 229*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[jsIntCall_BEGIN]] 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 2 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 Worker; CHECK-NEXT: .byte 1 237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short {{[0-9]+}} 239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 240*9880d681SAndroid Build Coastguard Workerdefine i64 @jsIntCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) { 241*9880d681SAndroid Build Coastguard Workerentry: 242*9880d681SAndroid Build Coastguard Worker %resolveCall = inttoptr i64 244837814094590 to i8* 243*9880d681SAndroid Build Coastguard Worker %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 40, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2) 244*9880d681SAndroid Build Coastguard Worker %add = add i64 %result, 3 245*9880d681SAndroid Build Coastguard Worker ret i64 %add 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Worker; Spilled stack map values. 249*9880d681SAndroid Build Coastguard Worker; 250*9880d681SAndroid Build Coastguard Worker; Verify 28 stack map entries. 251*9880d681SAndroid Build Coastguard Worker; 252*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[spilledValue_BEGIN]] 253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 28 255*9880d681SAndroid Build Coastguard Worker; 256*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from r31. 257*9880d681SAndroid Build Coastguard Worker; Location: Indirect FP + ... 258*9880d681SAndroid Build Coastguard Worker; CHECK: .byte 3 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 31 261*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) { 262*9880d681SAndroid Build Coastguard Workerentry: 263*9880d681SAndroid Build Coastguard Worker call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 40, 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) 264*9880d681SAndroid Build Coastguard Worker ret void 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker; Spilled stack map values. 268*9880d681SAndroid Build Coastguard Worker; 269*9880d681SAndroid Build Coastguard Worker; Verify 30 stack map entries. 270*9880d681SAndroid Build Coastguard Worker; 271*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[spilledStackMapValue_BEGIN]] 272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 30 274*9880d681SAndroid Build Coastguard Worker; 275*9880d681SAndroid Build Coastguard Worker; Check that at least one is a spilled entry from r31. 276*9880d681SAndroid Build Coastguard Worker; Location: Indirect FP + ... 277*9880d681SAndroid Build Coastguard Worker; CHECK: .byte 3 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 31 280*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) { 281*9880d681SAndroid Build Coastguard Workerentry: 282*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) 283*9880d681SAndroid Build Coastguard Worker ret void 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Worker; Map a constant value. 288*9880d681SAndroid Build Coastguard Worker; 289*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[liveConstant_BEGIN]] 290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 291*9880d681SAndroid Build Coastguard Worker; 1 location 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 1 293*9880d681SAndroid Build Coastguard Worker; Loc 0: SmallConstant 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 4 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 8 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 33 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdefine void @liveConstant() { 300*9880d681SAndroid Build Coastguard Worker tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 8, i32 33) 301*9880d681SAndroid Build Coastguard Worker ret void 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker; Map a value when LR is the only free register. 305*9880d681SAndroid Build Coastguard Worker; 306*9880d681SAndroid Build Coastguard Worker; CHECK: .long .L{{.*}}-.L[[clobberLR_BEGIN]] 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 308*9880d681SAndroid Build Coastguard Worker; 1 location 309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 1 310*9880d681SAndroid Build Coastguard Worker; Loc 0: Indirect FP (r31) - offset 311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 3 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 4 313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 31 314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long {{[0-9]+}} 315*9880d681SAndroid Build Coastguard Workerdefine void @clobberLR(i32 %a) { 316*9880d681SAndroid Build Coastguard Worker tail call void asm sideeffect "nop", "~{r0},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{r14},~{r15},~{r16},~{r17},~{r18},~{r19},~{r20},~{r21},~{r22},~{r23},~{r24},~{r25},~{r26},~{r27},~{r28},~{r29},~{r30},~{r31}"() nounwind 317*9880d681SAndroid Build Coastguard Worker tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 8, i32 %a) 318*9880d681SAndroid Build Coastguard Worker ret void 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.stackmap(i64, i32, ...) 322*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...) 323*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.experimental.patchpoint.i64(i64, i32, i8*, i32, ...) 324