1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -enable-patchpoint-liveness=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx | FileCheck -check-prefix=PATCH %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; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: __LLVM_StackMaps: 8*9880d681SAndroid Build Coastguard Worker; Header 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 1 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .byte 0 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 12*9880d681SAndroid Build Coastguard Worker; Num Functions 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 2 14*9880d681SAndroid Build Coastguard Worker; Num LargeConstants 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 0 16*9880d681SAndroid Build Coastguard Worker; Num Callsites 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .long 5 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; Functions and stack size 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad _stackmap_liveness 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 8 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad _mixed_liveness 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .quad 8 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine void @stackmap_liveness() { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind 28*9880d681SAndroid Build Coastguard Worker; StackMap 1 (no liveness information available) 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 32*9880d681SAndroid Build Coastguard Worker; Padding 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 34*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 0 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 36*9880d681SAndroid Build Coastguard Worker; Align 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 3 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; StackMap 1 (patchpoint liveness information enabled) 40*9880d681SAndroid Build Coastguard Worker; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness 41*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 42*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 43*9880d681SAndroid Build Coastguard Worker; Padding 44*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 45*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 1 46*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 1 47*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2 48*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 19 49*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 50*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 16 51*9880d681SAndroid Build Coastguard Worker; Align 52*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .p2align 3 53*9880d681SAndroid Build Coastguard Worker call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 12, i8* null, i32 0) 54*9880d681SAndroid Build Coastguard Worker %a2 = call i64 asm sideeffect "", "={r8}"() nounwind 55*9880d681SAndroid Build Coastguard Worker %a3 = call i8 asm sideeffect "", "={ah}"() nounwind 56*9880d681SAndroid Build Coastguard Worker %a4 = call <4 x double> asm sideeffect "", "={ymm0}"() nounwind 57*9880d681SAndroid Build Coastguard Worker %a5 = call <4 x double> asm sideeffect "", "={ymm1}"() nounwind 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; StackMap 2 (no liveness information available) 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 63*9880d681SAndroid Build Coastguard Worker; Padding 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 65*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 0 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 67*9880d681SAndroid Build Coastguard Worker; Align 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 3 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; StackMap 2 (patchpoint liveness information enabled) 71*9880d681SAndroid Build Coastguard Worker; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness 72*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 73*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 74*9880d681SAndroid Build Coastguard Worker; Padding 75*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 76*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 5 77*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 5 78*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 1: %RAX (1 bytes) --> %AL or %AH 79*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 80*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 81*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 1 82*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 2: %R8 (8 bytes) 83*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 8 84*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 85*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 8 86*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 3: %YMM0 (32 bytes) 87*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 17 88*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 89*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 32 90*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 4: %YMM1 (32 bytes) 91*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 18 92*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 93*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 32 94*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 5: %YMM2 (16 bytes) --> %XMM2 95*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 19 96*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 97*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 16 98*9880d681SAndroid Build Coastguard Worker; Align 99*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .p2align 3 100*9880d681SAndroid Build Coastguard Worker call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 2, i32 12, i8* null, i32 0) 101*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "{r8},{ah},{ymm0},{ymm1}"(i64 %a2, i8 %a3, <4 x double> %a4, <4 x double> %a5) nounwind 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; StackMap 3 (no liveness information available) 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: .long L{{.*}}-_stackmap_liveness 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 107*9880d681SAndroid Build Coastguard Worker; Padding 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 109*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 0 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .short 0 111*9880d681SAndroid Build Coastguard Worker; Align 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 3 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker; StackMap 3 (patchpoint liveness information enabled) 115*9880d681SAndroid Build Coastguard Worker; PATCH-LABEL: .long L{{.*}}-_stackmap_liveness 116*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 117*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 118*9880d681SAndroid Build Coastguard Worker; Padding 119*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 120*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 2 121*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 2 122*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 1: %RSP (8 bytes) 123*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 7 124*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 125*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 8 126*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2 127*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 19 128*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 129*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 16 130*9880d681SAndroid Build Coastguard Worker; Align 131*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .p2align 3 132*9880d681SAndroid Build Coastguard Worker call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 3, i32 12, i8* null, i32 0) 133*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind 134*9880d681SAndroid Build Coastguard Worker ret void 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerdefine void @mixed_liveness() { 138*9880d681SAndroid Build Coastguard Workerentry: 139*9880d681SAndroid Build Coastguard Worker %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind 140*9880d681SAndroid Build Coastguard Worker; StackMap 4 (patchpoint liveness information enabled) 141*9880d681SAndroid Build Coastguard Worker; PATCH-LABEL: .long L{{.*}}-_mixed_liveness 142*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 143*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 144*9880d681SAndroid Build Coastguard Worker; Padding 145*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 146*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 0 147*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 148*9880d681SAndroid Build Coastguard Worker; Align 149*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .p2align 3 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; StackMap 5 (patchpoint liveness information enabled) 152*9880d681SAndroid Build Coastguard Worker; PATCH-LABEL: .long L{{.*}}-_mixed_liveness 153*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 154*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 155*9880d681SAndroid Build Coastguard Worker; Padding 156*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 0 157*9880d681SAndroid Build Coastguard Worker; Num LiveOut Entries: 2 158*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 2 159*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 1: %RSP (8 bytes) 160*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 7 161*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 162*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 8 163*9880d681SAndroid Build Coastguard Worker; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2 164*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .short 19 165*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 0 166*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .byte 16 167*9880d681SAndroid Build Coastguard Worker; Align 168*9880d681SAndroid Build Coastguard Worker; PATCH-NEXT: .p2align 3 169*9880d681SAndroid Build Coastguard Worker call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4, i32 5) 170*9880d681SAndroid Build Coastguard Worker call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 5, i32 0, i8* null, i32 0) 171*9880d681SAndroid Build Coastguard Worker call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind 172*9880d681SAndroid Build Coastguard Worker ret void 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.stackmap(i64, i32, ...) 176*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.patchpoint.void(i64, i32, i8*, i32, ...) 177