xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/emutls_generic.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic \
2*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck -check-prefix=X86_32 %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -march=x86 -relocation-model=pic \
4*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck -check-prefix=X86_32 %s
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic \
6*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck -check-prefix=X86_64 %s
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -emulated-tls -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic \
8*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck %s
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; Make sure that TLS symbols are emitted in expected order.
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker@external_x = external thread_local global i32, align 8
13*9880d681SAndroid Build Coastguard Worker@external_y = thread_local global i8 7, align 2
14*9880d681SAndroid Build Coastguard Worker@internal_y = internal thread_local global i64 9, align 16
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine i32* @get_external_x() {
17*9880d681SAndroid Build Coastguard Workerentry:
18*9880d681SAndroid Build Coastguard Worker  ret i32* @external_x
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine i8* @get_external_y() {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  ret i8* @external_y
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine i64* @get_internal_y() {
27*9880d681SAndroid Build Coastguard Workerentry:
28*9880d681SAndroid Build Coastguard Worker  ret i64* @internal_y
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_external_x:
32*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   _tls_get_address
33*9880d681SAndroid Build Coastguard Worker; CHECK:       __emutls_get_address
34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_external_y:
35*9880d681SAndroid Build Coastguard Worker; CHECK:       __emutls_get_address
36*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   _tls_get_address
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: get_internal_y:
38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   __emutls_t.external_x:
39*9880d681SAndroid Build Coastguard Worker; CHECK-NOT:   __emutls_v.external_x:
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: __emutls_v.external_y:
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: __emutls_t.external_y:
42*9880d681SAndroid Build Coastguard Worker; CHECK:       __emutls_t.external_y
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: __emutls_v.internal_y:
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: __emutls_t.internal_y:
45*9880d681SAndroid Build Coastguard Worker; CHECK:       __emutls_t.internal_y
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  get_external_x:
48*9880d681SAndroid Build Coastguard Worker; X86_32:        movl __emutls_v.external_x@GOT(%ebx)
49*9880d681SAndroid Build Coastguard Worker; X86_32:        calll __emutls_get_address
50*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  get_external_y:
51*9880d681SAndroid Build Coastguard Worker; X86_32:        movl __emutls_v.external_y@GOT(%ebx)
52*9880d681SAndroid Build Coastguard Worker; X86_32:        calll __emutls_get_address
53*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  get_internal_y:
54*9880d681SAndroid Build Coastguard Worker; X86_32:        leal __emutls_v.internal_y@GOTOFF(%ebx)
55*9880d681SAndroid Build Coastguard Worker; X86_32:        calll __emutls_get_address
56*9880d681SAndroid Build Coastguard Worker; X86_32-NOT:    __emutls_t.external_x
57*9880d681SAndroid Build Coastguard Worker; X86_32-NOT:    __emutls_v.external_x:
58*9880d681SAndroid Build Coastguard Worker; X86_32:        .data{{$}}
59*9880d681SAndroid Build Coastguard Worker; X86_32:        .globl __emutls_v.external_y
60*9880d681SAndroid Build Coastguard Worker; X86_32:        .p2align 2
61*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  __emutls_v.external_y:
62*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 1
63*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 2
64*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 0
65*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long __emutls_t.external_y
66*9880d681SAndroid Build Coastguard Worker; X86_32:        .section .rodata,
67*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  __emutls_t.external_y:
68*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .byte 7
69*9880d681SAndroid Build Coastguard Worker; X86_32:        .data{{$}}
70*9880d681SAndroid Build Coastguard Worker; X86_32-NOT:    .globl
71*9880d681SAndroid Build Coastguard Worker; X86_32:        .p2align 2
72*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  __emutls_v.internal_y:
73*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 8
74*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 16
75*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long 0
76*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .long __emutls_t.internal_y
77*9880d681SAndroid Build Coastguard Worker; X86_32-LABEL:  __emutls_t.internal_y:
78*9880d681SAndroid Build Coastguard Worker; X86_32-NEXT:   .quad 9
79*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  get_external_x:
80*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_v.external_x@GOTPCREL(%rip)
81*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_get_address
82*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  get_external_y:
83*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_v.external_y@GOTPCREL(%rip)
84*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_get_address
85*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  get_internal_y:
86*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_v.internal_y(%rip)
87*9880d681SAndroid Build Coastguard Worker; X86_64:        __emutls_get_address
88*9880d681SAndroid Build Coastguard Worker; X86_64-NOT:    __emutls_t.external_x
89*9880d681SAndroid Build Coastguard Worker; X86_64-NOT:    __emutls_v.external_x:
90*9880d681SAndroid Build Coastguard Worker; X86_64:        .globl __emutls_v.external_y
91*9880d681SAndroid Build Coastguard Worker; X86_64:        .p2align 3
92*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  __emutls_v.external_y:
93*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 1
94*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 2
95*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 0
96*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad __emutls_t.external_y
97*9880d681SAndroid Build Coastguard Worker; X86_64-NOT:    __emutls_v.external_x:
98*9880d681SAndroid Build Coastguard Worker; X86_64:        .section .rodata,
99*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  __emutls_t.external_y:
100*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .byte 7
101*9880d681SAndroid Build Coastguard Worker; X86_64:        .data{{$}}
102*9880d681SAndroid Build Coastguard Worker; X86_64-NOT:    .globl
103*9880d681SAndroid Build Coastguard Worker; X86_64:        .p2align 3
104*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  __emutls_v.internal_y:
105*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 8
106*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 16
107*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 0
108*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad __emutls_t.internal_y
109*9880d681SAndroid Build Coastguard Worker; X86_64:        .section .rodata,
110*9880d681SAndroid Build Coastguard Worker; X86_64-LABEL:  __emutls_t.internal_y:
111*9880d681SAndroid Build Coastguard Worker; X86_64-NEXT:   .quad 9
112