1; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s 2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -fast-isel -fast-isel-abort=1 | FileCheck %s 3 4; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps 5; CHECK-NEXT: __LLVM_StackMaps: 6; Header 7; CHECK-NEXT: .byte 3 8; CHECK-NEXT: .byte 0 9; CHECK-NEXT: .short 0 10; Num Functions 11; CHECK-NEXT: .long 4 12; Num LargeConstants 13; CHECK-NEXT: .long 3 14; Num Callsites 15; CHECK-NEXT: .long 7 16 17; Functions and stack size 18; CHECK-NEXT: .quad _constantargs 19; CHECK-NEXT: .quad 8 20; CHECK-NEXT: .quad 1 21; CHECK-NEXT: .quad _liveConstant 22; CHECK-NEXT: .quad 8 23; CHECK-NEXT: .quad 1 24; CHECK-NEXT: .quad _directFrameIdx 25; CHECK-NEXT: .quad 40 26; CHECK-NEXT: .quad 1 27; CHECK-NEXT: .quad _longid 28; CHECK-NEXT: .quad 8 29; CHECK-NEXT: .quad 4 30 31; Large Constants 32; CHECK-NEXT: .quad 2147483648 33; CHECK-NEXT: .quad 4294967295 34; CHECK-NEXT: .quad 4294967296 35 36; Callsites 37; Constant arguments 38; 39; CHECK-NEXT: .quad 1 40; CHECK-NEXT: .long L{{.*}}-_constantargs 41; CHECK-NEXT: .short 0 42; CHECK-NEXT: .short 12 43; SmallConstant 44; CHECK-NEXT: .byte 4 45; CHECK-NEXT: .byte 0 46; CHECK-NEXT: .short 8 47; CHECK-NEXT: .short 0 48; CHECK-NEXT: .short 0 49; CHECK-NEXT: .long -1 50; SmallConstant 51; CHECK-NEXT: .byte 4 52; CHECK-NEXT: .byte 0 53; CHECK-NEXT: .short 8 54; CHECK-NEXT: .short 0 55; CHECK-NEXT: .short 0 56; CHECK-NEXT: .long -1 57; SmallConstant 58; CHECK-NEXT: .byte 4 59; CHECK-NEXT: .byte 0 60; CHECK-NEXT: .short 8 61; CHECK-NEXT: .short 0 62; CHECK-NEXT: .short 0 63; CHECK-NEXT: .long 65536 64; SmallConstant 65; CHECK-NEXT: .byte 4 66; CHECK-NEXT: .byte 0 67; CHECK-NEXT: .short 8 68; CHECK-NEXT: .short 0 69; CHECK-NEXT: .short 0 70; CHECK-NEXT: .long 2000000000 71; SmallConstant 72; CHECK-NEXT: .byte 4 73; CHECK-NEXT: .byte 0 74; CHECK-NEXT: .short 8 75; CHECK-NEXT: .short 0 76; CHECK-NEXT: .short 0 77; CHECK-NEXT: .long 2147483647 78; SmallConstant 79; CHECK-NEXT: .byte 4 80; CHECK-NEXT: .byte 0 81; CHECK-NEXT: .short 8 82; CHECK-NEXT: .short 0 83; CHECK-NEXT: .short 0 84; CHECK-NEXT: .long -1 85; SmallConstant 86; CHECK-NEXT: .byte 4 87; CHECK-NEXT: .byte 0 88; CHECK-NEXT: .short 8 89; CHECK-NEXT: .short 0 90; CHECK-NEXT: .short 0 91; CHECK-NEXT: .long -1 92; SmallConstant 93; CHECK-NEXT: .byte 4 94; CHECK-NEXT: .byte 0 95; CHECK-NEXT: .short 8 96; CHECK-NEXT: .short 0 97; CHECK-NEXT: .short 0 98; CHECK-NEXT: .long 0 99; LargeConstant at index 0 100; CHECK-NEXT: .byte 5 101; CHECK-NEXT: .byte 0 102; CHECK-NEXT: .short 8 103; CHECK-NEXT: .short 0 104; CHECK-NEXT: .short 0 105; CHECK-NEXT: .long 0 106; LargeConstant at index 1 107; CHECK-NEXT: .byte 5 108; CHECK-NEXT: .byte 0 109; CHECK-NEXT: .short 8 110; CHECK-NEXT: .short 0 111; CHECK-NEXT: .short 0 112; CHECK-NEXT: .long 1 113; LargeConstant at index 2 114; CHECK-NEXT: .byte 5 115; CHECK-NEXT: .byte 0 116; CHECK-NEXT: .short 8 117; CHECK-NEXT: .short 0 118; CHECK-NEXT: .short 0 119; CHECK-NEXT: .long 2 120; SmallConstant 121; CHECK-NEXT: .byte 4 122; CHECK-NEXT: .byte 0 123; CHECK-NEXT: .short 8 124; CHECK-NEXT: .short 0 125; CHECK-NEXT: .short 0 126; CHECK-NEXT: .long -1 127 128define void @constantargs() { 129entry: 130 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 1, i32 15, i16 65535, i16 -1, i32 65536, i32 2000000000, i32 2147483647, i32 -1, i32 4294967295, i32 4294967296, i64 2147483648, i64 4294967295, i64 4294967296, i64 -1) 131 ret void 132} 133 134; Map a constant value. 135; 136; CHECK-LABEL: .long L{{.*}}-_liveConstant 137; CHECK-NEXT: .short 0 138; 1 location 139; CHECK-NEXT: .short 1 140; Loc 0: SmallConstant 141; CHECK-NEXT: .byte 4 142; CHECK-NEXT: .byte 0 143; CHECK-NEXT: .short 8 144; CHECK-NEXT: .short 0 145; CHECK-NEXT: .short 0 146; CHECK-NEXT: .long 33 147 148define void @liveConstant() { 149 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 5, i32 33) 150 ret void 151} 152 153; Directly map an alloca's address. 154; 155; Callsite 16 156; CHECK-LABEL: .long L{{.*}}-_directFrameIdx 157; CHECK-NEXT: .short 0 158; 1 location 159; CHECK-NEXT: .short 1 160; Loc 0: Direct rbp - ofs 161; CHECK-NEXT: .byte 2 162; CHECK-NEXT: .byte 0 163; CHECK-NEXT: .short 8 164; CHECK-NEXT: .short 6 165; CHECK-NEXT: .short 0 166; CHECK-NEXT: .long 167 168define void @directFrameIdx() { 169entry: 170 %metadata1 = alloca i64, i32 3, align 8 171 store i64 11, ptr %metadata1 172 store i64 12, ptr %metadata1 173 store i64 13, ptr %metadata1 174 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, ptr %metadata1) 175 ret void 176} 177 178; Test a 64-bit ID. 179; 180; CHECK: .quad 4294967295 181; CHECK-LABEL: .long L{{.*}}-_longid 182; CHECK: .quad 4294967296 183; CHECK-LABEL: .long L{{.*}}-_longid 184; CHECK: .quad 9223372036854775807 185; CHECK-LABEL: .long L{{.*}}-_longid 186; CHECK: .quad -1 187; CHECK-LABEL: .long L{{.*}}-_longid 188define void @longid() { 189entry: 190 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967295, i32 0) 191 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967296, i32 0) 192 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 9223372036854775807, i32 0) 193 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 -1, i32 0) 194 ret void 195} 196 197declare void @llvm.experimental.stackmap(i64, i32, ...) 198