1; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -relocation-model=pic \ 2; RUN: | FileCheck -check-prefix=ARM_64 %s 3; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -relocation-model=pic -O3 \ 4; RUN: | FileCheck -check-prefix=ARM_64 %s 5; RUN: llc < %s -emulated-tls -mtriple=aarch64-linux-android -O3 \ 6; RUN: | FileCheck -check-prefix=ARM_64 %s 7; RUN: llc < %s -emulated-tls -mtriple=aarch64-windows-gnu -O3 \ 8; RUN: | FileCheck -check-prefix=ARM_64 %s 9; RUN: llc < %s -emulated-tls -mtriple=aarch64-apple-darwin -O3 \ 10; RUN: | FileCheck -check-prefix=DARWIN %s 11 12; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic \ 13; RUN: | FileCheck -check-prefix=ARM_64 %s 14; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic -O3 \ 15; RUN: | FileCheck -check-prefix=ARM_64 %s 16; RUN: llc < %s -mtriple=aarch64-linux-android -O3 \ 17; RUN: | FileCheck -check-prefix=ARM_64 %s 18; aarch64-windows-gnu needs explicit -emulated-tls 19; RUN: llc < %s -mtriple=aarch64-apple-darwin -O3 \ 20; RUN: | FileCheck -check-prefix=NoEMU %s 21 22; NoEMU-NOT: __emutls 23 24; Make sure that TLS symbols are emitted in expected order. 25 26@external_x = external thread_local global i32, align 8 27@external_y = thread_local global i8 7, align 2 28@internal_y = internal thread_local global i64 9, align 16 29 30define i32* @get_external_x() { 31entry: 32 ret i32* @external_x 33} 34 35define i8* @get_external_y() { 36entry: 37 ret i8* @external_y 38} 39 40define i64* @get_internal_y() { 41entry: 42 ret i64* @internal_y 43} 44 45; ARM_64-LABEL: get_external_x: 46; ARM_64: __emutls_v.external_x 47; ARM_64: __emutls_get_address 48; ARM_64-LABEL: get_external_y: 49; ARM_64: __emutls_v.external_y 50; ARM_64: __emutls_get_address 51; ARM_64-LABEL: get_internal_y: 52; ARM_64: __emutls_v.internal_y 53; ARM_64: __emutls_get_address 54; ARM_64-NOT: __emutls_t.external_x 55; ARM_64-NOT: __emutls_v.external_x: 56; ARM_64: .data{{$}} 57; ARM_64: .globl __emutls_v.external_y 58; ARM_64: .p2align 3 59; ARM_64-LABEL: __emutls_v.external_y: 60; ARM_64-NEXT: .xword 1 61; ARM_64-NEXT: .xword 2 62; ARM_64-NEXT: .xword 0 63; ARM_64-NEXT: .xword __emutls_t.external_y 64; ARM_64-NOT: __emutls_v.external_x: 65; ARM_64: .section .r{{o?}}data, 66; ARM_64-LABEL: __emutls_t.external_y: 67; ARM_64-NEXT: .byte 7 68; ARM_64: .data{{$}} 69; ARM_64-NOT: .globl __emutls_v 70; ARM_64: .p2align 3 71; ARM_64-LABEL: __emutls_v.internal_y: 72; ARM_64-NEXT: .xword 8 73; ARM_64-NEXT: .xword 16 74; ARM_64-NEXT: .xword 0 75; ARM_64-NEXT: .xword __emutls_t.internal_y 76; ARM_64: .section .r{{o?}}data, 77; ARM_64-LABEL: __emutls_t.internal_y: 78; ARM_64-NEXT: .xword 9 79 80; DARWIN-LABEL: _get_external_x: 81; DARWIN: ___emutls_v.external_x 82; DARWIN: ___emutls_get_address 83; DARWIN-LABEL: _get_external_y: 84; DARWIN: ___emutls_v.external_y 85; DARWIN: ___emutls_get_address 86; DARWIN-LABEL: _get_internal_y: 87; DARWIN: ___emutls_v.internal_y 88; DARWIN: ___emutls_get_address 89; DARWIN-NOT: ___emutls_t.external_x 90; DARWIN-NOT: ___emutls_v.external_x: 91; DARWIN: .section __DATA,__data 92; DARWIN: .globl ___emutls_v.external_y 93; DARWIN: .p2align 3 94; DARWIN-LABEL: ___emutls_v.external_y: 95; DARWIN-NEXT: .quad 1 96; DARWIN-NEXT: .quad 2 97; DARWIN-NEXT: .quad 0 98; DARWIN-NEXT: .quad ___emutls_t.external_y 99; DARWIN-NOT: ___emutls_v.external_x: 100; DARWIN: .section __TEXT,__const 101; DARWIN-LABEL: ___emutls_t.external_y: 102; DARWIN-NEXT: .byte 7 103; DARWIN: .section __DATA,__data 104; DARWIN-NOT: .globl ___emutls_v 105; DARWIN: .p2align 3 106; DARWIN-LABEL: ___emutls_v.internal_y: 107; DARWIN-NEXT: .quad 8 108; DARWIN-NEXT: .quad 16 109; DARWIN-NEXT: .quad 0 110; DARWIN-NEXT: .quad ___emutls_t.internal_y 111; DARWIN: .section __TEXT,__const 112; DARWIN-LABEL: ___emutls_t.internal_y: 113; DARWIN-NEXT: .quad 9 114