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