blob: 1392e5bd87c149fd7de4e0298ff683da4b602e73 [file] [log] [blame]
Juergen Ributzka99bd3cb2014-10-02 22:21:49 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s
Mehdi Amini945a6602015-02-27 18:32:11 +00002; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -fast-isel -fast-isel-abort=1 | FileCheck %s
Juergen Ributzka04558dc2014-06-12 03:29:26 +00003
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:
David Blaikie23af6482015-04-16 23:24:18 +0000102 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)
Juergen Ributzka04558dc2014-06-12 03:29:26 +0000103 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() {
David Blaikie23af6482015-04-16 23:24:18 +0000119 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 5, i32 33)
Juergen Ributzka04558dc2014-06-12 03:29:26 +0000120 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
David Blaikie23af6482015-04-16 23:24:18 +0000142 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, i64* %metadata1)
Juergen Ributzka04558dc2014-06-12 03:29:26 +0000143 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:
David Blaikie23af6482015-04-16 23:24:18 +0000158 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)
Juergen Ributzka04558dc2014-06-12 03:29:26 +0000162 ret void
163}
164
165declare void @llvm.experimental.stackmap(i64, i32, ...)