1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i386-linux-gnu | FileCheck -check-prefix=X86_LINUX %s
3; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=X64_LINUX %s
4; RUN: llc < %s -mtriple=i386-linux-gnu -fast-isel | FileCheck -check-prefix=X86_ISEL_LINUX %s
5; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck -check-prefix=X64_ISEL_LINUX %s
6; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck -check-prefix=X86_WIN %s
7; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck -check-prefix=X64_WIN %s
8; RUN: llc < %s -mtriple=i686-pc-windows-gnu | FileCheck -check-prefix=MINGW32 %s
9; RUN: llc < %s -mtriple=x86_64-pc-windows-gnu | FileCheck -check-prefix=X64_WIN %s
10
11@i1 = dso_local thread_local global i32 15
12@i2 = external thread_local global i32
13@i3 = internal thread_local global i32 15
14@i4 = hidden thread_local global i32 15
15@i5 = external hidden thread_local global i32
16@i6 = external protected thread_local global i32
17@s1 = dso_local thread_local global i16 15
18@b1 = dso_local thread_local global i8 0
19@b2 = dso_local thread_local(localexec) global i8 0
20
21define dso_local i32 @f1() {
22; X86_LINUX-LABEL: f1:
23; X86_LINUX:       # %bb.0: # %entry
24; X86_LINUX-NEXT:    movl %gs:i1@NTPOFF, %eax
25; X86_LINUX-NEXT:    retl
26;
27; X64_LINUX-LABEL: f1:
28; X64_LINUX:       # %bb.0: # %entry
29; X64_LINUX-NEXT:    movl %fs:i1@TPOFF, %eax
30; X64_LINUX-NEXT:    retq
31;
32; X86_ISEL_LINUX-LABEL: f1:
33; X86_ISEL_LINUX:       # %bb.0: # %entry
34; X86_ISEL_LINUX-NEXT:    movl %gs:i1@NTPOFF, %eax
35; X86_ISEL_LINUX-NEXT:    retl
36;
37; X64_ISEL_LINUX-LABEL: f1:
38; X64_ISEL_LINUX:       # %bb.0: # %entry
39; X64_ISEL_LINUX-NEXT:    movl %fs:i1@TPOFF, %eax
40; X64_ISEL_LINUX-NEXT:    retq
41;
42; X86_WIN-LABEL: f1:
43; X86_WIN:       # %bb.0: # %entry
44; X86_WIN-NEXT:    movl __tls_index, %eax
45; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
46; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
47; X86_WIN-NEXT:    movl _i1@SECREL32(%eax), %eax
48; X86_WIN-NEXT:    retl
49;
50; X64_WIN-LABEL: f1:
51; X64_WIN:       # %bb.0: # %entry
52; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
53; X64_WIN-NEXT:    movq %gs:88, %rcx
54; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
55; X64_WIN-NEXT:    movl i1@SECREL32(%rax), %eax
56; X64_WIN-NEXT:    retq
57;
58; MINGW32-LABEL: f1:
59; MINGW32:       # %bb.0: # %entry
60; MINGW32-NEXT:    movl __tls_index, %eax
61; MINGW32-NEXT:    movl %fs:44, %ecx
62; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
63; MINGW32-NEXT:    movl _i1@SECREL32(%eax), %eax
64; MINGW32-NEXT:    retl
65
66entry:
67	%tmp1 = load i32, ptr @i1
68	ret i32 %tmp1
69}
70
71define dso_local ptr @f2() {
72; X86_LINUX-LABEL: f2:
73; X86_LINUX:       # %bb.0: # %entry
74; X86_LINUX-NEXT:    movl %gs:0, %eax
75; X86_LINUX-NEXT:    leal i1@NTPOFF(%eax), %eax
76; X86_LINUX-NEXT:    retl
77;
78; X64_LINUX-LABEL: f2:
79; X64_LINUX:       # %bb.0: # %entry
80; X64_LINUX-NEXT:    movq %fs:0, %rax
81; X64_LINUX-NEXT:    leaq i1@TPOFF(%rax), %rax
82; X64_LINUX-NEXT:    retq
83;
84; X86_ISEL_LINUX-LABEL: f2:
85; X86_ISEL_LINUX:       # %bb.0: # %entry
86; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
87; X86_ISEL_LINUX-NEXT:    leal i1@NTPOFF(%eax), %eax
88; X86_ISEL_LINUX-NEXT:    retl
89;
90; X64_ISEL_LINUX-LABEL: f2:
91; X64_ISEL_LINUX:       # %bb.0: # %entry
92; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
93; X64_ISEL_LINUX-NEXT:    leaq i1@TPOFF(%rax), %rax
94; X64_ISEL_LINUX-NEXT:    retq
95;
96; X86_WIN-LABEL: f2:
97; X86_WIN:       # %bb.0: # %entry
98; X86_WIN-NEXT:    movl __tls_index, %eax
99; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
100; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
101; X86_WIN-NEXT:    leal _i1@SECREL32(%eax), %eax
102; X86_WIN-NEXT:    retl
103;
104; X64_WIN-LABEL: f2:
105; X64_WIN:       # %bb.0: # %entry
106; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
107; X64_WIN-NEXT:    movq %gs:88, %rcx
108; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
109; X64_WIN-NEXT:    leaq i1@SECREL32(%rax), %rax
110; X64_WIN-NEXT:    retq
111;
112; MINGW32-LABEL: f2:
113; MINGW32:       # %bb.0: # %entry
114; MINGW32-NEXT:    movl __tls_index, %eax
115; MINGW32-NEXT:    movl %fs:44, %ecx
116; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
117; MINGW32-NEXT:    leal _i1@SECREL32(%eax), %eax
118; MINGW32-NEXT:    retl
119
120entry:
121	ret ptr @i1
122}
123
124define dso_local i32 @f3() nounwind {
125; X86_LINUX-LABEL: f3:
126; X86_LINUX:       # %bb.0: # %entry
127; X86_LINUX-NEXT:    movl i2@INDNTPOFF, %eax
128; X86_LINUX-NEXT:    movl %gs:(%eax), %eax
129; X86_LINUX-NEXT:    retl
130;
131; X64_LINUX-LABEL: f3:
132; X64_LINUX:       # %bb.0: # %entry
133; X64_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax
134; X64_LINUX-NEXT:    movl %fs:(%rax), %eax
135; X64_LINUX-NEXT:    retq
136;
137; X86_ISEL_LINUX-LABEL: f3:
138; X86_ISEL_LINUX:       # %bb.0: # %entry
139; X86_ISEL_LINUX-NEXT:    movl i2@INDNTPOFF, %eax
140; X86_ISEL_LINUX-NEXT:    movl %gs:(%eax), %eax
141; X86_ISEL_LINUX-NEXT:    retl
142;
143; X64_ISEL_LINUX-LABEL: f3:
144; X64_ISEL_LINUX:       # %bb.0: # %entry
145; X64_ISEL_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax
146; X64_ISEL_LINUX-NEXT:    movl %fs:(%rax), %eax
147; X64_ISEL_LINUX-NEXT:    retq
148;
149; X86_WIN-LABEL: f3:
150; X86_WIN:       # %bb.0: # %entry
151; X86_WIN-NEXT:    movl __tls_index, %eax
152; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
153; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
154; X86_WIN-NEXT:    movl _i2@SECREL32(%eax), %eax
155; X86_WIN-NEXT:    retl
156;
157; X64_WIN-LABEL: f3:
158; X64_WIN:       # %bb.0: # %entry
159; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
160; X64_WIN-NEXT:    movq %gs:88, %rcx
161; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
162; X64_WIN-NEXT:    movl i2@SECREL32(%rax), %eax
163; X64_WIN-NEXT:    retq
164;
165; MINGW32-LABEL: f3:
166; MINGW32:       # %bb.0: # %entry
167; MINGW32-NEXT:    movl __tls_index, %eax
168; MINGW32-NEXT:    movl %fs:44, %ecx
169; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
170; MINGW32-NEXT:    movl _i2@SECREL32(%eax), %eax
171; MINGW32-NEXT:    retl
172
173entry:
174	%tmp1 = load i32, ptr @i2
175	ret i32 %tmp1
176}
177
178define dso_local ptr @f4() {
179; X86_LINUX-LABEL: f4:
180; X86_LINUX:       # %bb.0: # %entry
181; X86_LINUX-NEXT:    movl %gs:0, %eax
182; X86_LINUX-NEXT:    addl i2@INDNTPOFF, %eax
183; X86_LINUX-NEXT:    retl
184;
185; X64_LINUX-LABEL: f4:
186; X64_LINUX:       # %bb.0: # %entry
187; X64_LINUX-NEXT:    movq %fs:0, %rax
188; X64_LINUX-NEXT:    addq i2@GOTTPOFF(%rip), %rax
189; X64_LINUX-NEXT:    retq
190;
191; X86_ISEL_LINUX-LABEL: f4:
192; X86_ISEL_LINUX:       # %bb.0: # %entry
193; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
194; X86_ISEL_LINUX-NEXT:    addl i2@INDNTPOFF, %eax
195; X86_ISEL_LINUX-NEXT:    retl
196;
197; X64_ISEL_LINUX-LABEL: f4:
198; X64_ISEL_LINUX:       # %bb.0: # %entry
199; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
200; X64_ISEL_LINUX-NEXT:    addq i2@GOTTPOFF(%rip), %rax
201; X64_ISEL_LINUX-NEXT:    retq
202;
203; X86_WIN-LABEL: f4:
204; X86_WIN:       # %bb.0: # %entry
205; X86_WIN-NEXT:    movl __tls_index, %eax
206; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
207; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
208; X86_WIN-NEXT:    leal _i2@SECREL32(%eax), %eax
209; X86_WIN-NEXT:    retl
210;
211; X64_WIN-LABEL: f4:
212; X64_WIN:       # %bb.0: # %entry
213; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
214; X64_WIN-NEXT:    movq %gs:88, %rcx
215; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
216; X64_WIN-NEXT:    leaq i2@SECREL32(%rax), %rax
217; X64_WIN-NEXT:    retq
218;
219; MINGW32-LABEL: f4:
220; MINGW32:       # %bb.0: # %entry
221; MINGW32-NEXT:    movl __tls_index, %eax
222; MINGW32-NEXT:    movl %fs:44, %ecx
223; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
224; MINGW32-NEXT:    leal _i2@SECREL32(%eax), %eax
225; MINGW32-NEXT:    retl
226
227entry:
228	ret ptr @i2
229}
230
231define dso_local i32 @f5() nounwind {
232; X86_LINUX-LABEL: f5:
233; X86_LINUX:       # %bb.0: # %entry
234; X86_LINUX-NEXT:    movl %gs:i3@NTPOFF, %eax
235; X86_LINUX-NEXT:    retl
236;
237; X64_LINUX-LABEL: f5:
238; X64_LINUX:       # %bb.0: # %entry
239; X64_LINUX-NEXT:    movl %fs:i3@TPOFF, %eax
240; X64_LINUX-NEXT:    retq
241;
242; X86_ISEL_LINUX-LABEL: f5:
243; X86_ISEL_LINUX:       # %bb.0: # %entry
244; X86_ISEL_LINUX-NEXT:    movl %gs:i3@NTPOFF, %eax
245; X86_ISEL_LINUX-NEXT:    retl
246;
247; X64_ISEL_LINUX-LABEL: f5:
248; X64_ISEL_LINUX:       # %bb.0: # %entry
249; X64_ISEL_LINUX-NEXT:    movl %fs:i3@TPOFF, %eax
250; X64_ISEL_LINUX-NEXT:    retq
251;
252; X86_WIN-LABEL: f5:
253; X86_WIN:       # %bb.0: # %entry
254; X86_WIN-NEXT:    movl __tls_index, %eax
255; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
256; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
257; X86_WIN-NEXT:    movl _i3@SECREL32(%eax), %eax
258; X86_WIN-NEXT:    retl
259;
260; X64_WIN-LABEL: f5:
261; X64_WIN:       # %bb.0: # %entry
262; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
263; X64_WIN-NEXT:    movq %gs:88, %rcx
264; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
265; X64_WIN-NEXT:    movl i3@SECREL32(%rax), %eax
266; X64_WIN-NEXT:    retq
267;
268; MINGW32-LABEL: f5:
269; MINGW32:       # %bb.0: # %entry
270; MINGW32-NEXT:    movl __tls_index, %eax
271; MINGW32-NEXT:    movl %fs:44, %ecx
272; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
273; MINGW32-NEXT:    movl _i3@SECREL32(%eax), %eax
274; MINGW32-NEXT:    retl
275
276entry:
277	%tmp1 = load i32, ptr @i3
278	ret i32 %tmp1
279}
280
281define dso_local ptr @f6() {
282; X86_LINUX-LABEL: f6:
283; X86_LINUX:       # %bb.0: # %entry
284; X86_LINUX-NEXT:    movl %gs:0, %eax
285; X86_LINUX-NEXT:    leal i3@NTPOFF(%eax), %eax
286; X86_LINUX-NEXT:    retl
287;
288; X64_LINUX-LABEL: f6:
289; X64_LINUX:       # %bb.0: # %entry
290; X64_LINUX-NEXT:    movq %fs:0, %rax
291; X64_LINUX-NEXT:    leaq i3@TPOFF(%rax), %rax
292; X64_LINUX-NEXT:    retq
293;
294; X86_ISEL_LINUX-LABEL: f6:
295; X86_ISEL_LINUX:       # %bb.0: # %entry
296; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
297; X86_ISEL_LINUX-NEXT:    leal i3@NTPOFF(%eax), %eax
298; X86_ISEL_LINUX-NEXT:    retl
299;
300; X64_ISEL_LINUX-LABEL: f6:
301; X64_ISEL_LINUX:       # %bb.0: # %entry
302; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
303; X64_ISEL_LINUX-NEXT:    leaq i3@TPOFF(%rax), %rax
304; X64_ISEL_LINUX-NEXT:    retq
305;
306; X86_WIN-LABEL: f6:
307; X86_WIN:       # %bb.0: # %entry
308; X86_WIN-NEXT:    movl __tls_index, %eax
309; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
310; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
311; X86_WIN-NEXT:    leal _i3@SECREL32(%eax), %eax
312; X86_WIN-NEXT:    retl
313;
314; X64_WIN-LABEL: f6:
315; X64_WIN:       # %bb.0: # %entry
316; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
317; X64_WIN-NEXT:    movq %gs:88, %rcx
318; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
319; X64_WIN-NEXT:    leaq i3@SECREL32(%rax), %rax
320; X64_WIN-NEXT:    retq
321;
322; MINGW32-LABEL: f6:
323; MINGW32:       # %bb.0: # %entry
324; MINGW32-NEXT:    movl __tls_index, %eax
325; MINGW32-NEXT:    movl %fs:44, %ecx
326; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
327; MINGW32-NEXT:    leal _i3@SECREL32(%eax), %eax
328; MINGW32-NEXT:    retl
329
330entry:
331	ret ptr @i3
332}
333
334define dso_local i32 @f7() {
335; X86_LINUX-LABEL: f7:
336; X86_LINUX:       # %bb.0: # %entry
337; X86_LINUX-NEXT:    movl %gs:i4@NTPOFF, %eax
338; X86_LINUX-NEXT:    retl
339;
340; X64_LINUX-LABEL: f7:
341; X64_LINUX:       # %bb.0: # %entry
342; X64_LINUX-NEXT:    movl %fs:i4@TPOFF, %eax
343; X64_LINUX-NEXT:    retq
344;
345; X86_ISEL_LINUX-LABEL: f7:
346; X86_ISEL_LINUX:       # %bb.0: # %entry
347; X86_ISEL_LINUX-NEXT:    movl %gs:i4@NTPOFF, %eax
348; X86_ISEL_LINUX-NEXT:    retl
349;
350; X64_ISEL_LINUX-LABEL: f7:
351; X64_ISEL_LINUX:       # %bb.0: # %entry
352; X64_ISEL_LINUX-NEXT:    movl %fs:i4@TPOFF, %eax
353; X64_ISEL_LINUX-NEXT:    retq
354;
355; X86_WIN-LABEL: f7:
356; X86_WIN:       # %bb.0: # %entry
357; X86_WIN-NEXT:    movl __tls_index, %eax
358; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
359; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
360; X86_WIN-NEXT:    movl _i4@SECREL32(%eax), %eax
361; X86_WIN-NEXT:    retl
362;
363; X64_WIN-LABEL: f7:
364; X64_WIN:       # %bb.0: # %entry
365; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
366; X64_WIN-NEXT:    movq %gs:88, %rcx
367; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
368; X64_WIN-NEXT:    movl i4@SECREL32(%rax), %eax
369; X64_WIN-NEXT:    retq
370;
371; MINGW32-LABEL: f7:
372; MINGW32:       # %bb.0: # %entry
373; MINGW32-NEXT:    movl __tls_index, %eax
374; MINGW32-NEXT:    movl %fs:44, %ecx
375; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
376; MINGW32-NEXT:    movl _i4@SECREL32(%eax), %eax
377; MINGW32-NEXT:    retl
378
379entry:
380	%tmp1 = load i32, ptr @i4
381	ret i32 %tmp1
382}
383
384define dso_local ptr @f8() {
385; X86_LINUX-LABEL: f8:
386; X86_LINUX:       # %bb.0: # %entry
387; X86_LINUX-NEXT:    movl %gs:0, %eax
388; X86_LINUX-NEXT:    leal i4@NTPOFF(%eax), %eax
389; X86_LINUX-NEXT:    retl
390;
391; X64_LINUX-LABEL: f8:
392; X64_LINUX:       # %bb.0: # %entry
393; X64_LINUX-NEXT:    movq %fs:0, %rax
394; X64_LINUX-NEXT:    leaq i4@TPOFF(%rax), %rax
395; X64_LINUX-NEXT:    retq
396;
397; X86_ISEL_LINUX-LABEL: f8:
398; X86_ISEL_LINUX:       # %bb.0: # %entry
399; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
400; X86_ISEL_LINUX-NEXT:    leal i4@NTPOFF(%eax), %eax
401; X86_ISEL_LINUX-NEXT:    retl
402;
403; X64_ISEL_LINUX-LABEL: f8:
404; X64_ISEL_LINUX:       # %bb.0: # %entry
405; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
406; X64_ISEL_LINUX-NEXT:    leaq i4@TPOFF(%rax), %rax
407; X64_ISEL_LINUX-NEXT:    retq
408;
409; X86_WIN-LABEL: f8:
410; X86_WIN:       # %bb.0: # %entry
411; X86_WIN-NEXT:    movl __tls_index, %eax
412; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
413; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
414; X86_WIN-NEXT:    leal _i4@SECREL32(%eax), %eax
415; X86_WIN-NEXT:    retl
416;
417; X64_WIN-LABEL: f8:
418; X64_WIN:       # %bb.0: # %entry
419; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
420; X64_WIN-NEXT:    movq %gs:88, %rcx
421; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
422; X64_WIN-NEXT:    leaq i4@SECREL32(%rax), %rax
423; X64_WIN-NEXT:    retq
424;
425; MINGW32-LABEL: f8:
426; MINGW32:       # %bb.0: # %entry
427; MINGW32-NEXT:    movl __tls_index, %eax
428; MINGW32-NEXT:    movl %fs:44, %ecx
429; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
430; MINGW32-NEXT:    leal _i4@SECREL32(%eax), %eax
431; MINGW32-NEXT:    retl
432
433entry:
434	ret ptr @i4
435}
436
437define dso_local i32 @f9() {
438; X86_LINUX-LABEL: f9:
439; X86_LINUX:       # %bb.0: # %entry
440; X86_LINUX-NEXT:    movl %gs:i5@NTPOFF, %eax
441; X86_LINUX-NEXT:    retl
442;
443; X64_LINUX-LABEL: f9:
444; X64_LINUX:       # %bb.0: # %entry
445; X64_LINUX-NEXT:    movl %fs:i5@TPOFF, %eax
446; X64_LINUX-NEXT:    retq
447;
448; X86_ISEL_LINUX-LABEL: f9:
449; X86_ISEL_LINUX:       # %bb.0: # %entry
450; X86_ISEL_LINUX-NEXT:    movl %gs:i5@NTPOFF, %eax
451; X86_ISEL_LINUX-NEXT:    retl
452;
453; X64_ISEL_LINUX-LABEL: f9:
454; X64_ISEL_LINUX:       # %bb.0: # %entry
455; X64_ISEL_LINUX-NEXT:    movl %fs:i5@TPOFF, %eax
456; X64_ISEL_LINUX-NEXT:    retq
457;
458; X86_WIN-LABEL: f9:
459; X86_WIN:       # %bb.0: # %entry
460; X86_WIN-NEXT:    movl __tls_index, %eax
461; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
462; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
463; X86_WIN-NEXT:    movl _i5@SECREL32(%eax), %eax
464; X86_WIN-NEXT:    retl
465;
466; X64_WIN-LABEL: f9:
467; X64_WIN:       # %bb.0: # %entry
468; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
469; X64_WIN-NEXT:    movq %gs:88, %rcx
470; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
471; X64_WIN-NEXT:    movl i5@SECREL32(%rax), %eax
472; X64_WIN-NEXT:    retq
473;
474; MINGW32-LABEL: f9:
475; MINGW32:       # %bb.0: # %entry
476; MINGW32-NEXT:    movl __tls_index, %eax
477; MINGW32-NEXT:    movl %fs:44, %ecx
478; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
479; MINGW32-NEXT:    movl _i5@SECREL32(%eax), %eax
480; MINGW32-NEXT:    retl
481
482entry:
483	%tmp1 = load i32, ptr @i5
484	ret i32 %tmp1
485}
486
487define dso_local ptr @f10() {
488; X86_LINUX-LABEL: f10:
489; X86_LINUX:       # %bb.0: # %entry
490; X86_LINUX-NEXT:    movl %gs:0, %eax
491; X86_LINUX-NEXT:    leal i5@NTPOFF(%eax), %eax
492; X86_LINUX-NEXT:    retl
493;
494; X64_LINUX-LABEL: f10:
495; X64_LINUX:       # %bb.0: # %entry
496; X64_LINUX-NEXT:    movq %fs:0, %rax
497; X64_LINUX-NEXT:    leaq i5@TPOFF(%rax), %rax
498; X64_LINUX-NEXT:    retq
499;
500; X86_ISEL_LINUX-LABEL: f10:
501; X86_ISEL_LINUX:       # %bb.0: # %entry
502; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
503; X86_ISEL_LINUX-NEXT:    leal i5@NTPOFF(%eax), %eax
504; X86_ISEL_LINUX-NEXT:    retl
505;
506; X64_ISEL_LINUX-LABEL: f10:
507; X64_ISEL_LINUX:       # %bb.0: # %entry
508; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
509; X64_ISEL_LINUX-NEXT:    leaq i5@TPOFF(%rax), %rax
510; X64_ISEL_LINUX-NEXT:    retq
511;
512; X86_WIN-LABEL: f10:
513; X86_WIN:       # %bb.0: # %entry
514; X86_WIN-NEXT:    movl __tls_index, %eax
515; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
516; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
517; X86_WIN-NEXT:    leal _i5@SECREL32(%eax), %eax
518; X86_WIN-NEXT:    retl
519;
520; X64_WIN-LABEL: f10:
521; X64_WIN:       # %bb.0: # %entry
522; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
523; X64_WIN-NEXT:    movq %gs:88, %rcx
524; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
525; X64_WIN-NEXT:    leaq i5@SECREL32(%rax), %rax
526; X64_WIN-NEXT:    retq
527;
528; MINGW32-LABEL: f10:
529; MINGW32:       # %bb.0: # %entry
530; MINGW32-NEXT:    movl __tls_index, %eax
531; MINGW32-NEXT:    movl %fs:44, %ecx
532; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
533; MINGW32-NEXT:    leal _i5@SECREL32(%eax), %eax
534; MINGW32-NEXT:    retl
535
536entry:
537	ret ptr @i5
538}
539
540define i16 @f11() {
541; X86_LINUX-LABEL: f11:
542; X86_LINUX:       # %bb.0: # %entry
543; X86_LINUX-NEXT:    movzwl %gs:s1@NTPOFF, %eax
544; X86_LINUX-NEXT:    retl
545;
546; X64_LINUX-LABEL: f11:
547; X64_LINUX:       # %bb.0: # %entry
548; X64_LINUX-NEXT:    movzwl %fs:s1@TPOFF, %eax
549; X64_LINUX-NEXT:    retq
550;
551; X86_ISEL_LINUX-LABEL: f11:
552; X86_ISEL_LINUX:       # %bb.0: # %entry
553; X86_ISEL_LINUX-NEXT:    movzwl %gs:s1@NTPOFF, %eax
554; X86_ISEL_LINUX-NEXT:    retl
555;
556; X64_ISEL_LINUX-LABEL: f11:
557; X64_ISEL_LINUX:       # %bb.0: # %entry
558; X64_ISEL_LINUX-NEXT:    movzwl %fs:s1@TPOFF, %eax
559; X64_ISEL_LINUX-NEXT:    retq
560;
561; X86_WIN-LABEL: f11:
562; X86_WIN:       # %bb.0: # %entry
563; X86_WIN-NEXT:    movl __tls_index, %eax
564; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
565; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
566; X86_WIN-NEXT:    movzwl _s1@SECREL32(%eax), %eax
567; X86_WIN-NEXT:    retl
568;
569; X64_WIN-LABEL: f11:
570; X64_WIN:       # %bb.0: # %entry
571; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
572; X64_WIN-NEXT:    movq %gs:88, %rcx
573; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
574; X64_WIN-NEXT:    movzwl s1@SECREL32(%rax), %eax
575; X64_WIN-NEXT:    retq
576;
577; MINGW32-LABEL: f11:
578; MINGW32:       # %bb.0: # %entry
579; MINGW32-NEXT:    movl __tls_index, %eax
580; MINGW32-NEXT:    movl %fs:44, %ecx
581; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
582; MINGW32-NEXT:    movzwl _s1@SECREL32(%eax), %eax
583; MINGW32-NEXT:    retl
584
585entry:
586	%tmp1 = load i16, ptr @s1
587	ret i16 %tmp1
588}
589
590define dso_local i32 @f12() {
591; X86_LINUX-LABEL: f12:
592; X86_LINUX:       # %bb.0: # %entry
593; X86_LINUX-NEXT:    movswl %gs:s1@NTPOFF, %eax
594; X86_LINUX-NEXT:    retl
595;
596; X64_LINUX-LABEL: f12:
597; X64_LINUX:       # %bb.0: # %entry
598; X64_LINUX-NEXT:    movswl %fs:s1@TPOFF, %eax
599; X64_LINUX-NEXT:    retq
600;
601; X86_ISEL_LINUX-LABEL: f12:
602; X86_ISEL_LINUX:       # %bb.0: # %entry
603; X86_ISEL_LINUX-NEXT:    movswl %gs:s1@NTPOFF, %eax
604; X86_ISEL_LINUX-NEXT:    retl
605;
606; X64_ISEL_LINUX-LABEL: f12:
607; X64_ISEL_LINUX:       # %bb.0: # %entry
608; X64_ISEL_LINUX-NEXT:    movswl %fs:s1@TPOFF, %eax
609; X64_ISEL_LINUX-NEXT:    retq
610;
611; X86_WIN-LABEL: f12:
612; X86_WIN:       # %bb.0: # %entry
613; X86_WIN-NEXT:    movl __tls_index, %eax
614; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
615; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
616; X86_WIN-NEXT:    movswl _s1@SECREL32(%eax), %eax
617; X86_WIN-NEXT:    retl
618;
619; X64_WIN-LABEL: f12:
620; X64_WIN:       # %bb.0: # %entry
621; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
622; X64_WIN-NEXT:    movq %gs:88, %rcx
623; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
624; X64_WIN-NEXT:    movswl s1@SECREL32(%rax), %eax
625; X64_WIN-NEXT:    retq
626;
627; MINGW32-LABEL: f12:
628; MINGW32:       # %bb.0: # %entry
629; MINGW32-NEXT:    movl __tls_index, %eax
630; MINGW32-NEXT:    movl %fs:44, %ecx
631; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
632; MINGW32-NEXT:    movswl _s1@SECREL32(%eax), %eax
633; MINGW32-NEXT:    retl
634
635
636entry:
637	%tmp1 = load i16, ptr @s1
638  %tmp2 = sext i16 %tmp1 to i32
639	ret i32 %tmp2
640}
641
642define dso_local i8 @f13() {
643; X86_LINUX-LABEL: f13:
644; X86_LINUX:       # %bb.0: # %entry
645; X86_LINUX-NEXT:    movzbl %gs:b1@NTPOFF, %eax
646; X86_LINUX-NEXT:    retl
647;
648; X64_LINUX-LABEL: f13:
649; X64_LINUX:       # %bb.0: # %entry
650; X64_LINUX-NEXT:    movzbl %fs:b1@TPOFF, %eax
651; X64_LINUX-NEXT:    retq
652;
653; X86_ISEL_LINUX-LABEL: f13:
654; X86_ISEL_LINUX:       # %bb.0: # %entry
655; X86_ISEL_LINUX-NEXT:    movzbl %gs:b1@NTPOFF, %eax
656; X86_ISEL_LINUX-NEXT:    retl
657;
658; X64_ISEL_LINUX-LABEL: f13:
659; X64_ISEL_LINUX:       # %bb.0: # %entry
660; X64_ISEL_LINUX-NEXT:    movzbl %fs:b1@TPOFF, %eax
661; X64_ISEL_LINUX-NEXT:    retq
662;
663; X86_WIN-LABEL: f13:
664; X86_WIN:       # %bb.0: # %entry
665; X86_WIN-NEXT:    movl __tls_index, %eax
666; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
667; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
668; X86_WIN-NEXT:    movzbl _b1@SECREL32(%eax), %eax
669; X86_WIN-NEXT:    retl
670;
671; X64_WIN-LABEL: f13:
672; X64_WIN:       # %bb.0: # %entry
673; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
674; X64_WIN-NEXT:    movq %gs:88, %rcx
675; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
676; X64_WIN-NEXT:    movzbl b1@SECREL32(%rax), %eax
677; X64_WIN-NEXT:    retq
678;
679; MINGW32-LABEL: f13:
680; MINGW32:       # %bb.0: # %entry
681; MINGW32-NEXT:    movl __tls_index, %eax
682; MINGW32-NEXT:    movl %fs:44, %ecx
683; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
684; MINGW32-NEXT:    movzbl _b1@SECREL32(%eax), %eax
685; MINGW32-NEXT:    retl
686
687entry:
688	%tmp1 = load i8, ptr @b1
689	ret i8 %tmp1
690}
691
692define dso_local i32 @f14() {
693; X86_LINUX-LABEL: f14:
694; X86_LINUX:       # %bb.0: # %entry
695; X86_LINUX-NEXT:    movsbl %gs:b1@NTPOFF, %eax
696; X86_LINUX-NEXT:    retl
697;
698; X64_LINUX-LABEL: f14:
699; X64_LINUX:       # %bb.0: # %entry
700; X64_LINUX-NEXT:    movsbl %fs:b1@TPOFF, %eax
701; X64_LINUX-NEXT:    retq
702;
703; X86_ISEL_LINUX-LABEL: f14:
704; X86_ISEL_LINUX:       # %bb.0: # %entry
705; X86_ISEL_LINUX-NEXT:    movsbl %gs:b1@NTPOFF, %eax
706; X86_ISEL_LINUX-NEXT:    retl
707;
708; X64_ISEL_LINUX-LABEL: f14:
709; X64_ISEL_LINUX:       # %bb.0: # %entry
710; X64_ISEL_LINUX-NEXT:    movsbl %fs:b1@TPOFF, %eax
711; X64_ISEL_LINUX-NEXT:    retq
712;
713; X86_WIN-LABEL: f14:
714; X86_WIN:       # %bb.0: # %entry
715; X86_WIN-NEXT:    movl __tls_index, %eax
716; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
717; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
718; X86_WIN-NEXT:    movsbl _b1@SECREL32(%eax), %eax
719; X86_WIN-NEXT:    retl
720;
721; X64_WIN-LABEL: f14:
722; X64_WIN:       # %bb.0: # %entry
723; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
724; X64_WIN-NEXT:    movq %gs:88, %rcx
725; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
726; X64_WIN-NEXT:    movsbl b1@SECREL32(%rax), %eax
727; X64_WIN-NEXT:    retq
728;
729; MINGW32-LABEL: f14:
730; MINGW32:       # %bb.0: # %entry
731; MINGW32-NEXT:    movl __tls_index, %eax
732; MINGW32-NEXT:    movl %fs:44, %ecx
733; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
734; MINGW32-NEXT:    movsbl _b1@SECREL32(%eax), %eax
735; MINGW32-NEXT:    retl
736
737entry:
738	%tmp1 = load i8, ptr @b1
739  %tmp2 = sext i8 %tmp1 to i32
740	ret i32 %tmp2
741}
742
743define dso_local ptr @f15() {
744; X86_LINUX-LABEL: f15:
745; X86_LINUX:       # %bb.0: # %entry
746; X86_LINUX-NEXT:    movl %gs:0, %eax
747; X86_LINUX-NEXT:    leal b2@NTPOFF(%eax), %eax
748; X86_LINUX-NEXT:    retl
749;
750; X64_LINUX-LABEL: f15:
751; X64_LINUX:       # %bb.0: # %entry
752; X64_LINUX-NEXT:    movq %fs:0, %rax
753; X64_LINUX-NEXT:    leaq b2@TPOFF(%rax), %rax
754; X64_LINUX-NEXT:    retq
755;
756; X86_ISEL_LINUX-LABEL: f15:
757; X86_ISEL_LINUX:       # %bb.0: # %entry
758; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
759; X86_ISEL_LINUX-NEXT:    leal b2@NTPOFF(%eax), %eax
760; X86_ISEL_LINUX-NEXT:    retl
761;
762; X64_ISEL_LINUX-LABEL: f15:
763; X64_ISEL_LINUX:       # %bb.0: # %entry
764; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
765; X64_ISEL_LINUX-NEXT:    leaq b2@TPOFF(%rax), %rax
766; X64_ISEL_LINUX-NEXT:    retq
767;
768; X86_WIN-LABEL: f15:
769; X86_WIN:       # %bb.0: # %entry
770; X86_WIN-NEXT:    movl %fs:__tls_array, %eax
771; X86_WIN-NEXT:    movl (%eax), %eax
772; X86_WIN-NEXT:    leal _b2@SECREL32(%eax), %eax
773; X86_WIN-NEXT:    retl
774;
775; X64_WIN-LABEL: f15:
776; X64_WIN:       # %bb.0: # %entry
777; X64_WIN-NEXT:    movq %gs:88, %rax
778; X64_WIN-NEXT:    movq (%rax), %rax
779; X64_WIN-NEXT:    leaq b2@SECREL32(%rax), %rax
780; X64_WIN-NEXT:    retq
781;
782; MINGW32-LABEL: f15:
783; MINGW32:       # %bb.0: # %entry
784; MINGW32-NEXT:    movl %fs:44, %eax
785; MINGW32-NEXT:    movl (%eax), %eax
786; MINGW32-NEXT:    leal _b2@SECREL32(%eax), %eax
787; MINGW32-NEXT:    retl
788entry:
789	ret ptr @b2
790}
791
792
793define dso_local ptr @f16() {
794; X86_LINUX-LABEL: f16:
795; X86_LINUX:       # %bb.0:
796; X86_LINUX-NEXT:    movl %gs:0, %eax
797; X86_LINUX-NEXT:    leal i6@NTPOFF(%eax), %eax
798; X86_LINUX-NEXT:    retl
799;
800; X64_LINUX-LABEL: f16:
801; X64_LINUX:       # %bb.0:
802; X64_LINUX-NEXT:    movq %fs:0, %rax
803; X64_LINUX-NEXT:    leaq i6@TPOFF(%rax), %rax
804; X64_LINUX-NEXT:    retq
805;
806; X86_ISEL_LINUX-LABEL: f16:
807; X86_ISEL_LINUX:       # %bb.0:
808; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
809; X86_ISEL_LINUX-NEXT:    leal i6@NTPOFF(%eax), %eax
810; X86_ISEL_LINUX-NEXT:    retl
811;
812; X64_ISEL_LINUX-LABEL: f16:
813; X64_ISEL_LINUX:       # %bb.0:
814; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
815; X64_ISEL_LINUX-NEXT:    leaq i6@TPOFF(%rax), %rax
816; X64_ISEL_LINUX-NEXT:    retq
817;
818; X86_WIN-LABEL: f16:
819; X86_WIN:       # %bb.0:
820; X86_WIN-NEXT:    movl __tls_index, %eax
821; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
822; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
823; X86_WIN-NEXT:    leal _i6@SECREL32(%eax), %eax
824; X86_WIN-NEXT:    retl
825;
826; X64_WIN-LABEL: f16:
827; X64_WIN:       # %bb.0:
828; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
829; X64_WIN-NEXT:    movq %gs:88, %rcx
830; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
831; X64_WIN-NEXT:    leaq i6@SECREL32(%rax), %rax
832; X64_WIN-NEXT:    retq
833;
834; MINGW32-LABEL: f16:
835; MINGW32:       # %bb.0:
836; MINGW32-NEXT:    movl __tls_index, %eax
837; MINGW32-NEXT:    movl %fs:44, %ecx
838; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
839; MINGW32-NEXT:    leal _i6@SECREL32(%eax), %eax
840; MINGW32-NEXT:    retl
841
842
843  ret ptr @i6
844}
845
846; NOTE: Similar to f1() but with direct TLS segment access disabled
847define dso_local i32 @f17() #0 {
848; X86_LINUX-LABEL: f17:
849; X86_LINUX:       # %bb.0: # %entry
850; X86_LINUX-NEXT:    movl %gs:0, %eax
851; X86_LINUX-NEXT:    movl i1@NTPOFF(%eax), %eax
852; X86_LINUX-NEXT:    retl
853;
854; X64_LINUX-LABEL: f17:
855; X64_LINUX:       # %bb.0: # %entry
856; X64_LINUX-NEXT:    movq %fs:0, %rax
857; X64_LINUX-NEXT:    movl i1@TPOFF(%rax), %eax
858; X64_LINUX-NEXT:    retq
859;
860; X86_ISEL_LINUX-LABEL: f17:
861; X86_ISEL_LINUX:       # %bb.0: # %entry
862; X86_ISEL_LINUX-NEXT:    movl %gs:0, %eax
863; X86_ISEL_LINUX-NEXT:    movl i1@NTPOFF(%eax), %eax
864; X86_ISEL_LINUX-NEXT:    retl
865;
866; X64_ISEL_LINUX-LABEL: f17:
867; X64_ISEL_LINUX:       # %bb.0: # %entry
868; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rax
869; X64_ISEL_LINUX-NEXT:    movl i1@TPOFF(%rax), %eax
870; X64_ISEL_LINUX-NEXT:    retq
871;
872; X86_WIN-LABEL: f17:
873; X86_WIN:       # %bb.0: # %entry
874; X86_WIN-NEXT:    movl __tls_index, %eax
875; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
876; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
877; X86_WIN-NEXT:    movl _i1@SECREL32(%eax), %eax
878; X86_WIN-NEXT:    retl
879;
880; X64_WIN-LABEL: f17:
881; X64_WIN:       # %bb.0: # %entry
882; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
883; X64_WIN-NEXT:    movq %gs:88, %rcx
884; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
885; X64_WIN-NEXT:    movl i1@SECREL32(%rax), %eax
886; X64_WIN-NEXT:    retq
887;
888; MINGW32-LABEL: f17:
889; MINGW32:       # %bb.0: # %entry
890; MINGW32-NEXT:    movl __tls_index, %eax
891; MINGW32-NEXT:    movl %fs:44, %ecx
892; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
893; MINGW32-NEXT:    movl _i1@SECREL32(%eax), %eax
894; MINGW32-NEXT:    retl
895
896entry:
897	%tmp1 = load i32, ptr @i1
898	ret i32 %tmp1
899}
900
901; NOTE: Similar to f3() but with direct TLS segment access disabled
902define dso_local i32 @f18() #1 {
903; X86_LINUX-LABEL: f18:
904; X86_LINUX:       # %bb.0: # %entry
905; X86_LINUX-NEXT:    movl i2@INDNTPOFF, %eax
906; X86_LINUX-NEXT:    movl %gs:0, %ecx
907; X86_LINUX-NEXT:    movl (%ecx,%eax), %eax
908; X86_LINUX-NEXT:    retl
909;
910; X64_LINUX-LABEL: f18:
911; X64_LINUX:       # %bb.0: # %entry
912; X64_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax
913; X64_LINUX-NEXT:    movq %fs:0, %rcx
914; X64_LINUX-NEXT:    movl (%rcx,%rax), %eax
915; X64_LINUX-NEXT:    retq
916;
917; X86_ISEL_LINUX-LABEL: f18:
918; X86_ISEL_LINUX:       # %bb.0: # %entry
919; X86_ISEL_LINUX-NEXT:    movl i2@INDNTPOFF, %eax
920; X86_ISEL_LINUX-NEXT:    movl %gs:0, %ecx
921; X86_ISEL_LINUX-NEXT:    movl (%ecx,%eax), %eax
922; X86_ISEL_LINUX-NEXT:    retl
923;
924; X64_ISEL_LINUX-LABEL: f18:
925; X64_ISEL_LINUX:       # %bb.0: # %entry
926; X64_ISEL_LINUX-NEXT:    movq i2@GOTTPOFF(%rip), %rax
927; X64_ISEL_LINUX-NEXT:    movq %fs:0, %rcx
928; X64_ISEL_LINUX-NEXT:    movl (%rcx,%rax), %eax
929; X64_ISEL_LINUX-NEXT:    retq
930;
931; X86_WIN-LABEL: f18:
932; X86_WIN:       # %bb.0: # %entry
933; X86_WIN-NEXT:    movl __tls_index, %eax
934; X86_WIN-NEXT:    movl %fs:__tls_array, %ecx
935; X86_WIN-NEXT:    movl (%ecx,%eax,4), %eax
936; X86_WIN-NEXT:    movl _i2@SECREL32(%eax), %eax
937; X86_WIN-NEXT:    retl
938;
939; X64_WIN-LABEL: f18:
940; X64_WIN:       # %bb.0: # %entry
941; X64_WIN-NEXT:    movl _tls_index(%rip), %eax
942; X64_WIN-NEXT:    movq %gs:88, %rcx
943; X64_WIN-NEXT:    movq (%rcx,%rax,8), %rax
944; X64_WIN-NEXT:    movl i2@SECREL32(%rax), %eax
945; X64_WIN-NEXT:    retq
946;
947; MINGW32-LABEL: f18:
948; MINGW32:       # %bb.0: # %entry
949; MINGW32-NEXT:    movl __tls_index, %eax
950; MINGW32-NEXT:    movl %fs:44, %ecx
951; MINGW32-NEXT:    movl (%ecx,%eax,4), %eax
952; MINGW32-NEXT:    movl _i2@SECREL32(%eax), %eax
953; MINGW32-NEXT:    retl
954
955
956entry:
957	%tmp1 = load i32, ptr @i2
958	ret i32 %tmp1
959}
960
961attributes #0 = { "indirect-tls-seg-refs" }
962attributes #1 = { nounwind "indirect-tls-seg-refs" }
963