Teach LLVM about a PIE option which, when enabled on top of PIC, makes
[oota-llvm.git] / test / CodeGen / X86 / tls-pie.ll
1 ; RUN: llc < %s -march=x86 -mtriple=i386-linux-gnu -relocation-model=pic -enable-pie \
2 ; RUN:   | FileCheck -check-prefix=X32 %s
3 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-linux-gnu -relocation-model=pic -enable-pie \
4 ; RUN:   | FileCheck -check-prefix=X64 %s
5
6 @i = thread_local global i32 15
7 @i2 = external thread_local global i32
8
9 define i32 @f1() {
10 ; X32: f1:
11 ; X32:      movl %gs:i@NTPOFF, %eax
12 ; X32-NEXT: ret
13 ; X64: f1:
14 ; X64:      movabsq $i@TPOFF, %rax
15 ; X64-NEXT: movl %fs:(%rax), %eax
16 ; X64-NEXT: ret
17
18 entry:
19         %tmp1 = load i32* @i
20         ret i32 %tmp1
21 }
22
23 define i32* @f2() {
24 ; X32: f2:
25 ; X32:      movl %gs:0, %eax
26 ; X32-NEXT: leal i@NTPOFF(%eax), %eax
27 ; X32-NEXT: ret
28 ; X64: f2:
29 ; X64:      movq %fs:0, %rax
30 ; X64-NEXT: addq $i@TPOFF, %rax
31 ; X64-NEXT: ret
32
33 entry:
34         ret i32* @i
35 }
36
37 define i32 @f3() {
38 ; X32: f3:
39 ; X32:      movl i2@INDNTPOFF, %eax
40 ; X32-NEXT: movl %gs:(%eax), %eax
41 ; X32-NEXT: ret
42 ; X64: f3:
43 ; X64:      movq i2@GOTTPOFF(%rip), %rax
44 ; X64-NEXT: movl %fs:(%rax), %eax
45 ; X64-NEXT: ret
46
47 entry:
48         %tmp1 = load i32* @i2
49         ret i32 %tmp1
50 }
51
52 define i32* @f4() {
53 ; X32: f4:
54 ; X32:      movl %gs:0, %eax
55 ; X32-NEXT: addl i2@INDNTPOFF, %eax
56 ; X32-NEXT: ret
57 ; X64: f4:
58 ; X64:      movq %fs:0, %rax
59 ; X64-NEXT: addq i2@GOTTPOFF(%rip), %rax
60 ; X64-NEXT: ret
61
62 entry:
63         ret i32* @i2
64 }