864daae568ff755e66e7bdc5e0b325d4407ccd6b
[oota-llvm.git] / test / CodeGen / ARM / emutls_generic.ll
1 ; RUN: llc < %s -emulated-tls -mtriple=arm-linux-android -relocation-model=pic \
2 ; RUN:     | FileCheck -check-prefix=ARM_32 %s
3 ; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -relocation-model=pic \
4 ; RUN:     | FileCheck -check-prefix=ARM_32 %s
5 ; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -relocation-model=pic -O3 \
6 ; RUN:     | FileCheck -check-prefix=ARM_32 %s
7 ; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -O3 \
8 ; RUN:     | FileCheck -check-prefix=ARM_32 %s
9
10 ; Make sure that TLS symbols are emitted in expected order.
11
12 @external_x = external thread_local global i32, align 8
13 @external_y = thread_local global i8 7, align 2
14 @internal_y = internal thread_local global i64 9, align 16
15
16 define i32* @get_external_x() {
17 entry:
18   ret i32* @external_x
19 }
20
21 define i8* @get_external_y() {
22 entry:
23   ret i8* @external_y
24 }
25
26 define i64* @get_internal_y() {
27 entry:
28   ret i64* @internal_y
29 }
30
31 ; ARM_32-LABEL:  get_external_x:
32 ; ARM_32:        bl __emutls_get_address
33 ; ARM_32:        .long __emutls_v.external_x
34 ; ARM_32-LABEL:  get_external_y:
35 ; ARM_32:        bl __emutls_get_address
36 ; ARM_32:        .long __emutls_v.external_y
37 ; ARM_32-LABEL:  get_internal_y:
38 ; ARM_32:      bl __emutls_get_address
39 ; ARM_32:      .long __emutls_v.internal_y
40 ; ARM_32-NOT:   __emutls_t.external_x
41 ; ARM_32-NOT:   __emutls_v.external_x:
42 ; ARM_32:        .section .data.rel.local
43 ; ARM_32:        .align 2
44 ; ARM_32-LABEL:  __emutls_v.external_y:
45 ; ARM_32-NEXT:   .long 1
46 ; ARM_32-NEXT:   .long 2
47 ; ARM_32-NEXT:   .long 0
48 ; ARM_32-NEXT:   .long __emutls_t.external_y
49 ; ARM_32:        .section .rodata,
50 ; ARM_32-LABEL:  __emutls_t.external_y:
51 ; ARM_32-NEXT:   .byte 7
52 ; ARM_32:        .section .data.rel.local
53 ; ARM_32:        .align 2
54 ; ARM_32-LABEL:  __emutls_v.internal_y:
55 ; ARM_32-NEXT:   .long 8
56 ; ARM_32-NEXT:   .long 16
57 ; ARM_32-NEXT:   .long 0
58 ; ARM_32-NEXT:   .long __emutls_t.internal_y
59 ; ARM_32-LABEL:  __emutls_t.internal_y:
60 ; ARM_32-NEXT:   .long 9
61 ; ARM_32-NEXT:   .long 0