Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=X64 %s
      2 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64_PIC %s
      3 ; RUN: llc < %s -march=x86 -mtriple=i386-linux-gnu | FileCheck -check-prefix=X32 %s
      4 ; RUN: llc < %s -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32_PIC %s
      5 
      6 ; Darwin always uses the same model.
      7 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin | FileCheck -check-prefix=DARWIN %s
      8 
      9 @external_gd = external thread_local global i32
     10 @internal_gd = internal thread_local global i32 42
     11 
     12 @external_ld = external thread_local(localdynamic) global i32
     13 @internal_ld = internal thread_local(localdynamic) global i32 42
     14 
     15 @external_ie = external thread_local(initialexec) global i32
     16 @internal_ie = internal thread_local(initialexec) global i32 42
     17 
     18 @external_le = external thread_local(localexec) global i32
     19 @internal_le = internal thread_local(localexec) global i32 42
     20 
     21 ; ----- no model specified -----
     22 
     23 define i32* @f1() {
     24 entry:
     25   ret i32* @external_gd
     26 
     27   ; Non-PIC code can use initial-exec, PIC code has to use general dynamic.
     28   ; X64:     f1:
     29   ; X64:     external_gd@GOTTPOFF
     30   ; X32:     f1:
     31   ; X32:     external_gd@INDNTPOFF
     32   ; X64_PIC: f1:
     33   ; X64_PIC: external_gd@TLSGD
     34   ; X32_PIC: f1:
     35   ; X32_PIC: external_gd@TLSGD
     36   ; DARWIN:  f1:
     37   ; DARWIN:  _external_gd@TLVP
     38 }
     39 
     40 define i32* @f2() {
     41 entry:
     42   ret i32* @internal_gd
     43 
     44   ; Non-PIC code can use local exec, PIC code can use local dynamic.
     45   ; X64:     f2:
     46   ; X64:     internal_gd@TPOFF
     47   ; X32:     f2:
     48   ; X32:     internal_gd@NTPOFF
     49   ; X64_PIC: f2:
     50   ; X64_PIC: internal_gd@TLSLD
     51   ; X32_PIC: f2:
     52   ; X32_PIC: internal_gd@TLSLDM
     53   ; DARWIN:  f2:
     54   ; DARWIN:  _internal_gd@TLVP
     55 }
     56 
     57 
     58 ; ----- localdynamic specified -----
     59 
     60 define i32* @f3() {
     61 entry:
     62   ret i32* @external_ld
     63 
     64   ; Non-PIC code can use initial exec, PIC code use local dynamic as specified.
     65   ; X64:     f3:
     66   ; X64:     external_ld@GOTTPOFF
     67   ; X32:     f3:
     68   ; X32:     external_ld@INDNTPOFF
     69   ; X64_PIC: f3:
     70   ; X64_PIC: external_ld@TLSLD
     71   ; X32_PIC: f3:
     72   ; X32_PIC: external_ld@TLSLDM
     73   ; DARWIN:  f3:
     74   ; DARWIN:  _external_ld@TLVP
     75 }
     76 
     77 define i32* @f4() {
     78 entry:
     79   ret i32* @internal_ld
     80 
     81   ; Non-PIC code can use local exec, PIC code can use local dynamic.
     82   ; X64:     f4:
     83   ; X64:     internal_ld@TPOFF
     84   ; X32:     f4:
     85   ; X32:     internal_ld@NTPOFF
     86   ; X64_PIC: f4:
     87   ; X64_PIC: internal_ld@TLSLD
     88   ; X32_PIC: f4:
     89   ; X32_PIC: internal_ld@TLSLDM
     90   ; DARWIN:  f4:
     91   ; DARWIN:  _internal_ld@TLVP
     92 }
     93 
     94 
     95 ; ----- initialexec specified -----
     96 
     97 define i32* @f5() {
     98 entry:
     99   ret i32* @external_ie
    100 
    101   ; Non-PIC and PIC code will use initial exec as specified.
    102   ; X64:     f5:
    103   ; X64:     external_ie@GOTTPOFF
    104   ; X32:     f5:
    105   ; X32:     external_ie@INDNTPOFF
    106   ; X64_PIC: f5:
    107   ; X64_PIC: external_ie@GOTTPOFF
    108   ; X32_PIC: f5:
    109   ; X32_PIC: external_ie@GOTNTPOFF
    110   ; DARWIN:  f5:
    111   ; DARWIN:  _external_ie@TLVP
    112 }
    113 
    114 define i32* @f6() {
    115 entry:
    116   ret i32* @internal_ie
    117 
    118   ; Non-PIC code can use local exec, PIC code use initial exec as specified.
    119   ; X64:     f6:
    120   ; X64:     internal_ie@TPOFF
    121   ; X32:     f6:
    122   ; X32:     internal_ie@NTPOFF
    123   ; X64_PIC: f6:
    124   ; X64_PIC: internal_ie@GOTTPOFF
    125   ; X32_PIC: f6:
    126   ; X32_PIC: internal_ie@GOTNTPOFF
    127   ; DARWIN:  f6:
    128   ; DARWIN:  _internal_ie@TLVP
    129 }
    130 
    131 
    132 ; ----- localexec specified -----
    133 
    134 define i32* @f7() {
    135 entry:
    136   ret i32* @external_le
    137 
    138   ; Non-PIC and PIC code will use local exec as specified.
    139   ; X64:     f7:
    140   ; X64:     external_le@TPOFF
    141   ; X32:     f7:
    142   ; X32:     external_le@NTPOFF
    143   ; X64_PIC: f7:
    144   ; X64_PIC: external_le@TPOFF
    145   ; X32_PIC: f7:
    146   ; X32_PIC: external_le@NTPOFF
    147   ; DARWIN:  f7:
    148   ; DARWIN:  _external_le@TLVP
    149 }
    150 
    151 define i32* @f8() {
    152 entry:
    153   ret i32* @internal_le
    154 
    155   ; Non-PIC and PIC code will use local exec as specified.
    156   ; X64:     f8:
    157   ; X64:     internal_le@TPOFF
    158   ; X32:     f8:
    159   ; X32:     internal_le@NTPOFF
    160   ; X64_PIC: f8:
    161   ; X64_PIC: internal_le@TPOFF
    162   ; X32_PIC: f8:
    163   ; X32_PIC: internal_le@NTPOFF
    164   ; DARWIN:  f8:
    165   ; DARWIN:  _internal_le@TLVP
    166 }
    167