From 393d0f799f8828e9d8002766a9e9db21797451df Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Fri, 18 Oct 2019 20:27:30 +0000 Subject: [PATCH] [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 --- lld/test/wasm/Inputs/globals.yaml | 3 +- lld/test/wasm/Inputs/undefined-globals.yaml | 3 +- lld/test/wasm/alias.ll | 2 +- lld/test/wasm/call-indirect.ll | 13 ++++---- lld/test/wasm/event-section.ll | 4 +-- lld/test/wasm/function-imports-first.ll | 7 +++-- lld/test/wasm/function-imports.ll | 5 ++-- lld/test/wasm/function-index.test | 6 ++-- lld/test/wasm/gc-sections.ll | 35 ++++++++++++---------- lld/test/wasm/local-symbols.ll | 5 ++-- lld/test/wasm/locals-duplicate.test | 10 ++++--- lld/test/wasm/relocatable.ll | 7 +++-- lld/test/wasm/stack-pointer.ll | 3 +- lld/test/wasm/undefined-weak-call.ll | 7 +++-- lld/test/wasm/weak-alias-overide.ll | 9 +++--- lld/test/wasm/weak-alias.ll | 16 +++++----- lld/test/wasm/weak-symbols.ll | 9 +++--- lld/test/wasm/weak-undefined.ll | 9 +++--- 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 ++--- 53 files changed, 212 insertions(+), 148 deletions(-) diff --git a/lld/test/wasm/Inputs/globals.yaml b/lld/test/wasm/Inputs/globals.yaml index 6f63226..4f5d0be 100644 --- a/lld/test/wasm/Inputs/globals.yaml +++ b/lld/test/wasm/Inputs/globals.yaml @@ -5,8 +5,9 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I64 ParamTypes: + ReturnTypes: + - I64 - Type: FUNCTION FunctionTypes: [ 0 ] - Type: GLOBAL diff --git a/lld/test/wasm/Inputs/undefined-globals.yaml b/lld/test/wasm/Inputs/undefined-globals.yaml index fd5a236..41bc643 100644 --- a/lld/test/wasm/Inputs/undefined-globals.yaml +++ b/lld/test/wasm/Inputs/undefined-globals.yaml @@ -5,8 +5,9 @@ Sections: - Type: TYPE Signatures: - Index: 0 - ReturnType: I64 ParamTypes: + ReturnTypes: + - I64 - Type: IMPORT Imports: - Module: env diff --git a/lld/test/wasm/alias.ll b/lld/test/wasm/alias.ll index e20e648..9927ba4 100644 --- a/lld/test/wasm/alias.ll +++ b/lld/test/wasm/alias.ll @@ -19,8 +19,8 @@ entry: ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/call-indirect.ll b/lld/test/wasm/call-indirect.ll index b0bbc4a..2eb134a 100644 --- a/lld/test/wasm/call-indirect.ll +++ b/lld/test/wasm/call-indirect.ll @@ -40,22 +40,25 @@ define void @call_ptr(i64 (i64)* %arg) { ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: I64 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I64 ; 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: - I64 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I64 ; CHECK-NEXT: - Index: 3 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 4 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 3, 1, 3, 4 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/event-section.ll b/lld/test/wasm/event-section.ll index 1610287..771a8cb 100644 --- a/lld/test/wasm/event-section.ll +++ b/lld/test/wasm/event-section.ll @@ -20,12 +20,12 @@ define void @_start() { ; CHECK-NEXT: - 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: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK: - Type: EVENT ; CHECK-NEXT: Events: diff --git a/lld/test/wasm/function-imports-first.ll b/lld/test/wasm/function-imports-first.ll index 04583bb..73c1134 100644 --- a/lld/test/wasm/function-imports-first.ll +++ b/lld/test/wasm/function-imports-first.ll @@ -17,12 +17,13 @@ declare i32 @ret32(float) local_unnamed_addr #1 ; CHECK: - Type: TYPE ; CHECK: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - F32 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1 ] ; CHECK: - Type: CODE diff --git a/lld/test/wasm/function-imports.ll b/lld/test/wasm/function-imports.ll index a21f6b5..4fb1c64 100644 --- a/lld/test/wasm/function-imports.ll +++ b/lld/test/wasm/function-imports.ll @@ -18,12 +18,13 @@ declare i32 @ret32(float) local_unnamed_addr #1 ; CHECK: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - F32 +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1 ] ; CHECK: - Type: CODE diff --git a/lld/test/wasm/function-index.test b/lld/test/wasm/function-index.test index 82f5d0c..fbcde6c 100644 --- a/lld/test/wasm/function-index.test +++ b/lld/test/wasm/function-index.test @@ -7,12 +7,14 @@ CHECK: Sections: CHECK: - Type: TYPE CHECK: Signatures: CHECK: - Index: 0 -CHECK: ReturnType: I32 CHECK: ParamTypes: CHECK: - F32 +CHECK: ReturnTypes: +CHECK: - I32 CHECK: - Index: 1 -CHECK: ReturnType: I64 CHECK: ParamTypes: CHECK: - F64 +CHECK: ReturnTypes: +CHECK: - I64 CHECK: - Type: FUNCTION CHECK: FunctionTypes: [ 0, 1 ] diff --git a/lld/test/wasm/gc-sections.ll b/lld/test/wasm/gc-sections.ll index fbb4b2b..a91bbec 100644 --- a/lld/test/wasm/gc-sections.ll +++ b/lld/test/wasm/gc-sections.ll @@ -38,14 +38,16 @@ entry: ; CHECK: - 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: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 2 -; CHECK-NEXT: ReturnType: I64 -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I64 ; CHECK-NEXT: - Type: FUNCTION ; CHECK: - Type: GLOBAL @@ -64,7 +66,7 @@ entry: ; CHECK-NEXT: Value: 456 ; CHECK: - Type: DATA -; CHECK-NEXT: Segments: +; CHECK-NEXT: Segments: ; CHECK-NEXT: - SectionOffset: 7 ; CHECK-NEXT: InitFlags: 0 ; CHECK-NEXT: Offset: @@ -89,18 +91,21 @@ entry: ; NO-GC: - Type: TYPE ; NO-GC-NEXT: Signatures: ; NO-GC-NEXT: - Index: 0 -; NO-GC-NEXT: ReturnType: NORESULT -; NO-GC-NEXT: ParamTypes: +; NO-GC-NEXT: ParamTypes: [] +; NO-GC-NEXT: ReturnTypes: [] ; NO-GC-NEXT: - Index: 1 -; NO-GC-NEXT: ReturnType: I64 ; NO-GC-NEXT: ParamTypes: ; NO-GC-NEXT: - I64 +; NO-GC-NEXT: ReturnTypes: +; NO-GC-NEXT: - I64 ; NO-GC-NEXT: - Index: 2 -; NO-GC-NEXT: ReturnType: I32 -; NO-GC-NEXT: ParamTypes: +; NO-GC-NEXT: ParamTypes: [] +; NO-GC-NEXT: ReturnTypes: +; NO-GC-NEXT: - I32 ; NO-GC-NEXT: - Index: 3 -; NO-GC-NEXT: ReturnType: I64 -; NO-GC-NEXT: ParamTypes: +; NO-GC-NEXT: ParamTypes: [] +; NO-GC-NEXT: ReturnTypes: +; NO-GC-NEXT: - I64 ; NO-GC-NEXT: - Type: FUNCTION ; NO-GC: - Type: GLOBAL @@ -125,7 +130,7 @@ entry: ; NO-GC-NEXT: Value: 456 ; NO-GC: - Type: DATA -; NO-GC-NEXT: Segments: +; NO-GC-NEXT: Segments: ; NO-GC-NEXT: - SectionOffset: 7 ; NO-GC-NEXT: InitFlags: 0 ; NO-GC-NEXT: Offset: diff --git a/lld/test/wasm/local-symbols.ll b/lld/test/wasm/local-symbols.ll index 58d0ddb..03e638c 100644 --- a/lld/test/wasm/local-symbols.ll +++ b/lld/test/wasm/local-symbols.ll @@ -27,11 +27,12 @@ entry: ; 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: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/locals-duplicate.test b/lld/test/wasm/locals-duplicate.test index 067d96f..61018f8 100644 --- a/lld/test/wasm/locals-duplicate.test +++ b/lld/test/wasm/locals-duplicate.test @@ -10,8 +10,9 @@ ; 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: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; CHECK-NEXT: 0, 0 ] @@ -220,8 +221,9 @@ ; RELOC-NEXT: - Type: TYPE ; RELOC-NEXT: Signatures: ; RELOC-NEXT: - Index: 0 -; RELOC-NEXT: ReturnType: I32 -; RELOC-NEXT: ParamTypes: +; RELOC-NEXT: ParamTypes: [] +; RELOC-NEXT: ReturnTypes: +; RELOC-NEXT: - I32 ; RELOC-NEXT: - Type: FUNCTION ; RELOC-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; RELOC-NEXT: 0, 0 ] diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll index 5ccaadf..c3d67b1 100644 --- a/lld/test/wasm/relocatable.ll +++ b/lld/test/wasm/relocatable.ll @@ -44,15 +44,16 @@ 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: I32 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Index: 2 -; CHECK-NEXT: ReturnType: NORESULT ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK-NEXT: - Module: env diff --git a/lld/test/wasm/stack-pointer.ll b/lld/test/wasm/stack-pointer.ll index 30501ba..4be1bf9 100644 --- a/lld/test/wasm/stack-pointer.ll +++ b/lld/test/wasm/stack-pointer.ll @@ -18,8 +18,9 @@ entry: ; 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/lld/test/wasm/undefined-weak-call.ll b/lld/test/wasm/undefined-weak-call.ll index badc77f..bcb7402 100644 --- a/lld/test/wasm/undefined-weak-call.ll +++ b/lld/test/wasm/undefined-weak-call.ll @@ -32,15 +32,16 @@ define i32 @callWeakFuncs() { ; CHECK-NEXT: - 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: NORESULT ; CHECK-NEXT: ParamTypes: ; CHECK-NEXT: - I32 +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 2 -; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 2 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/weak-alias-overide.ll b/lld/test/wasm/weak-alias-overide.ll index 913e53c..c65d73a 100644 --- a/lld/test/wasm/weak-alias-overide.ll +++ b/lld/test/wasm/weak-alias-overide.ll @@ -26,11 +26,12 @@ entry: ; 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: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1, 0, 0, 0, 0, 0 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/weak-alias.ll b/lld/test/wasm/weak-alias.ll index 6d79b70..7c38fa1 100644 --- a/lld/test/wasm/weak-alias.ll +++ b/lld/test/wasm/weak-alias.ll @@ -23,11 +23,12 @@ entry: ; CHECK-NEXT: - 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: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1 ] ; CHECK-NEXT: - Type: TABLE @@ -131,11 +132,12 @@ entry: ; RELOC-NEXT: - Type: TYPE ; RELOC-NEXT: Signatures: ; RELOC-NEXT: - Index: 0 -; RELOC-NEXT: ReturnType: NORESULT -; RELOC-NEXT: ParamTypes: +; RELOC-NEXT: ParamTypes: [] +; RELOC-NEXT: ReturnTypes: [] ; RELOC-NEXT: - Index: 1 -; RELOC-NEXT: ReturnType: I32 -; RELOC-NEXT: ParamTypes: +; RELOC-NEXT: ParamTypes: [] +; RELOC-NEXT: ReturnTypes: +; RELOC-NEXT: - I32 ; RELOC-NEXT: - Type: IMPORT ; RELOC-NEXT: Imports: ; RELOC-NEXT: - Module: env diff --git a/lld/test/wasm/weak-symbols.ll b/lld/test/wasm/weak-symbols.ll index 1ae28b3..70357b2 100644 --- a/lld/test/wasm/weak-symbols.ll +++ b/lld/test/wasm/weak-symbols.ll @@ -23,11 +23,12 @@ entry: ; CHECK-NEXT: - Type: TYPE ; CHECK-NEXT: Signatures: ; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: ReturnType: NORESULT -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: ReturnType: I32 -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: +; CHECK-NEXT: - I32 ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1 ] ; CHECK-NEXT: - Type: TABLE diff --git a/lld/test/wasm/weak-undefined.ll b/lld/test/wasm/weak-undefined.ll index 65f723d..8023eb7 100644 --- a/lld/test/wasm/weak-undefined.ll +++ b/lld/test/wasm/weak-undefined.ll @@ -34,11 +34,12 @@ entry: ; 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: - Index: 1 -; CHECK-NEXT: ReturnType: NORESULT -; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: ParamTypes: [] +; CHECK-NEXT: ReturnTypes: [] ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 0, 1 ] ; CHECK-NEXT: - Type: TABLE 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); -- 2.7.4