[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
git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@375283 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/wasm/Inputs/globals.yaml b/test/wasm/Inputs/globals.yaml
index 6f63226..4f5d0be 100644
--- a/test/wasm/Inputs/globals.yaml
+++ b/test/wasm/Inputs/globals.yaml
@@ -5,8 +5,9 @@
- Type: TYPE
Signatures:
- Index: 0
- ReturnType: I64
ParamTypes:
+ ReturnTypes:
+ - I64
- Type: FUNCTION
FunctionTypes: [ 0 ]
- Type: GLOBAL
diff --git a/test/wasm/Inputs/undefined-globals.yaml b/test/wasm/Inputs/undefined-globals.yaml
index fd5a236..41bc643 100644
--- a/test/wasm/Inputs/undefined-globals.yaml
+++ b/test/wasm/Inputs/undefined-globals.yaml
@@ -5,8 +5,9 @@
- Type: TYPE
Signatures:
- Index: 0
- ReturnType: I64
ParamTypes:
+ ReturnTypes:
+ - I64
- Type: IMPORT
Imports:
- Module: env
diff --git a/test/wasm/alias.ll b/test/wasm/alias.ll
index e20e648..9927ba4 100644
--- a/test/wasm/alias.ll
+++ b/test/wasm/alias.ll
@@ -19,8 +19,8 @@
; 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/test/wasm/call-indirect.ll b/test/wasm/call-indirect.ll
index b0bbc4a..2eb134a 100644
--- a/test/wasm/call-indirect.ll
+++ b/test/wasm/call-indirect.ll
@@ -40,22 +40,25 @@
; 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/test/wasm/event-section.ll b/test/wasm/event-section.ll
index 1610287..771a8cb 100644
--- a/test/wasm/event-section.ll
+++ b/test/wasm/event-section.ll
@@ -20,12 +20,12 @@
; 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/test/wasm/function-imports-first.ll b/test/wasm/function-imports-first.ll
index 04583bb..73c1134 100644
--- a/test/wasm/function-imports-first.ll
+++ b/test/wasm/function-imports-first.ll
@@ -17,12 +17,13 @@
; 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/test/wasm/function-imports.ll b/test/wasm/function-imports.ll
index a21f6b5..4fb1c64 100644
--- a/test/wasm/function-imports.ll
+++ b/test/wasm/function-imports.ll
@@ -18,12 +18,13 @@
; 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/test/wasm/function-index.test b/test/wasm/function-index.test
index 82f5d0c..fbcde6c 100644
--- a/test/wasm/function-index.test
+++ b/test/wasm/function-index.test
@@ -7,12 +7,14 @@
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/test/wasm/gc-sections.ll b/test/wasm/gc-sections.ll
index fbb4b2b..a91bbec 100644
--- a/test/wasm/gc-sections.ll
+++ b/test/wasm/gc-sections.ll
@@ -38,14 +38,16 @@
; 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 @@
; 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 @@
; 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 @@
; 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/test/wasm/local-symbols.ll b/test/wasm/local-symbols.ll
index 58d0ddb..03e638c 100644
--- a/test/wasm/local-symbols.ll
+++ b/test/wasm/local-symbols.ll
@@ -27,11 +27,12 @@
; 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/test/wasm/locals-duplicate.test b/test/wasm/locals-duplicate.test
index 067d96f..61018f8 100644
--- a/test/wasm/locals-duplicate.test
+++ b/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/test/wasm/relocatable.ll b/test/wasm/relocatable.ll
index 5ccaadf..c3d67b1 100644
--- a/test/wasm/relocatable.ll
+++ b/test/wasm/relocatable.ll
@@ -44,15 +44,16 @@
; 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/test/wasm/stack-pointer.ll b/test/wasm/stack-pointer.ll
index 30501ba..4be1bf9 100644
--- a/test/wasm/stack-pointer.ll
+++ b/test/wasm/stack-pointer.ll
@@ -18,8 +18,9 @@
; 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/test/wasm/undefined-weak-call.ll b/test/wasm/undefined-weak-call.ll
index badc77f..bcb7402 100644
--- a/test/wasm/undefined-weak-call.ll
+++ b/test/wasm/undefined-weak-call.ll
@@ -32,15 +32,16 @@
; 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/test/wasm/weak-alias-overide.ll b/test/wasm/weak-alias-overide.ll
index 913e53c..c65d73a 100644
--- a/test/wasm/weak-alias-overide.ll
+++ b/test/wasm/weak-alias-overide.ll
@@ -26,11 +26,12 @@
; 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/test/wasm/weak-alias.ll b/test/wasm/weak-alias.ll
index 6d79b70..7c38fa1 100644
--- a/test/wasm/weak-alias.ll
+++ b/test/wasm/weak-alias.ll
@@ -23,11 +23,12 @@
; 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 @@
; 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/test/wasm/weak-symbols.ll b/test/wasm/weak-symbols.ll
index 1ae28b3..70357b2 100644
--- a/test/wasm/weak-symbols.ll
+++ b/test/wasm/weak-symbols.ll
@@ -23,11 +23,12 @@
; 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/test/wasm/weak-undefined.ll b/test/wasm/weak-undefined.ll
index 65f723d..8023eb7 100644
--- a/test/wasm/weak-undefined.ll
+++ b/test/wasm/weak-undefined.ll
@@ -34,11 +34,12 @@
; 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