Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -relocation-model=pic \
      2 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
      3 ; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -relocation-model=pic -O3 \
      4 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
      5 ; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -O3 \
      6 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
      7 ; RUN: llc < %s -emulated-tls -mtriple=aarch64-windows-gnu -O3 \
      8 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
      9 ; RUN: llc < %s -emulated-tls -mtriple=aarch64-apple-darwin -O3 \
     10 ; RUN:     | FileCheck -check-prefix=DARWIN %s
     11 
     12 ; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic \
     13 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
     14 ; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic -O3 \
     15 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
     16 ; RUN: llc < %s -mtriple=aarch64-linux-android -O3 \
     17 ; RUN:     | FileCheck -check-prefix=ARM_64 %s
     18 ; aarch64-windows-gnu needs explicit -emulated-tls
     19 ; RUN: llc < %s -mtriple=aarch64-apple-darwin -O3 \
     20 ; RUN:     | FileCheck -check-prefix=NoEMU %s
     21 
     22 ; NoEMU-NOT: __emutls
     23 
     24 ; Make sure that TLS symbols are emitted in expected order.
     25 
     26 @external_x = external thread_local global i32, align 8
     27 @external_y = thread_local global i8 7, align 2
     28 @internal_y = internal thread_local global i64 9, align 16
     29 
     30 define i32* @get_external_x() {
     31 entry:
     32   ret i32* @external_x
     33 }
     34 
     35 define i8* @get_external_y() {
     36 entry:
     37   ret i8* @external_y
     38 }
     39 
     40 define i64* @get_internal_y() {
     41 entry:
     42   ret i64* @internal_y
     43 }
     44 
     45 ; ARM_64-LABEL:  get_external_x:
     46 ; ARM_64:      __emutls_v.external_x
     47 ; ARM_64:      __emutls_get_address
     48 ; ARM_64-LABEL:  get_external_y:
     49 ; ARM_64:      __emutls_v.external_y
     50 ; ARM_64:      __emutls_get_address
     51 ; ARM_64-LABEL:  get_internal_y:
     52 ; ARM_64:      __emutls_v.internal_y
     53 ; ARM_64:      __emutls_get_address
     54 ; ARM_64-NOT:   __emutls_t.external_x
     55 ; ARM_64-NOT:   __emutls_v.external_x:
     56 ; ARM_64:        .data{{$}}
     57 ; ARM_64:        .globl __emutls_v.external_y
     58 ; ARM_64:        .p2align 3
     59 ; ARM_64-LABEL:  __emutls_v.external_y:
     60 ; ARM_64-NEXT:   .xword 1
     61 ; ARM_64-NEXT:   .xword 2
     62 ; ARM_64-NEXT:   .xword 0
     63 ; ARM_64-NEXT:   .xword __emutls_t.external_y
     64 ; ARM_64-NOT:    __emutls_v.external_x:
     65 ; ARM_64:        .section .r{{o?}}data,
     66 ; ARM_64-LABEL:  __emutls_t.external_y:
     67 ; ARM_64-NEXT:   .byte 7
     68 ; ARM_64:        .data{{$}}
     69 ; ARM_64-NOT:    .globl __emutls_v
     70 ; ARM_64:        .p2align 3
     71 ; ARM_64-LABEL:  __emutls_v.internal_y:
     72 ; ARM_64-NEXT:   .xword 8
     73 ; ARM_64-NEXT:   .xword 16
     74 ; ARM_64-NEXT:   .xword 0
     75 ; ARM_64-NEXT:   .xword __emutls_t.internal_y
     76 ; ARM_64:        .section .r{{o?}}data,
     77 ; ARM_64-LABEL:  __emutls_t.internal_y:
     78 ; ARM_64-NEXT:   .xword 9
     79 
     80 ; DARWIN-LABEL:  _get_external_x:
     81 ; DARWIN:        ___emutls_v.external_x
     82 ; DARWIN:        ___emutls_get_address
     83 ; DARWIN-LABEL:  _get_external_y:
     84 ; DARWIN:        ___emutls_v.external_y
     85 ; DARWIN:        ___emutls_get_address
     86 ; DARWIN-LABEL:  _get_internal_y:
     87 ; DARWIN:        ___emutls_v.internal_y
     88 ; DARWIN:        ___emutls_get_address
     89 ; DARWIN-NOT:    ___emutls_t.external_x
     90 ; DARWIN-NOT:    ___emutls_v.external_x:
     91 ; DARWIN:        .section __DATA,__data
     92 ; DARWIN:        .globl ___emutls_v.external_y
     93 ; DARWIN:        .p2align 3
     94 ; DARWIN-LABEL:  ___emutls_v.external_y:
     95 ; DARWIN-NEXT:   .quad 1
     96 ; DARWIN-NEXT:   .quad 2
     97 ; DARWIN-NEXT:   .quad 0
     98 ; DARWIN-NEXT:   .quad ___emutls_t.external_y
     99 ; DARWIN-NOT:    ___emutls_v.external_x:
    100 ; DARWIN:        .section __TEXT,__const
    101 ; DARWIN-LABEL:  ___emutls_t.external_y:
    102 ; DARWIN-NEXT:   .byte 7
    103 ; DARWIN:        .section __DATA,__data
    104 ; DARWIN-NOT:    .globl ___emutls_v
    105 ; DARWIN:        .p2align 3
    106 ; DARWIN-LABEL:  ___emutls_v.internal_y:
    107 ; DARWIN-NEXT:   .quad 8
    108 ; DARWIN-NEXT:   .quad 16
    109 ; DARWIN-NEXT:   .quad 0
    110 ; DARWIN-NEXT:   .quad ___emutls_t.internal_y
    111 ; DARWIN:        .section __TEXT,__const
    112 ; DARWIN-LABEL:  ___emutls_t.internal_y:
    113 ; DARWIN-NEXT:   .quad 9
    114