178 lines · plain
1; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=X64 %s2; RUN: llc < %s -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64_PIC %s3; RUN: llc < %s -mtriple=i386-linux-gnu | FileCheck -check-prefix=X32 %s4; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32_PIC %s5 6; Darwin always uses the same model.7; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck -check-prefix=DARWIN %s8; RUN: llc < %s -mtriple=x86_64-apple-darwin -code-model=large | FileCheck -check-prefix=DARWIN %s9 10@external_gd = external thread_local global i3211@internal_gd = internal thread_local global i32 4212 13@external_ld = external thread_local(localdynamic) global i3214@internal_ld = internal thread_local(localdynamic) global i32 4215 16@external_ie = external thread_local(initialexec) global i3217@internal_ie = internal thread_local(initialexec) global i32 4218 19@external_le = external thread_local(localexec) global i3220@internal_le = internal thread_local(localexec) global i32 4221 22; See test cases for emulated model in emutls.ll, emutls-pic.ll and emutls-pie.ll.23 24; ----- no model specified -----25 26define ptr @f1() {27entry:28 ret ptr @external_gd29 30 ; Non-PIC code can use initial-exec, PIC code has to use general dynamic.31 ; X64-LABEL: f1:32 ; X64: external_gd@GOTTPOFF33 ; X32-LABEL: f1:34 ; X32: external_gd@INDNTPOFF35 ; X64_PIC-LABEL: f1:36 ; X64_PIC: external_gd@TLSGD37 ; X32_PIC-LABEL: f1:38 ; X32_PIC: external_gd@TLSGD39 ; DARWIN-LABEL: f1:40 ; DARWIN: _external_gd@TLVP41}42 43define ptr @f2() {44entry:45 ret ptr @internal_gd46 47 ; Non-PIC code can use local exec, PIC code can use local dynamic.48 ; X64-LABEL: f2:49 ; X64: internal_gd@TPOFF50 ; X32-LABEL: f2:51 ; X32: internal_gd@NTPOFF52 ; X64_PIC-LABEL: f2:53 ; X64_PIC: internal_gd@TLSLD54 ; X32_PIC-LABEL: f2:55 ; X32_PIC: internal_gd@TLSLDM56 ; DARWIN-LABEL: f2:57 ; DARWIN: _internal_gd@TLVP58}59 60 61; ----- localdynamic specified -----62 63define ptr @f3() {64entry:65 ret ptr @external_ld66 67 ; Non-PIC code can use initial exec, PIC code use local dynamic as specified.68 ; X64-LABEL: f3:69 ; X64: external_ld@GOTTPOFF70 ; X32-LABEL: f3:71 ; X32: external_ld@INDNTPOFF72 ; X64_PIC-LABEL: f3:73 ; X64_PIC: external_ld@TLSLD74 ; X32_PIC-LABEL: f3:75 ; X32_PIC: external_ld@TLSLDM76 ; DARWIN-LABEL: f3:77 ; DARWIN: _external_ld@TLVP78}79 80define ptr @f4() {81entry:82 ret ptr @internal_ld83 84 ; Non-PIC code can use local exec, PIC code can use local dynamic.85 ; X64-LABEL: f4:86 ; X64: internal_ld@TPOFF87 ; X32-LABEL: f4:88 ; X32: internal_ld@NTPOFF89 ; X64_PIC-LABEL: f4:90 ; X64_PIC: internal_ld@TLSLD91 ; X32_PIC-LABEL: f4:92 ; X32_PIC: internal_ld@TLSLDM93 ; DARWIN-LABEL: f4:94 ; DARWIN: _internal_ld@TLVP95}96 97 98; ----- initialexec specified -----99 100define ptr @f5() {101entry:102 ret ptr @external_ie103 104 ; Non-PIC and PIC code will use initial exec as specified.105 ; X64-LABEL: f5:106 ; X64: external_ie@GOTTPOFF107 ; X32-LABEL: f5:108 ; X32: external_ie@INDNTPOFF109 ; X64_PIC-LABEL: f5:110 ; X64_PIC: external_ie@GOTTPOFF111 ; X32_PIC-LABEL: f5:112 ; X32_PIC: external_ie@GOTNTPOFF113 ; DARWIN-LABEL: f5:114 ; DARWIN: _external_ie@TLVP115}116 117define ptr @f6() {118entry:119 ret ptr @internal_ie120 121 ; Non-PIC code can use local exec, PIC code use initial exec as specified.122 ; X64-LABEL: f6:123 ; X64: internal_ie@TPOFF124 ; X32-LABEL: f6:125 ; X32: internal_ie@NTPOFF126 ; X64_PIC-LABEL: f6:127 ; X64_PIC: internal_ie@GOTTPOFF128 ; X32_PIC-LABEL: f6:129 ; X32_PIC: internal_ie@GOTNTPOFF130 ; DARWIN-LABEL: f6:131 ; DARWIN: _internal_ie@TLVP132}133 134define i32 @PR22083() {135entry:136 ret i32 ptrtoint (ptr @external_ie to i32)137 ; X64-LABEL: PR22083:138 ; X64: movq external_ie@GOTTPOFF(%rip), %rax139 ; X64_PIC-LABEL: PR22083:140 ; X64_PIC: movq external_ie@GOTTPOFF(%rip), %rax141}142 143; ----- localexec specified -----144 145define ptr @f7() {146entry:147 ret ptr @external_le148 149 ; Non-PIC and PIC code will use local exec as specified.150 ; X64-LABEL: f7:151 ; X64: external_le@TPOFF152 ; X32-LABEL: f7:153 ; X32: external_le@NTPOFF154 ; X64_PIC-LABEL: f7:155 ; X64_PIC: external_le@TPOFF156 ; X32_PIC-LABEL: f7:157 ; X32_PIC: external_le@NTPOFF158 ; DARWIN-LABEL: f7:159 ; DARWIN: _external_le@TLVP160}161 162define ptr @f8() {163entry:164 ret ptr @internal_le165 166 ; Non-PIC and PIC code will use local exec as specified.167 ; X64-LABEL: f8:168 ; X64: internal_le@TPOFF169 ; X32-LABEL: f8:170 ; X32: internal_le@NTPOFF171 ; X64_PIC-LABEL: f8:172 ; X64_PIC: internal_le@TPOFF173 ; X32_PIC-LABEL: f8:174 ; X32_PIC: internal_le@NTPOFF175 ; DARWIN-LABEL: f8:176 ; DARWIN: _internal_le@TLVP177}178