Implement target independent TLS compatible with glibc's emutls.c.
[oota-llvm.git] / test / CodeGen / X86 / tls-android-negative.ll
1 ; RUN: llc < %s -emulated-tls -march=x86 -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck  %s
2 ; RUN: llc < %s -emulated-tls -march=x86-64 -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck  %s
3
4 ; Make sure that some symboles are not emitted in emulated TLS model.
5
6 @external_x = external thread_local global i32
7 @external_y = thread_local global i32 7
8 @internal_y = internal thread_local global i32 9
9 @internal_y0 = internal thread_local global i32 0
10
11 define i32* @get_external_x() {
12 entry:
13   ret i32* @external_x
14 }
15
16 define i32* @get_external_y() {
17 entry:
18   ret i32* @external_y
19 }
20
21 define i32* @get_internal_y() {
22 entry:
23   ret i32* @internal_y
24 }
25
26 define i32* @get_internal_y0() {
27 entry:
28   ret i32* @internal_y0
29 }
30
31 ; no direct access to emulated TLS variables.
32 ; no definition of emulated TLS variables.
33 ; no initializer for external TLS variables, __emutls_t.external_x
34 ; no initializer for 0-initialized TLS variables, __emutls_t.internal_y0
35 ; not global linkage for __emutls_t.external_y
36
37 ; CHECK-NOT: external_x@TLS
38 ; CHECK-NOT: external_y@TLS
39 ; CHECK-NOT: internal_y@TLS
40 ; CHECK-NOT: .size external_x
41 ; CHECK-NOT: .size external_y
42 ; CHECK-NOT: .size internal_y
43 ; CHECK-NOT: .size internal_y0
44 ; CHECK-NOT: __emutls_v.external_x:
45 ; CHECK-NOT: __emutls_t.external_x:
46 ; CHECK-NOT: __emutls_t.internal_y0:
47 ; CHECK-NOT: global __emutls_t.external_y
48 ; CHECK-NOT: global __emutls_v.internal_y
49 ; CHECK-NOT: global __emutls_v.internal_y0
50
51 ; CHECK:     __emutls_t.external_y
52
53 ; CHECK-NOT: external_x@TLS
54 ; CHECK-NOT: external_y@TLS
55 ; CHECK-NOT: internal_y@TLS
56 ; CHECK-NOT: .size external_x
57 ; CHECK-NOT: .size external_y
58 ; CHECK-NOT: .size internal_y
59 ; CHECK-NOT: .size internal_y0
60 ; CHECK-NOT: __emutls_v.external_x:
61 ; CHECK-NOT: __emutls_t.external_x:
62 ; CHECK-NOT: __emutls_t.internal_y0:
63 ; CHECK-NOT: global __emutls_t.external_y
64 ; CHECK-NOT: global __emutls_v.internal_y
65 ; CHECK-NOT: global __emutls_v.internal_y0