brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · dc0d40c Raw
111 lines · plain
1; Run the tests with the `localexec` TLS mode specified.2; RUN: sed -e 's/\[\[TLS_MODE\]\]/(localexec)/' %s | llc -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -mattr=+bulk-memory,atomics - | FileCheck --check-prefixes=CHECK,TLS %s3; RUN: sed -e 's/\[\[TLS_MODE\]\]/(localexec)/' %s | llc -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -mattr=+bulk-memory,atomics -fast-isel - | FileCheck --check-prefixes=CHECK,TLS %s4 5; Also, run the same tests without a specified TLS mode--this should still emit `localexec` code on non-Emscripten targtes which don't currently support dynamic linking.6; RUN: sed -e 's/\[\[TLS_MODE\]\]//' %s | llc -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -mattr=+bulk-memory,atomics - | FileCheck --check-prefixes=CHECK,TLS %s7; RUN: sed -e 's/\[\[TLS_MODE\]\]//' %s | llc -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -mattr=+bulk-memory,atomics -fast-isel - | FileCheck --check-prefixes=CHECK,TLS %s8 9; Finally, when bulk memory is disabled, no TLS code should be generated.10; RUN: sed -e 's/\[\[TLS_MODE\]\]/(localexec)/' %s | llc -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -mattr=-bulk-memory,atomics - | FileCheck --check-prefixes=CHECK,NO-TLS %s11target triple = "wasm32-unknown-unknown"12 13; CHECK-LABEL: address_of_tls:14; CHECK-NEXT: .functype  address_of_tls () -> (i32)15define i32 @address_of_tls() {16  ; TLS-DAG: global.get __tls_base17  ; TLS-DAG: i32.const tls@TLSREL18  ; TLS-NEXT: i32.add19  ; TLS-NEXT: return20 21  ; NO-TLS-NEXT: i32.const tls22  ; NO-TLS-NEXT: return23  %p = call ptr @llvm.threadlocal.address.p0(ptr @tls)24  %r = ptrtoint ptr %p to i3225  ret i32 %r26}27 28; CHECK-LABEL: address_of_tls_external:29; CHECK-NEXT: .functype  address_of_tls_external () -> (i32)30define i32 @address_of_tls_external() {31  ; TLS-DAG: global.get __tls_base32  ; TLS-DAG: i32.const tls_external@TLSREL33  ; TLS-NEXT: i32.add34  ; TLS-NEXT: return35 36  ; NO-TLS-NEXT: i32.const tls_external37  ; NO-TLS-NEXT: return38  %p = call ptr @llvm.threadlocal.address.p0(ptr @tls_external)39  %r = ptrtoint ptr %p to i3240  ret i32 %r41}42 43; CHECK-LABEL: ptr_to_tls:44; CHECK-NEXT: .functype ptr_to_tls () -> (i32)45define ptr @ptr_to_tls() {46  ; TLS-DAG: global.get __tls_base47  ; TLS-DAG: i32.const tls@TLSREL48  ; TLS-NEXT: i32.add49  ; TLS-NEXT: return50 51  ; NO-TLS-NEXT: i32.const tls52  ; NO-TLS-NEXT: return53  %p = call ptr @llvm.threadlocal.address.p0(ptr @tls)54  ret ptr %p55}56 57; CHECK-LABEL: tls_load:58; CHECK-NEXT: .functype tls_load () -> (i32)59define i32 @tls_load() {60  ; TLS-DAG: global.get __tls_base61  ; TLS-DAG: i32.const tls@TLSREL62  ; TLS-NEXT: i32.add63  ; TLS-NEXT: i32.load 064  ; TLS-NEXT: return65 66  ; NO-TLS-NEXT: i32.const 067  ; NO-TLS-NEXT: i32.load tls68  ; NO-TLS-NEXT: return69  %p = call ptr @llvm.threadlocal.address.p0(ptr @tls)70  %tmp = load i32, ptr %p, align 471  ret i32 %tmp72}73 74; CHECK-LABEL: tls_store:75; CHECK-NEXT: .functype tls_store (i32) -> ()76define void @tls_store(i32 %x) {77  ; TLS-DAG: global.get __tls_base78  ; TLS-DAG: i32.const tls@TLSREL79  ; TLS-NEXT: i32.add80  ; TLS-NEXT: i32.store 081  ; TLS-NEXT: return82 83  ; NO-TLS-NEXT: i32.const 084  ; NO-TLS-NEXT: i32.store tls85  ; NO-TLS-NEXT: return86  %p = call ptr @llvm.threadlocal.address.p0(ptr @tls)87  store i32 %x, ptr %p, align 488  ret void89}90 91; CHECK-LABEL: tls_size:92; CHECK-NEXT: .functype tls_size () -> (i32)93define i32 @tls_size() {94; CHECK-NEXT: global.get __tls_size95; CHECK-NEXT: return96  %1 = call i32 @llvm.wasm.tls.size.i32()97  ret i32 %198}99 100; CHECK: .type tls,@object101; TLS-NEXT: .section .tbss.tls,"T",@102; NO-TLS-NEXT: .section .bss.tls,"",@103; CHECK-NEXT: .p2align 2104; CHECK-NEXT: tls:105; CHECK-NEXT: .int32 0106@tls = internal thread_local[[TLS_MODE]] global i32 0107 108@tls_external = external thread_local[[TLS_MODE]] global i32, align 4109 110declare i32 @llvm.wasm.tls.size.i32()111