1; RUN: llc -filetype=asm -asm-verbose=false %s -o %t.s 2; RUN: FileCheck -check-prefix=ASM -input-file %t.s %s 3; RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=asm %t.s -o - | FileCheck -check-prefix=ASM %s 4; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s 5; RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj %t.s -o - | obj2yaml | FileCheck %s 6 7; This specifically tests that we can generate a binary from the assembler 8; that produces the same binary as the backend would. 9 10target triple = "wasm32-unknown-unknown" 11 12declare void @bar() 13 14define void @foo(i32 %n) { 15entry: 16 call void @bar() 17 ret void 18} 19 20; Checking assembly is not the point of this test, but if something breaks 21; it is easier to spot it here than in the yaml output. 22 23; ASM: .text 24; ASM: .file "assembler-binary.ll" 25; ASM: .functype bar () -> () 26; ASM: .globl foo 27; ASM: foo: 28; ASM-NEXT: .functype foo (i32) -> () 29; ASM-NEXT: call bar 30; ASM-NEXT: end_function 31 32 33; CHECK: --- !WASM 34; CHECK-NEXT: FileHeader: 35; CHECK-NEXT: Version: 0x1 36; CHECK-NEXT: Sections: 37; CHECK-NEXT: - Type: TYPE 38; CHECK-NEXT: Signatures: 39; CHECK-NEXT: - Index: 0 40; CHECK-NEXT: ParamTypes: 41; CHECK-NEXT: - I32 42; CHECK-NEXT: ReturnTypes: [] 43; CHECK-NEXT: - Index: 1 44; CHECK-NEXT: ParamTypes: [] 45; CHECK-NEXT: ReturnTypes: [] 46; CHECK-NEXT: - Type: IMPORT 47; CHECK-NEXT: Imports: 48; CHECK-NEXT: - Module: env 49; CHECK-NEXT: Field: __linear_memory 50; CHECK-NEXT: Kind: MEMORY 51; CHECK-NEXT: Memory: 52; CHECK-NEXT: Minimum: 0x0 53; CHECK-NEXT: - Module: env 54; CHECK-NEXT: Field: bar 55; CHECK-NEXT: Kind: FUNCTION 56; CHECK-NEXT: SigIndex: 1 57; CHECK-NEXT: - Type: FUNCTION 58; CHECK-NEXT: FunctionTypes: [ 0 ] 59; CHECK-NEXT: - Type: CODE 60; CHECK-NEXT: Relocations: 61; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 62; CHECK-NEXT: Index: 1 63; CHECK-NEXT: Offset: 0x4 64; CHECK-NEXT: Functions: 65; CHECK-NEXT: - Index: 1 66; CHECK-NEXT: Locals: [] 67; CHECK-NEXT: Body: 1080808080000B 68; CHECK-NEXT: - Type: CUSTOM 69; CHECK-NEXT: Name: linking 70; CHECK-NEXT: Version: 2 71; CHECK-NEXT: SymbolTable: 72; CHECK-NEXT: - Index: 0 73; CHECK-NEXT: Kind: FUNCTION 74; CHECK-NEXT: Name: foo 75; CHECK-NEXT: Flags: [ ] 76; CHECK-NEXT: Function: 1 77; CHECK-NEXT: - Index: 1 78; CHECK-NEXT: Kind: FUNCTION 79; CHECK-NEXT: Name: bar 80; CHECK-NEXT: Flags: [ UNDEFINED ] 81; CHECK-NEXT: Function: 0 82; CHECK-NEXT: ... 83