X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FX86%2Ftls-pic.ll;h=805bc25c17b626be3743963f742026284f74f788;hb=17e24879cb51d1137f2269258c8c0f41218bbe0c;hp=aa3d808a80ec83e637da86f0f7d7eca1e90c0b83;hpb=ce0e9abef37bc8d4a2ed452bf495ebf7daf61332;p=oota-llvm.git diff --git a/test/CodeGen/X86/tls-pic.ll b/test/CodeGen/X86/tls-pic.ll index aa3d808a80e..805bc25c17b 100644 --- a/test/CodeGen/X86/tls-pic.ll +++ b/test/CodeGen/X86/tls-pic.ll @@ -1,21 +1,23 @@ -; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32 %s -; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64 %s +; RUN: llc < %s -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X32 %s +; RUN: llc < %s -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=X64 %s @i = thread_local global i32 15 +@j = internal thread_local global i32 42 +@k = internal thread_local global i32 42 define i32 @f1() { entry: - %tmp1 = load i32* @i + %tmp1 = load i32, i32* @i ret i32 %tmp1 } -; X32: f1: +; X32-LABEL: f1: ; X32: leal i@TLSGD(,%ebx), %eax -; X32: call ___tls_get_addr@PLT +; X32: calll ___tls_get_addr@PLT -; X64: f1: +; X64-LABEL: f1: ; X64: leaq i@TLSGD(%rip), %rdi -; X64: call __tls_get_addr@PLT +; X64: callq __tls_get_addr@PLT @i2 = external thread_local global i32 @@ -25,29 +27,29 @@ entry: ret i32* @i } -; X32: f2: +; X32-LABEL: f2: ; X32: leal i@TLSGD(,%ebx), %eax -; X32: call ___tls_get_addr@PLT +; X32: calll ___tls_get_addr@PLT -; X64: f2: +; X64-LABEL: f2: ; X64: leaq i@TLSGD(%rip), %rdi -; X64: call __tls_get_addr@PLT +; X64: callq __tls_get_addr@PLT define i32 @f3() { entry: - %tmp1 = load i32* @i ; [#uses=1] + %tmp1 = load i32, i32* @i ; [#uses=1] ret i32 %tmp1 } -; X32: f3: +; X32-LABEL: f3: ; X32: leal i@TLSGD(,%ebx), %eax -; X32: call ___tls_get_addr@PLT +; X32: calll ___tls_get_addr@PLT -; X64: f3: +; X64-LABEL: f3: ; X64: leaq i@TLSGD(%rip), %rdi -; X64: call __tls_get_addr@PLT +; X64: callq __tls_get_addr@PLT define i32* @f4() nounwind { @@ -55,13 +57,31 @@ entry: ret i32* @i } -; X32: f4: +; X32-LABEL: f4: ; X32: leal i@TLSGD(,%ebx), %eax -; X32: call ___tls_get_addr@PLT +; X32: calll ___tls_get_addr@PLT -; X64: f4: +; X64-LABEL: f4: ; X64: leaq i@TLSGD(%rip), %rdi -; X64: call __tls_get_addr@PLT +; X64: callq __tls_get_addr@PLT +define i32 @f5() nounwind { +entry: + %0 = load i32, i32* @j, align 4 + %1 = load i32, i32* @k, align 4 + %add = add nsw i32 %0, %1 + ret i32 %add +} +; X32-LABEL: f5: +; X32: leal {{[jk]}}@TLSLDM(%ebx) +; X32: calll ___tls_get_addr@PLT +; X32: movl {{[jk]}}@DTPOFF(%e +; X32: addl {{[jk]}}@DTPOFF(%e + +; X64-LABEL: f5: +; X64: leaq {{[jk]}}@TLSLD(%rip), %rdi +; X64: callq __tls_get_addr@PLT +; X64: movl {{[jk]}}@DTPOFF(%r +; X64: addl {{[jk]}}@DTPOFF(%r