For general dynamic TLS access we must use

leaq	foo@TLSGD(%rip), %rdi

as part of the instruction sequence. Using a register other than %rdi and then
copying it to %rdi is not valid.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69350 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2009-04-17 14:35:58 +00:00
parent c3a76ef955
commit 2ee3db3003
4 changed files with 49 additions and 36 deletions
+17
View File
@@ -0,0 +1,17 @@
; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic -regalloc=local > %t
; RUN: grep {leaq foo@TLSGD(%rip), %rdi} %t
@foo = internal thread_local global i32 100
define void @f(i32 %n) nounwind {
entry:
%n_addr = alloca i32
%p = alloca i32*
%"alloca point" = bitcast i32 0 to i32
store i32 %n, i32* %n_addr
store i32* @foo, i32** %p, align 8
br label %return
return:
ret void
}