Split ARM and AArch64 emutls.ll test
[oota-llvm.git] / test / CodeGen / AArch64 / emutls.ll
1 ; RUN: llc -emulated-tls -mtriple=aarch64-linux-android \
2 ; RUN:     -relocation-model=pic < %s | FileCheck -check-prefix=ARM64 %s
3
4 ; Copied from X86/emutls.ll
5
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*)
9
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]
17
18 entry:
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
22   ret i32 %1
23 }
24
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
32
33 define i32 @f1() {
34 ; ARM64-LABEL: f1:
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]
40
41 entry:
42   %tmp1 = load i32, i32* @i1
43   ret i32 %tmp1
44 }
45
46 define i32* @f2() {
47 ; ARM64-LABEL: f2:
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]
52
53 entry:
54   ret i32* @i1
55 }
56
57 ;;;;;;;;;;;;;; 64-bit __emutls_v. and __emutls_t.
58
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
65
66 ; ARM64       .section .rodata,
67 ; ARM64-LABEL: __emutls_t.i1:
68 ; ARM64-NEXT: .word 15
69
70 ; ARM64-NOT:   __emutls_v.i2
71
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
78
79 ; ARM64       .section .rodata,
80 ; ARM64-LABEL: __emutls_t.i3:
81 ; ARM64-NEXT: .word 15
82
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
89
90 ; ARM64       .section .rodata,
91 ; ARM64-LABEL: __emutls_t.i4:
92 ; ARM64-NEXT: .word 15
93
94 ; ARM64-NOT:   __emutls_v.i5:
95 ; ARM64       .hidden __emutls_v.i5
96 ; ARM64-NOT:   __emutls_v.i5:
97
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
104
105 ; ARM64       .section .rodata,
106 ; ARM64-LABEL: __emutls_t.s1:
107 ; ARM64-NEXT: .hword 15
108
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
115
116 ; ARM64-NOT:  __emutls_t.b1