1; RUN: llc -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.o 2 3target triple = "wasm32-unknown-unknown" 4 5@no_tls = global i32 0, align 4 6@tls1 = thread_local(localexec) global i32 1, align 4 7@tls2 = thread_local(localexec) global i32 1, align 4 8 9define i32* @tls1_addr() { 10 ret i32* @tls1 11} 12 13define i32* @tls2_addr() { 14 ret i32* @tls2 15} 16 17define i32 @tls_align() { 18 %1 = call i32 @llvm.wasm.tls.align.i32() 19 ret i32 %1 20} 21 22declare i32 @llvm.wasm.tls.align.i32() 23 24; RUN: wasm-ld -no-gc-sections --shared-memory --max-memory=131072 --no-entry -o %t.wasm %t.o 25; RUN: obj2yaml %t.wasm | FileCheck %s 26 27; RUN: wasm-ld -no-gc-sections --shared-memory --max-memory=131072 --no-merge-data-segments --no-entry -o %t.wasm %t.o 28; RUN: obj2yaml %t.wasm | FileCheck %s 29 30; CHECK: - Type: GLOBAL 31; CHECK-NEXT: Globals: 32; CHECK-NEXT: - Index: 0 33; CHECK-NEXT: Type: I32 34; CHECK-NEXT: Mutable: true 35; CHECK-NEXT: InitExpr: 36; CHECK-NEXT: Opcode: I32_CONST 37; CHECK-NEXT: Value: 66576 38 39; __tls_base 40; CHECK-NEXT: - Index: 1 41; CHECK-NEXT: Type: I32 42; CHECK-NEXT: Mutable: true 43; CHECK-NEXT: InitExpr: 44; CHECK-NEXT: Opcode: I32_CONST 45; CHECK-NEXT: Value: 0 46 47; __tls_size 48; CHECK-NEXT: - Index: 2 49; CHECK-NEXT: Type: I32 50; CHECK-NEXT: Mutable: false 51; CHECK-NEXT: InitExpr: 52; CHECK-NEXT: Opcode: I32_CONST 53; CHECK-NEXT: Value: 8 54 55; __tls_align 56; CHECK-NEXT: - Index: 3 57; CHECK-NEXT: Type: I32 58; CHECK-NEXT: Mutable: false 59; CHECK-NEXT: InitExpr: 60; CHECK-NEXT: Opcode: I32_CONST 61; CHECK-NEXT: Value: 4 62 63 64; CHECK: - Type: CODE 65; CHECK-NEXT: Functions: 66; Skip __wasm_call_ctors and __wasm_init_memory 67; CHECK: - Index: 2 68; CHECK-NEXT: Locals: [] 69; CHECK-NEXT: Body: 20002401200041004108FC0800000B 70 71; Expected body of __wasm_init_tls: 72; local.get 0 73; global.set 1 74; local.get 0 75; i32.const 0 76; i32.const 8 77; memory.init 1, 0 78; end 79 80; CHECK-NEXT: - Index: 3 81; CHECK-NEXT: Locals: [] 82; CHECK-NEXT: Body: 2381808080004180808080006A0B 83 84; Expected body of tls1_addr: 85; global.get 1 86; i32.const 0 87; i32.add 88; end 89 90; CHECK-NEXT: - Index: 4 91; CHECK-NEXT: Locals: [] 92; CHECK-NEXT: Body: 2381808080004184808080006A0B 93 94; Expected body of tls1_addr: 95; global.get 1 96; i32.const 4 97; i32.add 98; end 99 100; CHECK-NEXT: - Index: 5 101; CHECK-NEXT: Locals: [] 102; CHECK-NEXT: Body: 2383808080000B 103 104; Expected body of tls1_addr: 105; global.get 3 106; end 107