1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \ 2*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck -check-prefix=X32 %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \ 4*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck -check-prefix=X64 %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@i = thread_local global i32 15 7*9880d681SAndroid Build Coastguard Worker@i2 = external thread_local global i32 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine i32 @f1() { 10*9880d681SAndroid Build Coastguard Worker; X32-LABEL: f1: 11*9880d681SAndroid Build Coastguard Worker; X32: movl %gs:i@NTPOFF, %eax 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: ret 13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: f1: 14*9880d681SAndroid Build Coastguard Worker; X64: movl %fs:i@TPOFF, %eax 15*9880d681SAndroid Build Coastguard Worker; X64-NEXT: ret 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* @i 19*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine i32* @f2() { 23*9880d681SAndroid Build Coastguard Worker; X32-LABEL: f2: 24*9880d681SAndroid Build Coastguard Worker; X32: movl %gs:0, %eax 25*9880d681SAndroid Build Coastguard Worker; X32-NEXT: leal i@NTPOFF(%eax), %eax 26*9880d681SAndroid Build Coastguard Worker; X32-NEXT: ret 27*9880d681SAndroid Build Coastguard Worker; X64-LABEL: f2: 28*9880d681SAndroid Build Coastguard Worker; X64: movq %fs:0, %rax 29*9880d681SAndroid Build Coastguard Worker; X64-NEXT: leaq i@TPOFF(%rax), %rax 30*9880d681SAndroid Build Coastguard Worker; X64-NEXT: ret 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker ret i32* @i 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine i32 @f3() { 37*9880d681SAndroid Build Coastguard Worker; X32-LABEL: f3: 38*9880d681SAndroid Build Coastguard Worker; X32: calll .L{{[0-9]+}}$pb 39*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 40*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .cfi_adjust_cfa_offset 4 41*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .L{{[0-9]+}}$pb: 42*9880d681SAndroid Build Coastguard Worker; X32-NEXT: popl %eax 43*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 44*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .cfi_adjust_cfa_offset -4 45*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 46*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp{{[0-9]+}}-.L{{[0-9]+}}$pb), %eax 47*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl i2@GOTNTPOFF(%eax), %eax 48*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl %gs:(%eax), %eax 49*9880d681SAndroid Build Coastguard Worker; X32-NEXT: ret 50*9880d681SAndroid Build Coastguard Worker; X64-LABEL: f3: 51*9880d681SAndroid Build Coastguard Worker; X64: movq i2@GOTTPOFF(%rip), %rax 52*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movl %fs:(%rax), %eax 53*9880d681SAndroid Build Coastguard Worker; X64-NEXT: ret 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32, i32* @i2 57*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i32* @f4() { 61*9880d681SAndroid Build Coastguard Worker; X32-LABEL: f4: 62*9880d681SAndroid Build Coastguard Worker; X32: calll .L{{[0-9]+}}$pb 63*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 64*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .cfi_adjust_cfa_offset 4 65*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .L{{[0-9]+}}$pb: 66*9880d681SAndroid Build Coastguard Worker; X32-NEXT: popl %ecx 67*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 68*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .cfi_adjust_cfa_offset -4 69*9880d681SAndroid Build Coastguard Worker; X32-NEXT: .Ltmp{{[0-9]+}}: 70*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp{{[0-9]+}}-.L{{[0-9]+}}$pb), %ecx 71*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl %gs:0, %eax 72*9880d681SAndroid Build Coastguard Worker; X32-NEXT: addl i2@GOTNTPOFF(%ecx), %eax 73*9880d681SAndroid Build Coastguard Worker; X32-NEXT: ret 74*9880d681SAndroid Build Coastguard Worker; X64-LABEL: f4: 75*9880d681SAndroid Build Coastguard Worker; X64: movq %fs:0, %rax 76*9880d681SAndroid Build Coastguard Worker; X64-NEXT: addq i2@GOTTPOFF(%rip), %rax 77*9880d681SAndroid Build Coastguard Worker; X64-NEXT: ret 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerentry: 80*9880d681SAndroid Build Coastguard Worker ret i32* @i2 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{!0, !1} 84*9880d681SAndroid Build Coastguard Worker!0 = !{i32 1, !"PIC Level", i32 1} 85*9880d681SAndroid Build Coastguard Worker!1 = !{i32 1, !"PIE Level", i32 1} 86