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 | FileCheck %s
3
4; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
5; CHECK-NEXT:  __LLVM_StackMaps:
6; Header
7; CHECK-NEXT:   .byte 1
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 _liveConstant
21; CHECK-NEXT:   .quad 8
22; CHECK-NEXT:   .quad _directFrameIdx
23; CHECK-NEXT:   .quad 40
24; CHECK-NEXT:   .quad _longid
25; CHECK-NEXT:   .quad 8
26
27; Large Constants
28; CHECK-NEXT:   .quad   2147483648
29; CHECK-NEXT:   .quad   4294967295
30; CHECK-NEXT:   .quad   4294967296
31
32; Callsites
33; Constant arguments
34;
35; CHECK-NEXT:   .quad   1
36; CHECK-NEXT:   .long   L{{.*}}-_constantargs
37; CHECK-NEXT:   .short  0
38; CHECK-NEXT:   .short  12
39; SmallConstant
40; CHECK-NEXT:   .byte   4
41; CHECK-NEXT:   .byte   8
42; CHECK-NEXT:   .short  0
43; CHECK-NEXT:   .long   -1
44; SmallConstant
45; CHECK-NEXT:   .byte   4
46; CHECK-NEXT:   .byte   8
47; CHECK-NEXT:   .short  0
48; CHECK-NEXT:   .long   -1
49; SmallConstant
50; CHECK-NEXT:   .byte   4
51; CHECK-NEXT:   .byte   8
52; CHECK-NEXT:   .short  0
53; CHECK-NEXT:   .long   65536
54; SmallConstant
55; CHECK-NEXT:   .byte   4
56; CHECK-NEXT:   .byte   8
57; CHECK-NEXT:   .short  0
58; CHECK-NEXT:   .long   2000000000
59; SmallConstant
60; CHECK-NEXT:   .byte   4
61; CHECK-NEXT:   .byte   8
62; CHECK-NEXT:   .short  0
63; CHECK-NEXT:   .long   2147483647
64; SmallConstant
65; CHECK-NEXT:   .byte   4
66; CHECK-NEXT:   .byte   8
67; CHECK-NEXT:   .short  0
68; CHECK-NEXT:   .long   -1
69; SmallConstant
70; CHECK-NEXT:   .byte   4
71; CHECK-NEXT:   .byte   8
72; CHECK-NEXT:   .short  0
73; CHECK-NEXT:   .long   -1
74; SmallConstant
75; CHECK-NEXT:   .byte   4
76; CHECK-NEXT:   .byte   8
77; CHECK-NEXT:   .short  0
78; CHECK-NEXT:   .long   0
79; LargeConstant at index 0
80; CHECK-NEXT:   .byte   5
81; CHECK-NEXT:   .byte   8
82; CHECK-NEXT:   .short  0
83; CHECK-NEXT:   .long   0
84; LargeConstant at index 1
85; CHECK-NEXT:   .byte   5
86; CHECK-NEXT:   .byte   8
87; CHECK-NEXT:   .short  0
88; CHECK-NEXT:   .long   1
89; LargeConstant at index 2
90; CHECK-NEXT:   .byte   5
91; CHECK-NEXT:   .byte   8
92; CHECK-NEXT:   .short  0
93; CHECK-NEXT:   .long   2
94; SmallConstant
95; CHECK-NEXT:   .byte   4
96; CHECK-NEXT:   .byte   8
97; CHECK-NEXT:   .short  0
98; CHECK-NEXT:   .long   -1
99
100define void @constantargs() {
101entry:
102  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)
103  ret void
104}
105
106; Map a constant value.
107;
108; CHECK-LABEL:  .long L{{.*}}-_liveConstant
109; CHECK-NEXT:   .short 0
110; 1 location
111; CHECK-NEXT:   .short 1
112; Loc 0: SmallConstant
113; CHECK-NEXT:   .byte   4
114; CHECK-NEXT:   .byte   8
115; CHECK-NEXT:   .short  0
116; CHECK-NEXT:   .long   33
117
118define void @liveConstant() {
119  tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 15, i32 5, i32 33)
120  ret void
121}
122
123; Directly map an alloca's address.
124;
125; Callsite 16
126; CHECK-LABEL:  .long L{{.*}}-_directFrameIdx
127; CHECK-NEXT:   .short 0
128; 1 location
129; CHECK-NEXT:   .short	1
130; Loc 0: Direct RBP - ofs
131; CHECK-NEXT:   .byte	2
132; CHECK-NEXT:   .byte	8
133; CHECK-NEXT:   .short	6
134; CHECK-NEXT:   .long
135
136define void @directFrameIdx() {
137entry:
138  %metadata1 = alloca i64, i32 3, align 8
139  store i64 11, i64* %metadata1
140  store i64 12, i64* %metadata1
141  store i64 13, i64* %metadata1
142  call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 16, i32 0, i64* %metadata1)
143  ret void
144}
145
146; Test a 64-bit ID.
147;
148; CHECK:        .quad 4294967295
149; CHECK-LABEL:  .long L{{.*}}-_longid
150; CHECK:        .quad 4294967296
151; CHECK-LABEL:  .long L{{.*}}-_longid
152; CHECK:        .quad 9223372036854775807
153; CHECK-LABEL:  .long L{{.*}}-_longid
154; CHECK:        .quad -1
155; CHECK-LABEL:  .long L{{.*}}-_longid
156define void @longid() {
157entry:
158  tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4294967295, i32 0)
159  tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4294967296, i32 0)
160  tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 9223372036854775807, i32 0)
161  tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 -1, i32 0)
162  ret void
163}
164
165declare void @llvm.experimental.stackmap(i64, i32, ...)
166