1*f4a2713aSLionel Sambuc; RUN: llc < %s -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32 %s 2*f4a2713aSLionel Sambuc; RUN: llc < %s -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64 %s 3*f4a2713aSLionel Sambuc 4*f4a2713aSLionel Sambuc@i = thread_local global i32 15 5*f4a2713aSLionel Sambuc@j = internal thread_local global i32 42 6*f4a2713aSLionel Sambuc@k = internal thread_local global i32 42 7*f4a2713aSLionel Sambuc 8*f4a2713aSLionel Sambucdefine i32 @f1() { 9*f4a2713aSLionel Sambucentry: 10*f4a2713aSLionel Sambuc %tmp1 = load i32* @i 11*f4a2713aSLionel Sambuc ret i32 %tmp1 12*f4a2713aSLionel Sambuc} 13*f4a2713aSLionel Sambuc 14*f4a2713aSLionel Sambuc; X32-LABEL: f1: 15*f4a2713aSLionel Sambuc; X32: leal i@TLSGD(,%ebx), %eax 16*f4a2713aSLionel Sambuc; X32: calll ___tls_get_addr@PLT 17*f4a2713aSLionel Sambuc 18*f4a2713aSLionel Sambuc; X64-LABEL: f1: 19*f4a2713aSLionel Sambuc; X64: leaq i@TLSGD(%rip), %rdi 20*f4a2713aSLionel Sambuc; X64: callq __tls_get_addr@PLT 21*f4a2713aSLionel Sambuc 22*f4a2713aSLionel Sambuc 23*f4a2713aSLionel Sambuc@i2 = external thread_local global i32 24*f4a2713aSLionel Sambuc 25*f4a2713aSLionel Sambucdefine i32* @f2() { 26*f4a2713aSLionel Sambucentry: 27*f4a2713aSLionel Sambuc ret i32* @i 28*f4a2713aSLionel Sambuc} 29*f4a2713aSLionel Sambuc 30*f4a2713aSLionel Sambuc; X32-LABEL: f2: 31*f4a2713aSLionel Sambuc; X32: leal i@TLSGD(,%ebx), %eax 32*f4a2713aSLionel Sambuc; X32: calll ___tls_get_addr@PLT 33*f4a2713aSLionel Sambuc 34*f4a2713aSLionel Sambuc; X64-LABEL: f2: 35*f4a2713aSLionel Sambuc; X64: leaq i@TLSGD(%rip), %rdi 36*f4a2713aSLionel Sambuc; X64: callq __tls_get_addr@PLT 37*f4a2713aSLionel Sambuc 38*f4a2713aSLionel Sambuc 39*f4a2713aSLionel Sambuc 40*f4a2713aSLionel Sambucdefine i32 @f3() { 41*f4a2713aSLionel Sambucentry: 42*f4a2713aSLionel Sambuc %tmp1 = load i32* @i ; <i32> [#uses=1] 43*f4a2713aSLionel Sambuc ret i32 %tmp1 44*f4a2713aSLionel Sambuc} 45*f4a2713aSLionel Sambuc 46*f4a2713aSLionel Sambuc; X32-LABEL: f3: 47*f4a2713aSLionel Sambuc; X32: leal i@TLSGD(,%ebx), %eax 48*f4a2713aSLionel Sambuc; X32: calll ___tls_get_addr@PLT 49*f4a2713aSLionel Sambuc 50*f4a2713aSLionel Sambuc; X64-LABEL: f3: 51*f4a2713aSLionel Sambuc; X64: leaq i@TLSGD(%rip), %rdi 52*f4a2713aSLionel Sambuc; X64: callq __tls_get_addr@PLT 53*f4a2713aSLionel Sambuc 54*f4a2713aSLionel Sambuc 55*f4a2713aSLionel Sambucdefine i32* @f4() nounwind { 56*f4a2713aSLionel Sambucentry: 57*f4a2713aSLionel Sambuc ret i32* @i 58*f4a2713aSLionel Sambuc} 59*f4a2713aSLionel Sambuc 60*f4a2713aSLionel Sambuc; X32-LABEL: f4: 61*f4a2713aSLionel Sambuc; X32: leal i@TLSGD(,%ebx), %eax 62*f4a2713aSLionel Sambuc; X32: calll ___tls_get_addr@PLT 63*f4a2713aSLionel Sambuc 64*f4a2713aSLionel Sambuc; X64-LABEL: f4: 65*f4a2713aSLionel Sambuc; X64: leaq i@TLSGD(%rip), %rdi 66*f4a2713aSLionel Sambuc; X64: callq __tls_get_addr@PLT 67*f4a2713aSLionel Sambuc 68*f4a2713aSLionel Sambuc 69*f4a2713aSLionel Sambucdefine i32 @f5() nounwind { 70*f4a2713aSLionel Sambucentry: 71*f4a2713aSLionel Sambuc %0 = load i32* @j, align 4 72*f4a2713aSLionel Sambuc %1 = load i32* @k, align 4 73*f4a2713aSLionel Sambuc %add = add nsw i32 %0, %1 74*f4a2713aSLionel Sambuc ret i32 %add 75*f4a2713aSLionel Sambuc} 76*f4a2713aSLionel Sambuc 77*f4a2713aSLionel Sambuc; X32-LABEL: f5: 78*f4a2713aSLionel Sambuc; X32: leal {{[jk]}}@TLSLDM(%ebx) 79*f4a2713aSLionel Sambuc; X32: calll ___tls_get_addr@PLT 80*f4a2713aSLionel Sambuc; X32: movl {{[jk]}}@DTPOFF(%e 81*f4a2713aSLionel Sambuc; X32: addl {{[jk]}}@DTPOFF(%e 82*f4a2713aSLionel Sambuc 83*f4a2713aSLionel Sambuc; X64-LABEL: f5: 84*f4a2713aSLionel Sambuc; X64: leaq {{[jk]}}@TLSLD(%rip), %rdi 85*f4a2713aSLionel Sambuc; X64: callq __tls_get_addr@PLT 86*f4a2713aSLionel Sambuc; X64: movl {{[jk]}}@DTPOFF(%r 87*f4a2713aSLionel Sambuc; X64: addl {{[jk]}}@DTPOFF(%r 88