]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/stackmap-fast-isel.ll
Vendor import of llvm trunk r291274:
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / stackmap-fast-isel.ll
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 2
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   8
46 ; CHECK-NEXT:   .short  0
47 ; CHECK-NEXT:   .long   -1
48 ; SmallConstant
49 ; CHECK-NEXT:   .byte   4
50 ; CHECK-NEXT:   .byte   8
51 ; CHECK-NEXT:   .short  0
52 ; CHECK-NEXT:   .long   -1
53 ; SmallConstant
54 ; CHECK-NEXT:   .byte   4
55 ; CHECK-NEXT:   .byte   8
56 ; CHECK-NEXT:   .short  0
57 ; CHECK-NEXT:   .long   65536
58 ; SmallConstant
59 ; CHECK-NEXT:   .byte   4
60 ; CHECK-NEXT:   .byte   8
61 ; CHECK-NEXT:   .short  0
62 ; CHECK-NEXT:   .long   2000000000
63 ; SmallConstant
64 ; CHECK-NEXT:   .byte   4
65 ; CHECK-NEXT:   .byte   8
66 ; CHECK-NEXT:   .short  0
67 ; CHECK-NEXT:   .long   2147483647
68 ; SmallConstant
69 ; CHECK-NEXT:   .byte   4
70 ; CHECK-NEXT:   .byte   8
71 ; CHECK-NEXT:   .short  0
72 ; CHECK-NEXT:   .long   -1
73 ; SmallConstant
74 ; CHECK-NEXT:   .byte   4
75 ; CHECK-NEXT:   .byte   8
76 ; CHECK-NEXT:   .short  0
77 ; CHECK-NEXT:   .long   -1
78 ; SmallConstant
79 ; CHECK-NEXT:   .byte   4
80 ; CHECK-NEXT:   .byte   8
81 ; CHECK-NEXT:   .short  0
82 ; CHECK-NEXT:   .long   0
83 ; LargeConstant at index 0
84 ; CHECK-NEXT:   .byte   5
85 ; CHECK-NEXT:   .byte   8
86 ; CHECK-NEXT:   .short  0
87 ; CHECK-NEXT:   .long   0
88 ; LargeConstant at index 1
89 ; CHECK-NEXT:   .byte   5
90 ; CHECK-NEXT:   .byte   8
91 ; CHECK-NEXT:   .short  0
92 ; CHECK-NEXT:   .long   1
93 ; LargeConstant at index 2
94 ; CHECK-NEXT:   .byte   5
95 ; CHECK-NEXT:   .byte   8
96 ; CHECK-NEXT:   .short  0
97 ; CHECK-NEXT:   .long   2
98 ; SmallConstant
99 ; CHECK-NEXT:   .byte   4
100 ; CHECK-NEXT:   .byte   8
101 ; CHECK-NEXT:   .short  0
102 ; CHECK-NEXT:   .long   -1
103
104 define void @constantargs() {
105 entry:
106   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)
107   ret void
108 }
109
110 ; Map a constant value.
111 ;
112 ; CHECK-LABEL:  .long L{{.*}}-_liveConstant
113 ; CHECK-NEXT:   .short 0
114 ; 1 location
115 ; CHECK-NEXT:   .short 1
116 ; Loc 0: SmallConstant
117 ; CHECK-NEXT:   .byte   4
118 ; CHECK-NEXT:   .byte   8
119 ; CHECK-NEXT:   .short  0
120 ; CHECK-NEXT:   .long   33
121
122 define void @liveConstant() {
123   tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 5, i32 33)
124   ret void
125 }
126
127 ; Directly map an alloca's address.
128 ;
129 ; Callsite 16
130 ; CHECK-LABEL:  .long L{{.*}}-_directFrameIdx
131 ; CHECK-NEXT:   .short 0
132 ; 1 location
133 ; CHECK-NEXT:   .short  1
134 ; Loc 0: Direct RBP - ofs
135 ; CHECK-NEXT:   .byte   2
136 ; CHECK-NEXT:   .byte   8
137 ; CHECK-NEXT:   .short  6
138 ; CHECK-NEXT:   .long
139
140 define void @directFrameIdx() {
141 entry:
142   %metadata1 = alloca i64, i32 3, align 8
143   store i64 11, i64* %metadata1
144   store i64 12, i64* %metadata1
145   store i64 13, i64* %metadata1
146   call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 0, i64* %metadata1)
147   ret void
148 }
149
150 ; Test a 64-bit ID.
151 ;
152 ; CHECK:        .quad 4294967295
153 ; CHECK-LABEL:  .long L{{.*}}-_longid
154 ; CHECK:        .quad 4294967296
155 ; CHECK-LABEL:  .long L{{.*}}-_longid
156 ; CHECK:        .quad 9223372036854775807
157 ; CHECK-LABEL:  .long L{{.*}}-_longid
158 ; CHECK:        .quad -1
159 ; CHECK-LABEL:  .long L{{.*}}-_longid
160 define void @longid() {
161 entry:
162   tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967295, i32 0)
163   tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4294967296, i32 0)
164   tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 9223372036854775807, i32 0)
165   tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 -1, i32 0)
166   ret void
167 }
168
169 declare void @llvm.experimental.stackmap(i64, i32, ...)