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 128 define void @constantargs() { 129 entry: 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 148 define 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 168 define void @directFrameIdx() { 169 entry: 170 %metadata1 = alloca i64, i32 3, align 8 171 store i64 11, i64* %metadata1 172 store i64 12, i64* %metadata1 173 store i64 13, i64* %metadata1 174 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, i64* %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 188 define void @longid() { 189 entry: 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 197 declare void @llvm.experimental.stackmap(i64, i32, ...) 198