Put each jump table in an independent section if the function is too.
[oota-llvm.git] / test / CodeGen / X86 / global-sections.ll
1 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu | FileCheck %s -check-prefix=LINUX
2 ; RUN: llc < %s -mtriple=i386-apple-darwin9.7 | FileCheck %s -check-prefix=DARWIN
3 ; RUN: llc < %s -mtriple=i386-apple-darwin10 -relocation-model=static | FileCheck %s -check-prefix=DARWIN-STATIC
4 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s -check-prefix=DARWIN64
5 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -data-sections -function-sections | FileCheck %s -check-prefix=LINUX-SECTIONS
6 ; RUN: llc < %s -mtriple=i686-pc-win32 -data-sections -function-sections | FileCheck %s -check-prefix=WIN32-SECTIONS
7
8 define void @F1() {
9   ret void
10 }
11
12 ; WIN32-SECTIONS: .section        .text,"xr",one_only,_F1
13 ; WIN32-SECTIONS: .globl _F1
14
15 define void @F2(i32 %y) {
16 bb0:
17 switch i32 %y, label %bb5 [
18     i32 1, label %bb1
19     i32 2, label %bb2
20     i32 3, label %bb3
21     i32 4, label %bb4
22   ]
23 bb1:
24   ret void
25 bb2:
26   ret void
27 bb3:
28   ret void
29 bb4:
30   ret void
31 bb5:
32   ret void
33 }
34
35 ; LINUX:     .size   F2,
36 ; LINUX-NEX: .cfi_endproc
37 ; LINUX-NEX: .section        .rodata,"a",@progbits
38
39 ; LINUX-SECTIONS: .section        .text.F2,"ax",@progbits
40 ; LINUX-SECTIONS: .size   F2,
41 ; LINUX-SECTIONS-NEXT: .cfi_endproc
42 ; LINUX-SECTIONS-NEXT: .section        .rodata.F2,"a",@progbits
43
44 ; int G1;
45 @G1 = common global i32 0
46
47 ; LINUX: .type   G1,@object
48 ; LINUX: .comm  G1,4,4
49
50 ; DARWIN: .comm _G1,4,2
51
52
53
54
55 ; const int G2 __attribute__((weak)) = 42;
56 @G2 = weak_odr unnamed_addr constant i32 42     
57
58
59 ; TODO: linux drops this into .rodata, we drop it into ".gnu.linkonce.r.G2"
60
61 ; DARWIN: .section __TEXT,__const_coal,coalesced
62 ; DARWIN: _G2:
63 ; DARWIN:    .long 42
64
65
66 ; int * const G3 = &G1;
67 @G3 = unnamed_addr constant i32* @G1
68
69 ; DARWIN: .section        __DATA,__const
70 ; DARWIN: .globl _G3
71 ; DARWIN: _G3:
72 ; DARWIN:     .long _G1
73
74 ; LINUX:   .section        .rodata,"a",@progbits
75 ; LINUX:   .globl  G3
76
77 ; LINUX-SECTIONS: .section        .rodata.G3,"a",@progbits
78 ; LINUX-SECTIONS: .globl  G3
79
80 ; WIN32-SECTIONS: .section        .rdata,"dr",one_only,_G3
81 ; WIN32-SECTIONS: .globl  _G3
82
83
84 ; _Complex long long const G4 = 34;
85 @G4 = private unnamed_addr constant {i64,i64} { i64 34, i64 0 }
86
87 ; DARWIN: .section        __TEXT,__literal16,16byte_literals
88 ; DARWIN: L_G4:
89 ; DARWIN:     .long 34
90
91 ; DARWIN-STATIC: .section        __TEXT,__literal16,16byte_literals
92 ; DARWIN-STATIC: L_G4:
93 ; DARWIN-STATIC:     .long 34
94
95 ; DARWIN64: .section        __TEXT,__literal16,16byte_literals
96 ; DARWIN64: L_G4:
97 ; DARWIN64:     .quad 34
98
99 ; int G5 = 47;
100 @G5 = global i32 47
101
102 ; LINUX: .data
103 ; LINUX: .globl G5
104 ; LINUX: G5:
105 ; LINUX:    .long 47
106
107 ; DARWIN: .section        __DATA,__data
108 ; DARWIN: .globl _G5
109 ; DARWIN: _G5:
110 ; DARWIN:    .long 47
111
112
113 ; PR4584
114 @"foo bar" = linkonce global i32 42
115
116 ; LINUX: .type  "foo bar",@object
117 ; LINUX: .weak  "foo bar"
118 ; LINUX: "foo bar":
119
120 ; DARWIN: .section              __DATA,__datacoal_nt,coalesced
121 ; DARWIN: .globl        "_foo bar"
122 ; DARWIN:       .weak_definition "_foo bar"
123 ; DARWIN: "_foo bar":
124
125 ; PR4650
126 @G6 = weak_odr unnamed_addr constant [1 x i8] c"\01"
127
128 ; LINUX:   .type        G6,@object
129 ; LINUX:   .weak        G6
130 ; LINUX: G6:
131 ; LINUX:   .byte        1
132 ; LINUX:   .size        G6, 1
133
134 ; DARWIN:  .section __TEXT,__const_coal,coalesced
135 ; DARWIN:  .globl _G6
136 ; DARWIN:  .weak_definition _G6
137 ; DARWIN:_G6:
138 ; DARWIN:  .byte 1
139
140
141 @G7 = unnamed_addr constant [10 x i8] c"abcdefghi\00"
142
143 ; DARWIN:       __TEXT,__cstring,cstring_literals
144 ; DARWIN:       .globl _G7
145 ; DARWIN: _G7:
146 ; DARWIN:       .asciz  "abcdefghi"
147
148 ; LINUX:        .section        .rodata.str1.1,"aMS",@progbits,1
149 ; LINUX:        .globl G7
150 ; LINUX: G7:
151 ; LINUX:        .asciz  "abcdefghi"
152
153 ; LINUX-SECTIONS: .section        .rodata.str1.1,"aMS",@progbits,1
154 ; LINUX-SECTIONS:       .globl G7
155
156 ; WIN32-SECTIONS: .section        .rdata,"dr",one_only,_G7
157 ; WIN32-SECTIONS:       .globl _G7
158
159
160 @G8 = unnamed_addr constant [4 x i16] [ i16 1, i16 2, i16 3, i16 0 ]
161
162 ; DARWIN:       .section        __TEXT,__const
163 ; DARWIN:       .globl _G8
164 ; DARWIN: _G8:
165
166 ; LINUX:        .section        .rodata.str2.2,"aMS",@progbits,2
167 ; LINUX:        .globl G8
168 ; LINUX:G8:
169
170 @G9 = unnamed_addr constant [4 x i32] [ i32 1, i32 2, i32 3, i32 0 ]
171
172 ; DARWIN:       .globl _G9
173 ; DARWIN: _G9:
174
175 ; LINUX:        .section        .rodata.str4.4,"aMS",@progbits,4
176 ; LINUX:        .globl G9
177 ; LINUX:G9
178
179
180 @G10 = weak global [100 x i32] zeroinitializer, align 32 ; <[100 x i32]*> [#uses=0]
181
182
183 ; DARWIN:       .section        __DATA,__datacoal_nt,coalesced
184 ; DARWIN: .globl _G10
185 ; DARWIN:       .weak_definition _G10
186 ; DARWIN:       .align  5
187 ; DARWIN: _G10:
188 ; DARWIN:       .space  400
189
190 ; LINUX:        .bss
191 ; LINUX:        .weak   G10
192 ; LINUX:        .align  32
193 ; LINUX: G10:
194 ; LINUX:        .zero   400
195
196
197
198 ;; Zero sized objects should round up to 1 byte in zerofill directives.
199 ; rdar://7886017
200 @G11 = global [0 x i32] zeroinitializer
201 @G12 = global {} zeroinitializer
202 @G13 = global { [0 x {}] } zeroinitializer
203
204 ; DARWIN: .globl _G11
205 ; DARWIN: .zerofill __DATA,__common,_G11,1,2
206 ; DARWIN: .globl _G12
207 ; DARWIN: .zerofill __DATA,__common,_G12,1,3
208 ; DARWIN: .globl _G13
209 ; DARWIN: .zerofill __DATA,__common,_G13,1,3
210
211 @G14 = private unnamed_addr constant [4 x i8] c"foo\00", align 1
212
213 ; LINUX-SECTIONS:        .type   .LG14,@object           # @G14
214 ; LINUX-SECTIONS:        .section        .rodata.str1.1,"aMS",@progbits,1
215 ; LINUX-SECTIONS: .LG14:
216 ; LINUX-SECTIONS:        .asciz  "foo"
217 ; LINUX-SECTIONS:        .size   .LG14, 4
218
219 ; WIN32-SECTIONS:        .section        .rdata,"dr"
220 ; WIN32-SECTIONS: L_G14:
221 ; WIN32-SECTIONS:        .asciz  "foo"
222
223 ; cannot be merged on MachO, but can on other formats.
224 @G15 = unnamed_addr constant i64 0
225
226 ; LINUX: .section        .rodata.cst8,"aM",@progbits,8
227 ; LINUX: G15:
228
229 ; DARWIN: .section      __TEXT,__const
230 ; DARWIN: _G15:
231
232 ; DARWIN-STATIC: .section       __TEXT,__const
233 ; DARWIN-STATIC: _G15:
234
235 ; DARWIN64: .section       __TEXT,__const
236 ; DARWIN64: _G15:
237
238 ; LINUX-SECTIONS: .section      .rodata.cst8,"aM",@progbits,8
239 ; LINUX-SECTIONS: G15:
240
241 ; WIN32-SECTIONS: .section      .rdata,"dr",one_only,_G15
242 ; WIN32-SECTIONS: _G15: