151 lines · plain
1; RUN: llc < %s -emulated-tls -mtriple=arm-linux-android -relocation-model=pic \2; RUN: | FileCheck -check-prefix=ARM_32 %s3; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -relocation-model=pic \4; RUN: | FileCheck -check-prefix=ARM_32 %s5; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -relocation-model=pic -O3 \6; RUN: | FileCheck -check-prefix=ARM_32 %s7; RUN: llc < %s -emulated-tls -mtriple=arm-linux-androidabi -O3 \8; RUN: | FileCheck -check-prefix=ARM_32 %s9; RUN: llc < %s -emulated-tls -mtriple=arm-apple-darwin -O3 \10; RUN: | FileCheck -check-prefix=DARWIN %s11; RUN: llc < %s -emulated-tls -mtriple=thumbv7-windows-gnu -O3 \12; RUN: | FileCheck -check-prefix=WIN %s13 14; RUN: llc < %s -mtriple=arm-linux-android -relocation-model=pic \15; RUN: | FileCheck -check-prefix=ARM_32 %s16; RUN: llc < %s -mtriple=arm-linux-androidabi -relocation-model=pic \17; RUN: | FileCheck -check-prefix=ARM_32 %s18; RUN: llc < %s -mtriple=arm-linux-androidabi -relocation-model=pic -O3 \19; RUN: | FileCheck -check-prefix=ARM_32 %s20; RUN: llc < %s -mtriple=arm-linux-androidabi -O3 \21; RUN: | FileCheck -check-prefix=ARM_32 %s22; arm-apple-darwin must use -emulated-tls23; windows must use -emulated-tls24 25; Make sure that TLS symbols are emitted in expected order.26 27@external_x = external thread_local global i32, align 828@external_y = thread_local global i8 7, align 229@internal_y = internal thread_local global i64 9, align 1630 31define ptr @get_external_x() {32entry:33 ret ptr @external_x34}35 36define ptr @get_external_y() {37entry:38 ret ptr @external_y39}40 41define ptr @get_internal_y() {42entry:43 ret ptr @internal_y44}45 46; ARM_32-LABEL: get_external_x:47; ARM_32: bl __emutls_get_address48; ARM_32: .long __emutls_v.external_x49; ARM_32-LABEL: get_external_y:50; ARM_32: bl __emutls_get_address51; ARM_32: .long __emutls_v.external_y52; ARM_32-LABEL: get_internal_y:53; ARM_32: bl __emutls_get_address54; ARM_32: .long __emutls_v.internal_y55; ARM_32-NOT: __emutls_t.external_x56; ARM_32-NOT: __emutls_v.external_x:57; ARM_32: .data{{$}}58; ARM_32: .globl __emutls_v.external_y59; ARM_32: .p2align 260; ARM_32-LABEL: __emutls_v.external_y:61; ARM_32-NEXT: .long 162; ARM_32-NEXT: .long 263; ARM_32-NEXT: .long 064; ARM_32-NEXT: .long __emutls_t.external_y65; ARM_32: .section .rodata,66; ARM_32-LABEL: __emutls_t.external_y:67; ARM_32-NEXT: .byte 768; ARM_32: .data{{$}}69; ARM_32-NOT: .globl70; ARM_32: .p2align 271; ARM_32-LABEL: __emutls_v.internal_y:72; ARM_32-NEXT: .long 873; ARM_32-NEXT: .long 1674; ARM_32-NEXT: .long 075; ARM_32-NEXT: .long __emutls_t.internal_y76; ARM_32-LABEL: __emutls_t.internal_y:77; ARM_32-NEXT: .long 978; ARM_32-NEXT: .long 079 80; WIN-LABEL: get_external_x:81; WIN: movw r0, :lower16:.refptr.__emutls_v.external_x82; WIN: movt r0, :upper16:.refptr.__emutls_v.external_x83; WIN: ldr r0, [r0]84; WIN: bl __emutls_get_address85; WIN-LABEL: get_external_y:86; WIN: movw r0, :lower16:__emutls_v.external_y87; WIN: movt r0, :upper16:__emutls_v.external_y88; WIN: bl __emutls_get_address89; WIN-LABEL: get_internal_y:90; WIN: movw r0, :lower16:__emutls_v.internal_y91; WIN: movt r0, :upper16:__emutls_v.internal_y92; WIN: bl __emutls_get_address93; WIN-NOT: __emutls_t.external_x94; WIN-NOT: __emutls_v.external_x:95; WIN: .data{{$}}96; WIN: .globl __emutls_v.external_y97; WIN: .p2align 298; WIN-LABEL: __emutls_v.external_y:99; WIN-NEXT: .long 1100; WIN-NEXT: .long 2101; WIN-NEXT: .long 0102; WIN-NEXT: .long __emutls_t.external_y103; WIN: .section .rdata,104; WIN-LABEL: __emutls_t.external_y:105; WIN-NEXT: .byte 7106; WIN: .data{{$}}107; WIN-NOT: .globl108; WIN: .p2align 2109; WIN-LABEL: __emutls_v.internal_y:110; WIN-NEXT: .long 8111; WIN-NEXT: .long 16112; WIN-NEXT: .long 0113; WIN-NEXT: .long __emutls_t.internal_y114; WIN-LABEL: __emutls_t.internal_y:115; .quad 9 is equivalent to .long 9 .long 0116; WIN-NEXT: .quad 9117 118; DARWIN-LABEL: _get_external_x:119; DARWIN: bl ___emutls_get_address120; DARWIN: .long L___emutls_v.external_x$non_lazy_ptr-(LPC0_0+8)121; DARWIN-LABEL: _get_external_y:122; DARWIN: bl ___emutls_get_address123; DARWIN: .long ___emutls_v.external_y-(LPC1_0+8)124; DARWIN-LABEL: _get_internal_y:125; DARWIN: bl ___emutls_get_address126; DARWIN: .long ___emutls_v.internal_y-(LPC2_0+8)127; DARWIN-NOT: ___emutls_t.external_x128; DARWIN-NOT: ___emutls_v.external_x:129; DARWIN: .section __DATA,__data130; DARWIN: .globl ___emutls_v.external_y131; DARWIN: .p2align 2132; DARWIN-LABEL: ___emutls_v.external_y:133; DARWIN-NEXT: .long 1134; DARWIN-NEXT: .long 2135; DARWIN-NEXT: .long 0136; DARWIN-NEXT: .long ___emutls_t.external_y137; DARWIN: .section __TEXT,__const138; DARWIN-LABEL: ___emutls_t.external_y:139; DARWIN-NEXT: .byte 7140; DARWIN: .section __DATA,__data141; DARWIN-NOT: .globl142; DARWIN: .p2align 2143; DARWIN-LABEL: ___emutls_v.internal_y:144; DARWIN-NEXT: .long 8145; DARWIN-NEXT: .long 16146; DARWIN-NEXT: .long 0147; DARWIN-NEXT: .long ___emutls_t.internal_y148; DARWIN-LABEL: ___emutls_t.internal_y:149; DARWIN-NEXT: .long 9150; DARWIN-NEXT: .long 0151