[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / tls-pic.ll
blob05846e8803765a37ba226a19ab907aaa3ad653c0
1 ; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck %s --check-prefix=X86
2 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck %s --check-prefix=X64
4 @i = thread_local global i32 15
5 @j = internal thread_local global i32 42
6 @k = internal thread_local global i32 42
8 define i32 @f1() {
9 entry:
10         %tmp1 = load i32, ptr @i
11         ret i32 %tmp1
14 ; X86-LABEL: f1:
15 ; X86:   leal i@TLSGD(,%ebx), %eax
16 ; X86:   calll ___tls_get_addr@PLT
18 ; X64-LABEL: f1:
19 ; X64:   leaq i@TLSGD(%rip), %rdi
20 ; X64:   callq __tls_get_addr@PLT
23 @i2 = external thread_local global i32
25 define ptr @f2() {
26 entry:
27         ret ptr @i
30 ; X86-LABEL: f2:
31 ; X86:   leal i@TLSGD(,%ebx), %eax
32 ; X86:   calll ___tls_get_addr@PLT
34 ; X64-LABEL: f2:
35 ; X64:   leaq i@TLSGD(%rip), %rdi
36 ; X64:   callq __tls_get_addr@PLT
40 define i32 @f3() {
41 entry:
42         %tmp1 = load i32, ptr @i                ; <i32> [#uses=1]
43         ret i32 %tmp1
46 ; X86-LABEL: f3:
47 ; X86:   leal   i@TLSGD(,%ebx), %eax
48 ; X86:   calll ___tls_get_addr@PLT
50 ; X64-LABEL: f3:
51 ; X64:   leaq i@TLSGD(%rip), %rdi
52 ; X64:   callq __tls_get_addr@PLT
55 define ptr @f4() nounwind {
56 entry:
57         ret ptr @i
60 ; X86-LABEL: f4:
61 ; X86:   leal   i@TLSGD(,%ebx), %eax
62 ; X86:   calll ___tls_get_addr@PLT
64 ; X64-LABEL: f4:
65 ; X64:   leaq i@TLSGD(%rip), %rdi
66 ; X64:   callq __tls_get_addr@PLT
69 define i32 @f5() nounwind {
70 entry:
71         %0 = load i32, ptr @j, align 4
72         %1 = load i32, ptr @k, align 4
73         %add = add nsw i32 %0, %1
74         ret i32 %add
77 ; X86-LABEL:    f5:
78 ; X86:      leal {{[jk]}}@TLSLDM(%ebx)
79 ; X86: calll ___tls_get_addr@PLT
80 ; X86: movl {{[jk]}}@DTPOFF(%e
81 ; X86: addl {{[jk]}}@DTPOFF(%e
83 ; X64-LABEL:    f5:
84 ; X64:      leaq {{[jk]}}@TLSLD(%rip), %rdi
85 ; X64: callq    __tls_get_addr@PLT
86 ; X64: movl {{[jk]}}@DTPOFF(%r
87 ; X64: addl {{[jk]}}@DTPOFF(%r