1 ; RUN: llc -emulated-tls -mtriple=aarch64-linux-android \
2 ; RUN: -relocation-model=pic < %s | FileCheck -check-prefix=ARM64 %s
4 ; Copied from X86/emutls.ll
6 ; Use my_emutls_get_address like __emutls_get_address.
7 @my_emutls_v_xyz = external global i8*, align 4
8 declare i8* @my_emutls_get_address(i8*)
10 define i32 @my_get_xyz() {
11 ; ARM64-LABEL: my_get_xyz:
12 ; ARM64: adrp x0, :got:my_emutls_v_xyz
13 ; ARM64-NEXT: ldr x0, [x0, :got_lo12:my_emutls_v_xyz]
14 ; ARM64-NEXT: bl my_emutls_get_address
15 ; ARM64-NEXT: ldr w0, [x0]
16 ; ARM64-NEXT: ldp x29, x30, [sp]
19 %call = call i8* @my_emutls_get_address(i8* bitcast (i8** @my_emutls_v_xyz to i8*))
20 %0 = bitcast i8* %call to i32*
21 %1 = load i32, i32* %0, align 4
25 @i1 = thread_local global i32 15
26 @i2 = external thread_local global i32
27 @i3 = internal thread_local global i32 15
28 @i4 = hidden thread_local global i32 15
29 @i5 = external hidden thread_local global i32
30 @s1 = thread_local global i16 15
31 @b1 = thread_local global i8 0
35 ; ARM64: adrp x0, :got:__emutls_v.i1
36 ; ARM64-NEXT: ldr x0, [x0, :got_lo12:__emutls_v.i1]
37 ; ARM64-NEXT: bl __emutls_get_address
38 ; ARM64-NEXT: ldr w0, [x0]
39 ; ARM64-NEXT: ldp x29, x30, [sp]
42 %tmp1 = load i32, i32* @i1
48 ; ARM64: adrp x0, :got:__emutls_v.i1
49 ; ARM64-NEXT: ldr x0, [x0, :got_lo12:__emutls_v.i1]
50 ; ARM64-NEXT: bl __emutls_get_address
51 ; ARM64-NEXT: ldp x29, x30, [sp]
57 ;;;;;;;;;;;;;; 64-bit __emutls_v. and __emutls_t.
59 ; ARM64 .section .data.rel.local,
60 ; ARM64-LABEL: __emutls_v.i1:
61 ; ARM64-NEXT: .xword 4
62 ; ARM64-NEXT: .xword 4
63 ; ARM64-NEXT: .xword 0
64 ; ARM64-NEXT: .xword __emutls_t.i1
66 ; ARM64 .section .rodata,
67 ; ARM64-LABEL: __emutls_t.i1:
68 ; ARM64-NEXT: .word 15
70 ; ARM64-NOT: __emutls_v.i2
72 ; ARM64 .section .data.rel.local,
73 ; ARM64-LABEL: __emutls_v.i3:
74 ; ARM64-NEXT: .xword 4
75 ; ARM64-NEXT: .xword 4
76 ; ARM64-NEXT: .xword 0
77 ; ARM64-NEXT: .xword __emutls_t.i3
79 ; ARM64 .section .rodata,
80 ; ARM64-LABEL: __emutls_t.i3:
81 ; ARM64-NEXT: .word 15
83 ; ARM64 .section .data.rel.local,
84 ; ARM64-LABEL: __emutls_v.i4:
85 ; ARM64-NEXT: .xword 4
86 ; ARM64-NEXT: .xword 4
87 ; ARM64-NEXT: .xword 0
88 ; ARM64-NEXT: .xword __emutls_t.i4
90 ; ARM64 .section .rodata,
91 ; ARM64-LABEL: __emutls_t.i4:
92 ; ARM64-NEXT: .word 15
94 ; ARM64-NOT: __emutls_v.i5:
95 ; ARM64 .hidden __emutls_v.i5
96 ; ARM64-NOT: __emutls_v.i5:
98 ; ARM64 .section .data.rel.local,
99 ; ARM64-LABEL: __emutls_v.s1:
100 ; ARM64-NEXT: .xword 2
101 ; ARM64-NEXT: .xword 2
102 ; ARM64-NEXT: .xword 0
103 ; ARM64-NEXT: .xword __emutls_t.s1
105 ; ARM64 .section .rodata,
106 ; ARM64-LABEL: __emutls_t.s1:
107 ; ARM64-NEXT: .hword 15
109 ; ARM64 .section .data.rel.local,
110 ; ARM64-LABEL: __emutls_v.b1:
111 ; ARM64-NEXT: .xword 1
112 ; ARM64-NEXT: .xword 1
113 ; ARM64-NEXT: .xword 0
114 ; ARM64-NEXT: .xword 0
116 ; ARM64-NOT: __emutls_t.b1