xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/tls-android.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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 -check-prefix=X64 %s
3
4; Make sure that TLS symboles are emitted in expected order.
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
10define i32* @get_external_x() {
11entry:
12  ret i32* @external_x
13}
14
15define i32* @get_external_y() {
16entry:
17  ret i32* @external_y
18}
19
20define i32* @get_internal_y() {
21entry:
22  ret i32* @internal_y
23}
24
25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 32-bit mode
26; CHECK-LABEL: get_external_x:
27; CHECK:  __emutls_v.external_x
28; CHECK:  __emutls_get_address
29
30; CHECK-LABEL: get_external_y:
31; CHECK:  __emutls_v.external_y
32; CHECK:  __emutls_get_address
33
34; CHECK-LABEL: get_internal_y:
35; CHECK:  __emutls_v.internal_y
36; CHECK:  __emutls_get_address
37
38; CHECK-NOT: __emutls_v.external_x:
39
40; CHECK:       .p2align 2
41; CHECK-LABEL: __emutls_v.external_y:
42; CHECK-NEXT:  .long 4
43; CHECK-NEXT:  .long 4
44; CHECK-NEXT:  .long 0
45; CHECK-NEXT:  .long __emutls_t.external_y
46; CHECK-LABEL: __emutls_t.external_y:
47; CHECK-NEXT:  .long 7
48
49; CHECK:       .p2align 2
50; CHECK-LABEL: __emutls_v.internal_y:
51; CHECK-NEXT:  .long 4
52; CHECK-NEXT:  .long 4
53; CHECK-NEXT:  .long 0
54; CHECK-NEXT:  .long __emutls_t.internal_y
55; CHECK-LABEL: __emutls_t.internal_y:
56; CHECK-NEXT:  .long 9
57
58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 64-bit mode
59; X64-LABEL: get_external_x:
60; X64:  __emutls_v.external_x
61; X64:  __emutls_get_address
62
63; X64-LABEL: get_external_y:
64; X64:  __emutls_v.external_y
65; X64:  __emutls_get_address
66
67; X64-LABEL: get_internal_y:
68; X64:  __emutls_v.internal_y
69; X64:  __emutls_get_address
70
71; X64-NOT: __emutls_v.external_x:
72
73; X64:       .p2align 3
74; X64-LABEL: __emutls_v.external_y:
75; X64-NEXT:  .quad 4
76; X64-NEXT:  .quad 4
77; X64-NEXT:  .quad 0
78; X64-NEXT:  .quad __emutls_t.external_y
79; X64-LABEL: __emutls_t.external_y:
80; X64-NEXT:  .long 7
81
82; X64:       .p2align 3
83; X64-LABEL: __emutls_v.internal_y:
84; X64-NEXT:  .quad 4
85; X64-NEXT:  .quad 4
86; X64-NEXT:  .quad 0
87; X64-NEXT:  .quad __emutls_t.internal_y
88; X64-LABEL: __emutls_t.internal_y:
89; X64-NEXT:  .long 9
90