Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / tls-models.ll
blob8de9de15a5f06ee5c88d5429995a65ecfaaddcef
1 ; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=X64 %s
2 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64_PIC %s
3 ; RUN: llc < %s -mtriple=i386-linux-gnu | FileCheck -check-prefix=X32 %s
4 ; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32_PIC %s
6 ; Darwin always uses the same model.
7 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck -check-prefix=DARWIN %s
8 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -code-model=large | FileCheck -check-prefix=DARWIN %s
10 @external_gd = external thread_local global i32
11 @internal_gd = internal thread_local global i32 42
13 @external_ld = external thread_local(localdynamic) global i32
14 @internal_ld = internal thread_local(localdynamic) global i32 42
16 @external_ie = external thread_local(initialexec) global i32
17 @internal_ie = internal thread_local(initialexec) global i32 42
19 @external_le = external thread_local(localexec) global i32
20 @internal_le = internal thread_local(localexec) global i32 42
22 ; See test cases for emulated model in emutls.ll, emutls-pic.ll and emutls-pie.ll.
24 ; ----- no model specified -----
26 define ptr @f1() {
27 entry:
28   ret ptr @external_gd
30   ; Non-PIC code can use initial-exec, PIC code has to use general dynamic.
31   ; X64-LABEL:     f1:
32   ; X64:     external_gd@GOTTPOFF
33   ; X32-LABEL:     f1:
34   ; X32:     external_gd@INDNTPOFF
35   ; X64_PIC-LABEL: f1:
36   ; X64_PIC: external_gd@TLSGD
37   ; X32_PIC-LABEL: f1:
38   ; X32_PIC: external_gd@TLSGD
39   ; DARWIN-LABEL:  f1:
40   ; DARWIN:  _external_gd@TLVP
43 define ptr @f2() {
44 entry:
45   ret ptr @internal_gd
47   ; Non-PIC code can use local exec, PIC code can use local dynamic.
48   ; X64-LABEL:     f2:
49   ; X64:     internal_gd@TPOFF
50   ; X32-LABEL:     f2:
51   ; X32:     internal_gd@NTPOFF
52   ; X64_PIC-LABEL: f2:
53   ; X64_PIC: internal_gd@TLSLD
54   ; X32_PIC-LABEL: f2:
55   ; X32_PIC: internal_gd@TLSLDM
56   ; DARWIN-LABEL:  f2:
57   ; DARWIN:  _internal_gd@TLVP
61 ; ----- localdynamic specified -----
63 define ptr @f3() {
64 entry:
65   ret ptr @external_ld
67   ; Non-PIC code can use initial exec, PIC code use local dynamic as specified.
68   ; X64-LABEL:     f3:
69   ; X64:     external_ld@GOTTPOFF
70   ; X32-LABEL:     f3:
71   ; X32:     external_ld@INDNTPOFF
72   ; X64_PIC-LABEL: f3:
73   ; X64_PIC: external_ld@TLSLD
74   ; X32_PIC-LABEL: f3:
75   ; X32_PIC: external_ld@TLSLDM
76   ; DARWIN-LABEL:  f3:
77   ; DARWIN:  _external_ld@TLVP
80 define ptr @f4() {
81 entry:
82   ret ptr @internal_ld
84   ; Non-PIC code can use local exec, PIC code can use local dynamic.
85   ; X64-LABEL:     f4:
86   ; X64:     internal_ld@TPOFF
87   ; X32-LABEL:     f4:
88   ; X32:     internal_ld@NTPOFF
89   ; X64_PIC-LABEL: f4:
90   ; X64_PIC: internal_ld@TLSLD
91   ; X32_PIC-LABEL: f4:
92   ; X32_PIC: internal_ld@TLSLDM
93   ; DARWIN-LABEL:  f4:
94   ; DARWIN:  _internal_ld@TLVP
98 ; ----- initialexec specified -----
100 define ptr @f5() {
101 entry:
102   ret ptr @external_ie
104   ; Non-PIC and PIC code will use initial exec as specified.
105   ; X64-LABEL:     f5:
106   ; X64:     external_ie@GOTTPOFF
107   ; X32-LABEL:     f5:
108   ; X32:     external_ie@INDNTPOFF
109   ; X64_PIC-LABEL: f5:
110   ; X64_PIC: external_ie@GOTTPOFF
111   ; X32_PIC-LABEL: f5:
112   ; X32_PIC: external_ie@GOTNTPOFF
113   ; DARWIN-LABEL:  f5:
114   ; DARWIN:  _external_ie@TLVP
117 define ptr @f6() {
118 entry:
119   ret ptr @internal_ie
121   ; Non-PIC code can use local exec, PIC code use initial exec as specified.
122   ; X64-LABEL:     f6:
123   ; X64:     internal_ie@TPOFF
124   ; X32-LABEL:     f6:
125   ; X32:     internal_ie@NTPOFF
126   ; X64_PIC-LABEL: f6:
127   ; X64_PIC: internal_ie@GOTTPOFF
128   ; X32_PIC-LABEL: f6:
129   ; X32_PIC: internal_ie@GOTNTPOFF
130   ; DARWIN-LABEL:  f6:
131   ; DARWIN:  _internal_ie@TLVP
134 define i32 @PR22083() {
135 entry:
136   ret i32 ptrtoint (ptr @external_ie to i32)
137   ; X64-LABEL:     PR22083:
138   ; X64:     movq    external_ie@GOTTPOFF(%rip), %rax
139   ; X64_PIC-LABEL: PR22083:
140   ; X64_PIC: movq    external_ie@GOTTPOFF(%rip), %rax
143 ; ----- localexec specified -----
145 define ptr @f7() {
146 entry:
147   ret ptr @external_le
149   ; Non-PIC and PIC code will use local exec as specified.
150   ; X64-LABEL:     f7:
151   ; X64:     external_le@TPOFF
152   ; X32-LABEL:     f7:
153   ; X32:     external_le@NTPOFF
154   ; X64_PIC-LABEL: f7:
155   ; X64_PIC: external_le@TPOFF
156   ; X32_PIC-LABEL: f7:
157   ; X32_PIC: external_le@NTPOFF
158   ; DARWIN-LABEL:  f7:
159   ; DARWIN:  _external_le@TLVP
162 define ptr @f8() {
163 entry:
164   ret ptr @internal_le
166   ; Non-PIC and PIC code will use local exec as specified.
167   ; X64-LABEL:     f8:
168   ; X64:     internal_le@TPOFF
169   ; X32-LABEL:     f8:
170   ; X32:     internal_le@NTPOFF
171   ; X64_PIC-LABEL: f8:
172   ; X64_PIC: internal_le@TPOFF
173   ; X32_PIC-LABEL: f8:
174   ; X32_PIC: internal_le@NTPOFF
175   ; DARWIN-LABEL:  f8:
176   ; DARWIN:  _internal_le@TLVP