88 lines · plain
1; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck %s --check-prefix=X862; RUN: llc < %s -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck %s --check-prefix=X643 4@i = thread_local global i32 155@j = internal thread_local global i32 426@k = internal thread_local global i32 427 8define i32 @f1() {9entry:10 %tmp1 = load i32, ptr @i11 ret i32 %tmp112}13 14; X86-LABEL: f1:15; X86: leal i@TLSGD(,%ebx), %eax16; X86: calll ___tls_get_addr@PLT17 18; X64-LABEL: f1:19; X64: leaq i@TLSGD(%rip), %rdi20; X64: callq __tls_get_addr@PLT21 22 23@i2 = external thread_local global i3224 25define ptr @f2() {26entry:27 ret ptr @i28}29 30; X86-LABEL: f2:31; X86: leal i@TLSGD(,%ebx), %eax32; X86: calll ___tls_get_addr@PLT33 34; X64-LABEL: f2:35; X64: leaq i@TLSGD(%rip), %rdi36; X64: callq __tls_get_addr@PLT37 38 39 40define i32 @f3() {41entry:42 %tmp1 = load i32, ptr @i ; <i32> [#uses=1]43 ret i32 %tmp144}45 46; X86-LABEL: f3:47; X86: leal i@TLSGD(,%ebx), %eax48; X86: calll ___tls_get_addr@PLT49 50; X64-LABEL: f3:51; X64: leaq i@TLSGD(%rip), %rdi52; X64: callq __tls_get_addr@PLT53 54 55define ptr @f4() nounwind {56entry:57 ret ptr @i58}59 60; X86-LABEL: f4:61; X86: leal i@TLSGD(,%ebx), %eax62; X86: calll ___tls_get_addr@PLT63 64; X64-LABEL: f4:65; X64: leaq i@TLSGD(%rip), %rdi66; X64: callq __tls_get_addr@PLT67 68 69define i32 @f5() nounwind {70entry:71 %0 = load i32, ptr @j, align 472 %1 = load i32, ptr @k, align 473 %add = add nsw i32 %0, %174 ret i32 %add75}76 77; X86-LABEL: f5:78; X86: leal {{[jk]}}@TLSLDM(%ebx)79; X86: calll ___tls_get_addr@PLT80; X86: movl {{[jk]}}@DTPOFF(%e81; X86: addl {{[jk]}}@DTPOFF(%e82 83; X64-LABEL: f5:84; X64: leaq {{[jk]}}@TLSLD(%rip), %rdi85; X64: callq __tls_get_addr@PLT86; X64: movl {{[jk]}}@DTPOFF(%r87; X64: addl {{[jk]}}@DTPOFF(%r88