xref: /llvm-project/llvm/test/CodeGen/X86/stackmap-fast-isel.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
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