[lld] 393d0f7 - [WebAssembly] Allow multivalue signatures in object files

Thomas Lively via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 18 13:26:28 PDT 2019


Author: Thomas Lively
Date: 2019-10-18T20:27:30Z
New Revision: 393d0f799f8828e9d8002766a9e9db21797451df
    
URL: https://github.com/llvm/llvm-project/commit/393d0f799f8828e9d8002766a9e9db21797451df
DIFF: https://github.com/llvm/llvm-project/commit/393d0f799f8828e9d8002766a9e9db21797451df.diff
    
LOG: [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
    
Added: 
    
    
Modified: 
    lld/test/wasm/Inputs/globals.yaml
    lld/test/wasm/Inputs/undefined-globals.yaml
    lld/test/wasm/alias.ll
    lld/test/wasm/call-indirect.ll
    lld/test/wasm/event-section.ll
    lld/test/wasm/function-imports-first.ll
    lld/test/wasm/function-imports.ll
    lld/test/wasm/function-index.test
    lld/test/wasm/gc-sections.ll
    lld/test/wasm/local-symbols.ll
    lld/test/wasm/locals-duplicate.test
    lld/test/wasm/relocatable.ll
    lld/test/wasm/stack-pointer.ll
    lld/test/wasm/undefined-weak-call.ll
    lld/test/wasm/weak-alias-overide.ll
    lld/test/wasm/weak-alias.ll
    lld/test/wasm/weak-symbols.ll
    lld/test/wasm/weak-undefined.ll
    llvm/include/llvm/ObjectYAML/WasmYAML.h
    llvm/lib/Object/WasmObjectFile.cpp
    llvm/lib/ObjectYAML/WasmEmitter.cpp
    llvm/lib/ObjectYAML/WasmYAML.cpp
    llvm/test/CodeGen/WebAssembly/multivalue.ll
    llvm/test/CodeGen/WebAssembly/tailcall.ll
    llvm/test/MC/WebAssembly/assembler-binary.ll
    llvm/test/MC/WebAssembly/comdat.ll
    llvm/test/MC/WebAssembly/data-section.s
    llvm/test/MC/WebAssembly/event-section.ll
    llvm/test/MC/WebAssembly/external-func-address.ll
    llvm/test/MC/WebAssembly/libcall.ll
    llvm/test/MC/WebAssembly/reloc-pic.s
    llvm/test/MC/WebAssembly/type-index.s
    llvm/test/MC/WebAssembly/types.ll
    llvm/test/MC/WebAssembly/weak-alias.ll
    llvm/test/Object/wasm-duplicate-name.test
    llvm/test/Object/wasm-relocs-and-producers.yaml
    llvm/test/ObjectYAML/wasm/code_section.yaml
    llvm/test/ObjectYAML/wasm/event_section.yaml
    llvm/test/ObjectYAML/wasm/export_section.yaml
    llvm/test/ObjectYAML/wasm/function_section.yaml
    llvm/test/ObjectYAML/wasm/import_memory_shared.yaml
    llvm/test/ObjectYAML/wasm/import_section.yaml
    llvm/test/ObjectYAML/wasm/invalid_section_order.yaml
    llvm/test/ObjectYAML/wasm/linking_section.yaml
    llvm/test/ObjectYAML/wasm/name_section.yaml
    llvm/test/ObjectYAML/wasm/start_section.yaml
    llvm/test/ObjectYAML/wasm/type_section.yaml
    llvm/test/ObjectYAML/wasm/weak_symbols.yaml
    llvm/test/tools/llvm-nm/wasm/exports.yaml
    llvm/test/tools/llvm-nm/wasm/imports.yaml
    llvm/test/tools/llvm-nm/wasm/weak-symbols.yaml
    llvm/test/tools/llvm-readobj/wasm-imports.test
    llvm/tools/obj2yaml/wasm2yaml.cpp
    
Removed: 
    
    
    
################################################################################
diff  --git a/lld/test/wasm/Inputs/globals.yaml b/lld/test/wasm/Inputs/globals.yaml
index 6f632262785d..4f5d0bef6229 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 fd5a2361c9f5..41bc64356400 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 e20e648731cb..9927ba4c2225 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 b0bbc4aeb44c..2eb134a97bbb 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 1610287b4a3b..771a8cbdf6c2 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 04583bb54817..73c113438f01 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 a21f6b509e2f..4fb1c64c72bf 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 82f5d0cfb245..fbcde6cd8168 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 fbb4b2be17e2..a91bbecf3248 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 58d0ddbf70b9..03e638cdd881 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 067d96f61973..61018f8213e3 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 5ccaadf12465..c3d67b1d7b66 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 30501baf84ad..4be1bf9503d7 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 badc77f54f01..bcb740209a95 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 913e53cba877..c65d73a94405 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 6d79b7024997..7c38fa185990 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 1ae28b350bd3..70357b23101d 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 65f723de0421..8023eb7d368b 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 2411dc7ac17d..15a8cc215020 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<ValueType> ParamTypes;
-  ValueType ReturnType;
+  std::vector<ValueType> ReturnTypes;
 };
 
 struct SymbolInfo {

diff  --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index 470283efb294..014b403556df 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<GenericBinaryError>(
-            "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 42c57d42ad78..debc040587a8 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 04f569479592..232d5122004a 100644
--- a/llvm/lib/ObjectYAML/WasmYAML.cpp
+++ b/llvm/lib/ObjectYAML/WasmYAML.cpp
@@ -295,8 +295,8 @@ void ScalarEnumerationTraits<WasmYAML::SectionType>::enumeration(
 void MappingTraits<WasmYAML::Signature>::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<WasmYAML::Table>::mapping(IO &IO, WasmYAML::Table &Table) {
@@ -560,7 +560,6 @@ void ScalarEnumerationTraits<WasmYAML::ValueType>::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 877851f6a362..ee32852ef579 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 a277b4f7bc20..f4d4499bcef7 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 3683d63e435b..35fa4111117b 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 ecc5e5be27a4..e50f5bf1cc96 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 70d9de2bb934..52e60f6d4a7d 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 2b5b5bba9fe6..b662c290d3c7 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 9d3b33592e0b..9c16c02a4a0f 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 b2253583898f..9f8abba70c0e 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 2b7ef54a3a5b..626f8d993e3c 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 707f6aa98943..9c77434589f5 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 6eeeef2f5311..c049d3ce0e82 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 20a27edd343a..c9c707e69e2a 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 1bf207780280..666291c95240 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 01ad2bb89fbf..2bdc12e4619d 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 0171938a6a30..dad75e081ea7 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 91683bd3da4c..5c64cc815529 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 af72f1368110..4b3487cec5a5 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 d31614452952..8bfe4fa7f58a 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 849bdc5314d1..b6ca9fa44f96 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 90de6f0fec7f..2df2f3928ecb 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 4e3581ec5ebe..71767576979b 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 39827410b0ec..2e3da8791c7b 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 f7a489d75426..a22b25771e15 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 5d57c1b7a051..754adea5a18b 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 a87949fed06b..beb3a16e766a 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 fb85b829a371..82bc70c244f4 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 eddcbc22c1f1..15c98ae2bf4a 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 2ea0d0f13fe3..37b0ce486c35 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 a81559402dc6..d8e4cece0fef 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 fd1e5c8e641d..6eb19673d99b 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 7a540974d500..ea7a1e983bd4 100644
--- a/llvm/tools/obj2yaml/wasm2yaml.cpp
+++ b/llvm/tools/obj2yaml/wasm2yaml.cpp
@@ -198,13 +198,10 @@ ErrorOr<WasmYAML::Object *> 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<uint32_t>(FunctionSig.Returns[0]);
         for (const auto &ParamType : FunctionSig.Params)
           Sig.ParamTypes.emplace_back(static_cast<uint32_t>(ParamType));
+        for (const auto &ReturnType : FunctionSig.Returns)
+          Sig.ReturnTypes.emplace_back(static_cast<uint32_t>(ReturnType));
         TypeSec->Signatures.push_back(Sig);
       }
       S = std::move(TypeSec);

    
        


More information about the llvm-commits mailing list