1; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic \ 2; RUN: | FileCheck -check-prefix=X86_32 %s 3; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic \ 4; RUN: | FileCheck -check-prefix=X86_32 %s 5; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic \ 6; RUN: | FileCheck -check-prefix=X86_64 %s 7; RUN: llc < %s -emulated-tls -mtriple=i386-linux-gnu -relocation-model=pic \ 8; RUN: | FileCheck %s 9 10; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic \ 11; RUN: | FileCheck -check-prefix=X86_32 %s 12; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic \ 13; RUN: | FileCheck -check-prefix=X86_32 %s 14; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic \ 15; RUN: | FileCheck -check-prefix=X86_64 %s 16; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic \ 17; RUN: | FileCheck -check-prefix=NoEMU %s 18 19; NoEMU-NOT: __emutls 20 21; Make sure that TLS symbols are emitted in expected order. 22 23@external_x = external thread_local global i32, align 8 24@external_y = thread_local global i8 7, align 2 25@internal_y = internal thread_local global i64 9, align 16 26 27define i32* @get_external_x() { 28entry: 29 ret i32* @external_x 30} 31 32define i8* @get_external_y() { 33entry: 34 ret i8* @external_y 35} 36 37define i64* @get_internal_y() { 38entry: 39 ret i64* @internal_y 40} 41 42; CHECK-LABEL: get_external_x: 43; CHECK-NOT: _tls_get_address 44; CHECK: __emutls_get_address 45; CHECK-LABEL: get_external_y: 46; CHECK: __emutls_get_address 47; CHECK-NOT: _tls_get_address 48; CHECK-LABEL: get_internal_y: 49; CHECK-NOT: __emutls_t.external_x: 50; CHECK-NOT: __emutls_v.external_x: 51; CHECK-LABEL: __emutls_v.external_y: 52; CHECK-LABEL: __emutls_t.external_y: 53; CHECK: __emutls_t.external_y 54; CHECK-LABEL: __emutls_v.internal_y: 55; CHECK-LABEL: __emutls_t.internal_y: 56; CHECK: __emutls_t.internal_y 57 58; X86_32-LABEL: get_external_x: 59; X86_32: movl __emutls_v.external_x@GOT(%ebx) 60; X86_32: calll __emutls_get_address 61; X86_32-LABEL: get_external_y: 62; X86_32: movl __emutls_v.external_y@GOT(%ebx) 63; X86_32: calll __emutls_get_address 64; X86_32-LABEL: get_internal_y: 65; X86_32: leal __emutls_v.internal_y@GOTOFF(%ebx) 66; X86_32: calll __emutls_get_address 67; X86_32-NOT: __emutls_t.external_x 68; X86_32-NOT: __emutls_v.external_x: 69; X86_32: .data{{$}} 70; X86_32: .globl __emutls_v.external_y 71; X86_32: .p2align 2 72; X86_32-LABEL: __emutls_v.external_y: 73; X86_32-NEXT: .long 1 74; X86_32-NEXT: .long 2 75; X86_32-NEXT: .long 0 76; X86_32-NEXT: .long __emutls_t.external_y 77; X86_32: .section .rodata, 78; X86_32-LABEL: __emutls_t.external_y: 79; X86_32-NEXT: .byte 7 80; X86_32: .data{{$}} 81; X86_32-NOT: .globl 82; X86_32: .p2align 2 83; X86_32-LABEL: __emutls_v.internal_y: 84; X86_32-NEXT: .long 8 85; X86_32-NEXT: .long 16 86; X86_32-NEXT: .long 0 87; X86_32-NEXT: .long __emutls_t.internal_y 88; X86_32-LABEL: __emutls_t.internal_y: 89; X86_32-NEXT: .quad 9 90; X86_64-LABEL: get_external_x: 91; X86_64: __emutls_v.external_x@GOTPCREL(%rip) 92; X86_64: __emutls_get_address 93; X86_64-LABEL: get_external_y: 94; X86_64: __emutls_v.external_y@GOTPCREL(%rip) 95; X86_64: __emutls_get_address 96; X86_64-LABEL: get_internal_y: 97; X86_64: __emutls_v.internal_y(%rip) 98; X86_64: __emutls_get_address 99; X86_64-NOT: __emutls_t.external_x 100; X86_64-NOT: __emutls_v.external_x: 101; X86_64: .globl __emutls_v.external_y 102; X86_64: .p2align 3 103; X86_64-LABEL: __emutls_v.external_y: 104; X86_64-NEXT: .quad 1 105; X86_64-NEXT: .quad 2 106; X86_64-NEXT: .quad 0 107; X86_64-NEXT: .quad __emutls_t.external_y 108; X86_64-NOT: __emutls_v.external_x: 109; X86_64: .section .rodata, 110; X86_64-LABEL: __emutls_t.external_y: 111; X86_64-NEXT: .byte 7 112; X86_64: .data{{$}} 113; X86_64-NOT: .globl 114; X86_64: .p2align 3 115; X86_64-LABEL: __emutls_v.internal_y: 116; X86_64-NEXT: .quad 8 117; X86_64-NEXT: .quad 16 118; X86_64-NEXT: .quad 0 119; X86_64-NEXT: .quad __emutls_t.internal_y 120; X86_64: .section .rodata, 121; X86_64-LABEL: __emutls_t.internal_y: 122; X86_64-NEXT: .quad 9 123