Change the fast-isel-abort option from bool to int to enable "levels"
[oota-llvm.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 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
100 define void @constantargs() {
101 entry:
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
118 define 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
136 define void @directFrameIdx() {
137 entry:
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
156 define void @longid() {
157 entry:
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
165 declare void @llvm.experimental.stackmap(i64, i32, ...)