Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic | FileCheck  %s
      2 ; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
      3 
      4 ; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic | FileCheck  %s
      5 ; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
      6 
      7 ; Make sure that TLS symboles are emitted in expected order.
      8 
      9 @external_x = external thread_local global i32
     10 @external_y = thread_local global i32 7
     11 @internal_y = internal thread_local global i32 9
     12 
     13 define i32* @get_external_x() {
     14 entry:
     15   ret i32* @external_x
     16 }
     17 
     18 define i32* @get_external_y() {
     19 entry:
     20   ret i32* @external_y
     21 }
     22 
     23 define i32* @get_internal_y() {
     24 entry:
     25   ret i32* @internal_y
     26 }
     27 
     28 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 32-bit mode
     29 ; CHECK-LABEL: get_external_x:
     30 ; CHECK:  __emutls_v.external_x
     31 ; CHECK:  __emutls_get_address
     32 
     33 ; CHECK-LABEL: get_external_y:
     34 ; CHECK:  __emutls_v.external_y
     35 ; CHECK:  __emutls_get_address
     36 
     37 ; CHECK-LABEL: get_internal_y:
     38 ; CHECK:  __emutls_v.internal_y
     39 ; CHECK:  __emutls_get_address
     40 
     41 ; CHECK-NOT: __emutls_v.external_x:
     42 
     43 ; CHECK:       .p2align 2
     44 ; CHECK-LABEL: __emutls_v.external_y:
     45 ; CHECK-NEXT:  .long 4
     46 ; CHECK-NEXT:  .long 4
     47 ; CHECK-NEXT:  .long 0
     48 ; CHECK-NEXT:  .long __emutls_t.external_y
     49 ; CHECK-LABEL: __emutls_t.external_y:
     50 ; CHECK-NEXT:  .long 7
     51 
     52 ; CHECK:       .p2align 2
     53 ; CHECK-LABEL: __emutls_v.internal_y:
     54 ; CHECK-NEXT:  .long 4
     55 ; CHECK-NEXT:  .long 4
     56 ; CHECK-NEXT:  .long 0
     57 ; CHECK-NEXT:  .long __emutls_t.internal_y
     58 ; CHECK-LABEL: __emutls_t.internal_y:
     59 ; CHECK-NEXT:  .long 9
     60 
     61 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 64-bit mode
     62 ; X64-LABEL: get_external_x:
     63 ; X64:  __emutls_v.external_x
     64 ; X64:  __emutls_get_address
     65 
     66 ; X64-LABEL: get_external_y:
     67 ; X64:  __emutls_v.external_y
     68 ; X64:  __emutls_get_address
     69 
     70 ; X64-LABEL: get_internal_y:
     71 ; X64:  __emutls_v.internal_y
     72 ; X64:  __emutls_get_address
     73 
     74 ; X64-NOT: __emutls_v.external_x:
     75 
     76 ; X64:       .p2align 3
     77 ; X64-LABEL: __emutls_v.external_y:
     78 ; X64-NEXT:  .quad 4
     79 ; X64-NEXT:  .quad 4
     80 ; X64-NEXT:  .quad 0
     81 ; X64-NEXT:  .quad __emutls_t.external_y
     82 ; X64-LABEL: __emutls_t.external_y:
     83 ; X64-NEXT:  .long 7
     84 
     85 ; X64:       .p2align 3
     86 ; X64-LABEL: __emutls_v.internal_y:
     87 ; X64-NEXT:  .quad 4
     88 ; X64-NEXT:  .quad 4
     89 ; X64-NEXT:  .quad 0
     90 ; X64-NEXT:  .quad __emutls_t.internal_y
     91 ; X64-LABEL: __emutls_t.internal_y:
     92 ; X64-NEXT:  .long 9
     93