From 393d0f799f8828e9d8002766a9e9db21797451df Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Fri, 18 Oct 2019 20:27:30 +0000 Subject: [WebAssembly] Allow multivalue signatures in object files Summary: Also changes the wasm YAML format to reflect the possibility of having multiple return types and to put the returns after the params for consistency with the binary encoding. Reviewers: aheejin, sbc100 Subscribers: dschuff, jgravelle-google, hiraditya, sunfish, arphaman, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69156 llvm-svn: 375283 --- llvm/include/llvm/ObjectYAML/WasmYAML.h | 2 +- llvm/lib/Object/WasmObjectFile.cpp | 9 +++------ llvm/lib/ObjectYAML/WasmEmitter.cpp | 9 +++------ llvm/lib/ObjectYAML/WasmYAML.cpp | 3 +-- llvm/test/CodeGen/WebAssembly/multivalue.ll | 17 ++++++++++++++++ llvm/test/CodeGen/WebAssembly/tailcall.ll | 3 ++- llvm/test/MC/WebAssembly/assembler-binary.ll | 4 ++-- llvm/test/MC/WebAssembly/comdat.ll | 5 +++-- llvm/test/MC/WebAssembly/data-section.s | 3 ++- llvm/test/MC/WebAssembly/event-section.ll | 5 +++-- llvm/test/MC/WebAssembly/external-func-address.ll | 5 +++-- llvm/test/MC/WebAssembly/libcall.ll | 5 +++-- llvm/test/MC/WebAssembly/reloc-pic.s | 3 ++- llvm/test/MC/WebAssembly/type-index.s | 7 ++++--- llvm/test/MC/WebAssembly/types.ll | 23 +++++++++++++--------- llvm/test/MC/WebAssembly/weak-alias.ll | 3 ++- llvm/test/Object/wasm-duplicate-name.test | 3 ++- llvm/test/Object/wasm-relocs-and-producers.yaml | 2 +- llvm/test/ObjectYAML/wasm/code_section.yaml | 10 ++++++---- llvm/test/ObjectYAML/wasm/event_section.yaml | 10 ++++++---- llvm/test/ObjectYAML/wasm/export_section.yaml | 6 +++--- llvm/test/ObjectYAML/wasm/function_section.yaml | 4 ++-- .../test/ObjectYAML/wasm/import_memory_shared.yaml | 5 +++-- llvm/test/ObjectYAML/wasm/import_section.yaml | 5 +++-- .../ObjectYAML/wasm/invalid_section_order.yaml | 2 +- llvm/test/ObjectYAML/wasm/linking_section.yaml | 3 ++- llvm/test/ObjectYAML/wasm/name_section.yaml | 3 ++- llvm/test/ObjectYAML/wasm/start_section.yaml | 4 ++-- llvm/test/ObjectYAML/wasm/type_section.yaml | 12 +++++++---- llvm/test/ObjectYAML/wasm/weak_symbols.yaml | 11 ++++++----- llvm/test/tools/llvm-nm/wasm/exports.yaml | 3 ++- llvm/test/tools/llvm-nm/wasm/imports.yaml | 3 ++- llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml | 3 ++- llvm/test/tools/llvm-readobj/wasm-imports.test | 5 +++-- llvm/tools/obj2yaml/wasm2yaml.cpp | 7 ++----- 35 files changed, 123 insertions(+), 84 deletions(-) (limited to 'llvm') diff --git a/llvm/include/llvm/ObjectYAML/WasmYAML.h b/llvm/include/llvm/ObjectYAML/WasmYAML.h index 2411dc7..15a8cc2 100644 --- a/llvm/include/llvm/ObjectYAML/WasmYAML.h +++ b/llvm/include/llvm/ObjectYAML/WasmYAML.h @@ -145,7 +145,7 @@ struct Signature { uint32_t Index; SignatureForm Form = wasm::WASM_TYPE_FUNC; std::vector ParamTypes; - ValueType ReturnType; + std::vector ReturnTypes; }; struct SymbolInfo { diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index 470283e..014b403 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -881,12 +881,9 @@ Error WasmObjectFile::parseTypeSection(ReadContext &Ctx) { Sig.Params.push_back(wasm::ValType(ParamType)); } uint32_t ReturnCount = readVaruint32(Ctx); - if (ReturnCount) { - if (ReturnCount != 1) { - return make_error( - "Multiple return types not supported", object_error::parse_failed); - } - Sig.Returns.push_back(wasm::ValType(readUint8(Ctx))); + while (ReturnCount--) { + uint32_t ReturnType = readUint8(Ctx); + Sig.Returns.push_back(wasm::ValType(ReturnType)); } Signatures.push_back(std::move(Sig)); } diff --git a/llvm/lib/ObjectYAML/WasmEmitter.cpp b/llvm/lib/ObjectYAML/WasmEmitter.cpp index 42c57d4..debc040 100644 --- a/llvm/lib/ObjectYAML/WasmEmitter.cpp +++ b/llvm/lib/ObjectYAML/WasmEmitter.cpp @@ -334,12 +334,9 @@ void WasmWriter::writeSectionContent(raw_ostream &OS, encodeULEB128(Sig.ParamTypes.size(), OS); for (auto ParamType : Sig.ParamTypes) writeUint8(OS, ParamType); - if (Sig.ReturnType == wasm::WASM_TYPE_NORESULT) { - encodeULEB128(0, OS); - } else { - encodeULEB128(1, OS); - writeUint8(OS, Sig.ReturnType); - } + encodeULEB128(Sig.ReturnTypes.size(), OS); + for (auto ReturnType : Sig.ReturnTypes) + writeUint8(OS, ReturnType); } } diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp index 04f5694..232d512 100644 --- a/llvm/lib/ObjectYAML/WasmYAML.cpp +++ b/llvm/lib/ObjectYAML/WasmYAML.cpp @@ -295,8 +295,8 @@ void ScalarEnumerationTraits::enumeration( void MappingTraits::mapping( IO &IO, WasmYAML::Signature &Signature) { IO.mapRequired("Index", Signature.Index); - IO.mapRequired("ReturnType", Signature.ReturnType); IO.mapRequired("ParamTypes", Signature.ParamTypes); + IO.mapRequired("ReturnTypes", Signature.ReturnTypes); } void MappingTraits::mapping(IO &IO, WasmYAML::Table &Table) { @@ -560,7 +560,6 @@ void ScalarEnumerationTraits::enumeration( ECase(V128); ECase(FUNCREF); ECase(FUNC); - ECase(NORESULT); #undef ECase } diff --git a/llvm/test/CodeGen/WebAssembly/multivalue.ll b/llvm/test/CodeGen/WebAssembly/multivalue.ll index 877851f..ee32852 100644 --- a/llvm/test/CodeGen/WebAssembly/multivalue.ll +++ b/llvm/test/CodeGen/WebAssembly/multivalue.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue | FileCheck %s +; RUN: llc < %s --filetype=obj -mattr=+multivalue | obj2yaml | FileCheck %s --check-prefix OBJ ; Test that the multivalue returns, function types, and block types ; work as expected. @@ -42,3 +43,19 @@ loop: ; CHECK-NEXT: .int8 43 ; CHECK-NEXT: .int8 10 ; CHECK-NEXT: .ascii "multivalue" + +; OBJ-LABEL: - Type: TYPE +; OBJ-NEXT: Signatures: +; OBJ-NEXT: - Index: 0 +; OBJ-NEXT: ParamTypes: +; OBJ-NEXT: - I32 +; OBJ-NEXT: - I32 +; OBJ-NEXT: ReturnTypes: +; OBJ-NEXT: - I32 +; OBJ-NEXT: - I32 +; OBJ-NEXT: - Index: 1 +; OBJ-NEXT: ParamTypes: +; OBJ-NEXT: - I32 +; OBJ-NEXT: ReturnTypes: +; OBJ-NEXT: - I32 +; OBJ-NEXT: - I64 diff --git a/llvm/test/CodeGen/WebAssembly/tailcall.ll b/llvm/test/CodeGen/WebAssembly/tailcall.ll index a277b4f..f4d4499 100644 --- a/llvm/test/CodeGen/WebAssembly/tailcall.ll +++ b/llvm/test/CodeGen/WebAssembly/tailcall.ll @@ -215,12 +215,13 @@ define i1 @mismatched_return_trunc() { ; return-called functions include the proper return types ; YAML-LABEL: - Index: 8 -; YAML-NEXT: ReturnType: I32 ; YAML-NEXT: ParamTypes: ; YAML-NEXT: - I32 ; YAML-NEXT: - F32 ; YAML-NEXT: - I64 ; YAML-NEXT: - F64 +; YAML-NEXT: ReturnTypes: +; YAML-NEXT: - I32 define i32 @unique_caller(i32 (i32, float, i64, double)** %p) { %f = load i32 (i32, float, i64, double)*, i32 (i32, float, i64, double)** %p %v = tail call i32 %f(i32 0, float 0., i64 0, double 0.) diff --git a/llvm/test/MC/WebAssembly/assembler-binary.ll b/llvm/test/MC/WebAssembly/assembler-binary.ll index 3683d63..35fa411 100644 --- a/llvm/test/MC/WebAssembly/assembler-binary.ll +++ b/llvm/test/MC/WebAssembly/assembler-binary.ll @@ -38,12 +38,12 @@ entry: ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK-NEXT: - Module: env diff --git a/llvm/test/MC/WebAssembly/comdat.ll b/llvm/test/MC/WebAssembly/comdat.ll index ecc5e5b..e50f5bf 100644 --- a/llvm/test/MC/WebAssembly/comdat.ll +++ b/llvm/test/MC/WebAssembly/comdat.ll @@ -28,8 +28,9 @@ define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) { ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: I32 -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK-NEXT: - Module: env diff --git a/llvm/test/MC/WebAssembly/data-section.s b/llvm/test/MC/WebAssembly/data-section.s index 70d9de2..52e60f6 100644 --- a/llvm/test/MC/WebAssembly/data-section.s +++ b/llvm/test/MC/WebAssembly/data-section.s @@ -35,8 +35,9 @@ test0: # BIN-NEXT: - Type: TYPE # BIN-NEXT: Signatures: # BIN-NEXT: - Index: 0 -# BIN-NEXT: ReturnType: I32 # BIN-NEXT: ParamTypes: [] +# BIN-NEXT: ReturnTypes: +# BIN-NEXT: - I32 # BIN-NEXT: - Type: IMPORT # BIN-NEXT: Imports: # BIN-NEXT: - Module: env diff --git a/llvm/test/MC/WebAssembly/event-section.ll b/llvm/test/MC/WebAssembly/event-section.ll index 2b5b5bb..b662c29 100644 --- a/llvm/test/MC/WebAssembly/event-section.ll +++ b/llvm/test/MC/WebAssembly/event-section.ll @@ -19,13 +19,14 @@ define i32 @test_throw1(i8* %p) { ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK: - Type: EVENT ; CHECK-NEXT: Events: diff --git a/llvm/test/MC/WebAssembly/external-func-address.ll b/llvm/test/MC/WebAssembly/external-func-address.ll index 9d3b335..9c16c02 100644 --- a/llvm/test/MC/WebAssembly/external-func-address.ll +++ b/llvm/test/MC/WebAssembly/external-func-address.ll @@ -27,15 +27,16 @@ define void @call(i32) { ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK: - Module: env diff --git a/llvm/test/MC/WebAssembly/libcall.ll b/llvm/test/MC/WebAssembly/libcall.ll index b225358..9f8abba 100644 --- a/llvm/test/MC/WebAssembly/libcall.ll +++ b/llvm/test/MC/WebAssembly/libcall.ll @@ -17,14 +17,15 @@ declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture r ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: IMPORT diff --git a/llvm/test/MC/WebAssembly/reloc-pic.s b/llvm/test/MC/WebAssembly/reloc-pic.s index 2b7ef54..626f8d9 100644 --- a/llvm/test/MC/WebAssembly/reloc-pic.s +++ b/llvm/test/MC/WebAssembly/reloc-pic.s @@ -52,8 +52,9 @@ hidden_func: # CHECK-NEXT: - Type: TYPE # CHECK-NEXT: Signatures: # CHECK-NEXT: - Index: 0 -# CHECK-NEXT: ReturnType: I32 # CHECK-NEXT: ParamTypes: [] +# CHECK-NEXT: ReturnTypes: +# CHECK-NEXT: - I32 # CHECK-NEXT: - Type: IMPORT # CHECK-NEXT: Imports: # CHECK-NEXT: - Module: env diff --git a/llvm/test/MC/WebAssembly/type-index.s b/llvm/test/MC/WebAssembly/type-index.s index 707f6aa..9c77434 100644 --- a/llvm/test/MC/WebAssembly/type-index.s +++ b/llvm/test/MC/WebAssembly/type-index.s @@ -22,13 +22,15 @@ test0: # BIN-NEXT: - Type: TYPE # BIN-NEXT: Signatures: # BIN-NEXT: - Index: 0 -# BIN-NEXT: ReturnType: I32 # BIN-NEXT: ParamTypes: # BIN-NEXT: - I32 +# BIN-NEXT: ReturnTypes: +# BIN-NEXT: - I32 # BIN-NEXT: - Index: 1 -# BIN-NEXT: ReturnType: F64 # BIN-NEXT: ParamTypes: # BIN-NEXT: - F64 +# BIN-NEXT: ReturnTypes: +# BIN-NEXT: - F64 # BIN-NEXT: - Type: IMPORT # BIN-NEXT: Imports: # BIN-NEXT: - Module: env @@ -64,4 +66,3 @@ test0: # BIN-NEXT: Flags: [ BINDING_LOCAL ] # BIN-NEXT: Function: 0 # BIN-NEXT: ... - diff --git a/llvm/test/MC/WebAssembly/types.ll b/llvm/test/MC/WebAssembly/types.ll index 6eeeef2..c049d3c 100644 --- a/llvm/test/MC/WebAssembly/types.ll +++ b/llvm/test/MC/WebAssembly/types.ll @@ -37,32 +37,37 @@ define void @vararg(i32, i32, ...) { ; CHECK-LABEL: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Index: 2 -; CHECK-NEXT: ReturnType: I64 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I64 ; CHECK-NEXT: - Index: 3 -; CHECK-NEXT: ReturnType: F32 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - F32 ; CHECK-NEXT: - Index: 4 -; CHECK-NEXT: ReturnType: F64 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - F64 ; CHECK-NEXT: - Index: 5 -; CHECK-NEXT: ReturnType: V128 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - V128 ; CHECK-NEXT: - Index: 6 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 7 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; should be no additional types -; CHECK-NOT: ReturnType +; CHECK-NOT: ReturnTypes diff --git a/llvm/test/MC/WebAssembly/weak-alias.ll b/llvm/test/MC/WebAssembly/weak-alias.ll index 20a27ed..c9c707e 100644 --- a/llvm/test/MC/WebAssembly/weak-alias.ll +++ b/llvm/test/MC/WebAssembly/weak-alias.ll @@ -49,8 +49,9 @@ entry: ; CHECK: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK-NEXT: - Module: env diff --git a/llvm/test/Object/wasm-duplicate-name.test b/llvm/test/Object/wasm-duplicate-name.test index 1bf2077..666291c 100644 --- a/llvm/test/Object/wasm-duplicate-name.test +++ b/llvm/test/Object/wasm-duplicate-name.test @@ -7,9 +7,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: foo diff --git a/llvm/test/Object/wasm-relocs-and-producers.yaml b/llvm/test/Object/wasm-relocs-and-producers.yaml index 01ad2bb..2bdc12e 100644 --- a/llvm/test/Object/wasm-relocs-and-producers.yaml +++ b/llvm/test/Object/wasm-relocs-and-producers.yaml @@ -16,8 +16,8 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: NORESULT ParamTypes: [] + ReturnTypes: [] - Type: IMPORT Imports: - Module: env diff --git a/llvm/test/ObjectYAML/wasm/code_section.yaml b/llvm/test/ObjectYAML/wasm/code_section.yaml index 0171938..dad75e0 100644 --- a/llvm/test/ObjectYAML/wasm/code_section.yaml +++ b/llvm/test/ObjectYAML/wasm/code_section.yaml @@ -6,14 +6,15 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: F32 ParamTypes: - I32 + ReturnTypes: + - F32 - Index: 1 - ReturnType: NORESULT ParamTypes: - I32 - I64 + ReturnTypes: [] - Type: FUNCTION FunctionTypes: - 0 @@ -59,14 +60,15 @@ Sections: # CHECK: - Type: TYPE # CHECK: Signatures: # CHECK: - Index: 0 -# CHECK: ReturnType: F32 # CHECK: ParamTypes: # CHECK: - I32 +# CHECK: ReturnTypes: +# CHECK: - F32 # CHECK: - Index: 1 -# CHECK: ReturnType: NORESULT # CHECK: ParamTypes: # CHECK: - I32 # CHECK: - I64 +# CHECK: ReturnTypes: [] # CHECK: - Type: CODE # CHECK: Relocations: # CHECK: - Type: R_WASM_TABLE_INDEX_SLEB diff --git a/llvm/test/ObjectYAML/wasm/event_section.yaml b/llvm/test/ObjectYAML/wasm/event_section.yaml index 91683bd..5c64cc8 100644 --- a/llvm/test/ObjectYAML/wasm/event_section.yaml +++ b/llvm/test/ObjectYAML/wasm/event_section.yaml @@ -7,13 +7,14 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Index: 1 - ReturnType: NORESULT ParamTypes: - I32 + ReturnTypes: [] - Type: FUNCTION FunctionTypes: [ 0 ] - Type: EVENT @@ -53,13 +54,14 @@ Sections: # CHECK-NEXT: - Type: TYPE # CHECK-NEXT: Signatures: # CHECK-NEXT: - Index: 0 -# CHECK-NEXT: ReturnType: I32 # CHECK-NEXT: ParamTypes: # CHECK-NEXT: - I32 +# CHECK-NEXT: ReturnTypes: +# CHECK-NEXT: - I32 # CHECK-NEXT: - Index: 1 -# CHECK-NEXT: ReturnType: NORESULT # CHECK-NEXT: ParamTypes: # CHECK-NEXT: - I32 +# CHECK-NEXT: ReturnTypes: [] # CHECK-NEXT: - Type: FUNCTION # CHECK-NEXT: FunctionTypes: [ 0 ] # CHECK-NEXT: - Type: EVENT diff --git a/llvm/test/ObjectYAML/wasm/export_section.yaml b/llvm/test/ObjectYAML/wasm/export_section.yaml index af72f13..4b3487c 100644 --- a/llvm/test/ObjectYAML/wasm/export_section.yaml +++ b/llvm/test/ObjectYAML/wasm/export_section.yaml @@ -6,8 +6,8 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: NORESULT ParamTypes: + ReturnTypes: [] - Type: FUNCTION FunctionTypes: [ 0, 0 ] - Type: GLOBAL @@ -25,7 +25,7 @@ Sections: Opcode: I64_CONST Value: 64 - Type: EXPORT - Exports: + Exports: - Name: function_export Kind: FUNCTION Index: 1 @@ -52,7 +52,7 @@ Sections: # CHECK: Version: 0x00000001 # CHECK: Sections: # CHECK: - Type: EXPORT -# CHECK: Exports: +# CHECK: Exports: # CHECK: - Name: function_export # CHECK: Kind: FUNCTION # CHECK: Index: 1 diff --git a/llvm/test/ObjectYAML/wasm/function_section.yaml b/llvm/test/ObjectYAML/wasm/function_section.yaml index d316144..8bfe4fa 100644 --- a/llvm/test/ObjectYAML/wasm/function_section.yaml +++ b/llvm/test/ObjectYAML/wasm/function_section.yaml @@ -6,12 +6,12 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: NORESULT ParamTypes: + ReturnTypes: [] - Index: 1 - ReturnType: NORESULT ParamTypes: - I32 + ReturnTypes: [] - Type: FUNCTION FunctionTypes: [ 1, 0 ] - Type: CODE diff --git a/llvm/test/ObjectYAML/wasm/import_memory_shared.yaml b/llvm/test/ObjectYAML/wasm/import_memory_shared.yaml index 849bdc5..b6ca9fa 100644 --- a/llvm/test/ObjectYAML/wasm/import_memory_shared.yaml +++ b/llvm/test/ObjectYAML/wasm/import_memory_shared.yaml @@ -6,9 +6,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: foo @@ -25,7 +26,7 @@ Sections: # CHECK: Version: 0x00000001 # CHECK: Sections: # CHECK: - Type: IMPORT -# CHECK: Imports: +# CHECK: Imports: # CHECK: - Module: foo # CHECK: Field: imported_memory # CHECK: Kind: MEMORY diff --git a/llvm/test/ObjectYAML/wasm/import_section.yaml b/llvm/test/ObjectYAML/wasm/import_section.yaml index 90de6f0..2df2f39 100644 --- a/llvm/test/ObjectYAML/wasm/import_section.yaml +++ b/llvm/test/ObjectYAML/wasm/import_section.yaml @@ -6,9 +6,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: foo @@ -42,7 +43,7 @@ Sections: # CHECK: Version: 0x00000001 # CHECK: Sections: # CHECK: - Type: IMPORT -# CHECK: Imports: +# CHECK: Imports: # CHECK: - Module: foo # CHECK: Field: imported_function # CHECK: Kind: FUNCTION diff --git a/llvm/test/ObjectYAML/wasm/invalid_section_order.yaml b/llvm/test/ObjectYAML/wasm/invalid_section_order.yaml index 4e3581e..7176757 100644 --- a/llvm/test/ObjectYAML/wasm/invalid_section_order.yaml +++ b/llvm/test/ObjectYAML/wasm/invalid_section_order.yaml @@ -7,8 +7,8 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: NORESULT ParamTypes: [] + ReturnTypes: [] - Type: CODE Functions: - Index: 0 diff --git a/llvm/test/ObjectYAML/wasm/linking_section.yaml b/llvm/test/ObjectYAML/wasm/linking_section.yaml index 3982741..2e3da87 100644 --- a/llvm/test/ObjectYAML/wasm/linking_section.yaml +++ b/llvm/test/ObjectYAML/wasm/linking_section.yaml @@ -6,9 +6,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: foo diff --git a/llvm/test/ObjectYAML/wasm/name_section.yaml b/llvm/test/ObjectYAML/wasm/name_section.yaml index f7a489d..a22b257 100644 --- a/llvm/test/ObjectYAML/wasm/name_section.yaml +++ b/llvm/test/ObjectYAML/wasm/name_section.yaml @@ -6,9 +6,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: foo diff --git a/llvm/test/ObjectYAML/wasm/start_section.yaml b/llvm/test/ObjectYAML/wasm/start_section.yaml index 5d57c1b..754adea 100644 --- a/llvm/test/ObjectYAML/wasm/start_section.yaml +++ b/llvm/test/ObjectYAML/wasm/start_section.yaml @@ -7,8 +7,8 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: NORESULT - ParamTypes: + ParamTypes: [] + ReturnTypes: [] - Type: FUNCTION FunctionTypes: [ 0, 0, 0 ] - Type: START diff --git a/llvm/test/ObjectYAML/wasm/type_section.yaml b/llvm/test/ObjectYAML/wasm/type_section.yaml index a87949f..beb3a16 100644 --- a/llvm/test/ObjectYAML/wasm/type_section.yaml +++ b/llvm/test/ObjectYAML/wasm/type_section.yaml @@ -6,15 +6,17 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - F32 - F32 + ReturnTypes: + - I32 - Index: 1 - ReturnType: I64 ParamTypes: - F64 - F64 + ReturnTypes: + - I64 ... # CHECK: --- !WASM # CHECK: FileHeader: @@ -23,13 +25,15 @@ Sections: # CHECK: - Type: TYPE # CHECK: Signatures: # CHECK: - Index: 0 -# CHECK: ReturnType: I32 # CHECK: ParamTypes: # CHECK: - F32 # CHECK: - F32 +# CHECK: ReturnTypes: +# CHECK: - I32 # CHECK: - Index: 1 -# CHECK: ReturnType: I64 # CHECK: ParamTypes: # CHECK: - F64 # CHECK: - F64 +# CHECK: ReturnTypes: +# CHECK: - I64 # CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/weak_symbols.yaml b/llvm/test/ObjectYAML/wasm/weak_symbols.yaml index fb85b82..82bc70c 100644 --- a/llvm/test/ObjectYAML/wasm/weak_symbols.yaml +++ b/llvm/test/ObjectYAML/wasm/weak_symbols.yaml @@ -6,12 +6,13 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 - ParamTypes: + ParamTypes: [] + ReturnTypes: + - I32 - Type: FUNCTION FunctionTypes: [ 0, 0 ] - Type: GLOBAL - Globals: + Globals: - Index: 0 Type: I32 Mutable: false @@ -19,7 +20,7 @@ Sections: Opcode: I32_CONST Value: 1 - Type: EXPORT - Exports: + Exports: - Name: function_export Kind: FUNCTION Index: 1 @@ -54,7 +55,7 @@ Sections: # CHECK: Version: 0x00000001 # CHECK: Sections: # CHECK: - Type: EXPORT -# CHECK: Exports: +# CHECK: Exports: # CHECK: - Name: function_export # CHECK: Kind: FUNCTION # CHECK: Index: 1 diff --git a/llvm/test/tools/llvm-nm/wasm/exports.yaml b/llvm/test/tools/llvm-nm/wasm/exports.yaml index eddcbc2..15c98ae 100644 --- a/llvm/test/tools/llvm-nm/wasm/exports.yaml +++ b/llvm/test/tools/llvm-nm/wasm/exports.yaml @@ -9,9 +9,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: FUNCTION FunctionTypes: [ 0 ] - Type: GLOBAL diff --git a/llvm/test/tools/llvm-nm/wasm/imports.yaml b/llvm/test/tools/llvm-nm/wasm/imports.yaml index 2ea0d0f1..37b0ce4 100644 --- a/llvm/test/tools/llvm-nm/wasm/imports.yaml +++ b/llvm/test/tools/llvm-nm/wasm/imports.yaml @@ -9,9 +9,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: env diff --git a/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml b/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml index a815594..d8e4cec 100644 --- a/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml +++ b/llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml @@ -9,9 +9,10 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: - I32 + ReturnTypes: + - I32 - Type: IMPORT Imports: - Module: env diff --git a/llvm/test/tools/llvm-readobj/wasm-imports.test b/llvm/test/tools/llvm-readobj/wasm-imports.test index fd1e5c8..6eb1967 100644 --- a/llvm/test/tools/llvm-readobj/wasm-imports.test +++ b/llvm/test/tools/llvm-readobj/wasm-imports.test @@ -9,11 +9,12 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I32 ParamTypes: [] + ReturnTypes: + - I32 - Index: 1 - ReturnType: NORESULT ParamTypes: [] + ReturnTypes: [] - Type: IMPORT Imports: - Module: env diff --git a/llvm/tools/obj2yaml/wasm2yaml.cpp b/llvm/tools/obj2yaml/wasm2yaml.cpp index 7a54097..ea7a1e98 100644 --- a/llvm/tools/obj2yaml/wasm2yaml.cpp +++ b/llvm/tools/obj2yaml/wasm2yaml.cpp @@ -198,13 +198,10 @@ ErrorOr WasmDumper::dump() { for (const auto &FunctionSig : Obj.types()) { WasmYAML::Signature Sig; Sig.Index = Index++; - Sig.ReturnType = wasm::WASM_TYPE_NORESULT; - assert(FunctionSig.Returns.size() <= 1 && - "Functions with multiple returns are not supported"); - if (FunctionSig.Returns.size()) - Sig.ReturnType = static_cast(FunctionSig.Returns[0]); for (const auto &ParamType : FunctionSig.Params) Sig.ParamTypes.emplace_back(static_cast(ParamType)); + for (const auto &ReturnType : FunctionSig.Returns) + Sig.ReturnTypes.emplace_back(static_cast(ReturnType)); TypeSec->Signatures.push_back(Sig); } S = std::move(TypeSec); -- cgit v1.1