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