From 85c8ee18394b0813d1d5a3992e3eb2df8657af23 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Fri, 18 Oct 2019 20:27:30 +0000 Subject: [WebAssembly] Allow multivalue signatures in object files Summary: Also changes the wasm YAML format to reflect the possibility of having multiple return types and to put the returns after the params for consistency with the binary encoding. Reviewers: aheejin, sbc100 Subscribers: dschuff, jgravelle-google, hiraditya, sunfish, arphaman, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69156 git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@375283 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/wasm/Inputs/globals.yaml | 3 ++- test/wasm/Inputs/undefined-globals.yaml | 3 ++- test/wasm/alias.ll | 2 +- test/wasm/call-indirect.ll | 13 +++++++----- test/wasm/event-section.ll | 4 ++-- test/wasm/function-imports-first.ll | 7 ++++--- test/wasm/function-imports.ll | 5 +++-- test/wasm/function-index.test | 6 ++++-- test/wasm/gc-sections.ll | 35 +++++++++++++++++++-------------- test/wasm/local-symbols.ll | 5 +++-- test/wasm/locals-duplicate.test | 10 ++++++---- test/wasm/relocatable.ll | 7 ++++--- test/wasm/stack-pointer.ll | 3 ++- test/wasm/undefined-weak-call.ll | 7 ++++--- test/wasm/weak-alias-overide.ll | 9 +++++---- test/wasm/weak-alias.ll | 16 ++++++++------- test/wasm/weak-symbols.ll | 9 +++++---- test/wasm/weak-undefined.ll | 9 +++++---- 18 files changed, 89 insertions(+), 64 deletions(-) diff --git a/test/wasm/Inputs/globals.yaml b/test/wasm/Inputs/globals.yaml index 6f6322627..4f5d0bef6 100644 --- a/test/wasm/Inputs/globals.yaml +++ b/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/test/wasm/Inputs/undefined-globals.yaml b/test/wasm/Inputs/undefined-globals.yaml index fd5a2361c..41bc64356 100644 --- a/test/wasm/Inputs/undefined-globals.yaml +++ b/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/test/wasm/alias.ll b/test/wasm/alias.ll index e20e64873..9927ba4c2 100644 --- a/test/wasm/alias.ll +++ b/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/test/wasm/call-indirect.ll b/test/wasm/call-indirect.ll index b0bbc4aeb..2eb134a97 100644 --- a/test/wasm/call-indirect.ll +++ b/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/test/wasm/event-section.ll b/test/wasm/event-section.ll index 1610287b4..771a8cbdf 100644 --- a/test/wasm/event-section.ll +++ b/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/test/wasm/function-imports-first.ll b/test/wasm/function-imports-first.ll index 04583bb54..73c113438 100644 --- a/test/wasm/function-imports-first.ll +++ b/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/test/wasm/function-imports.ll b/test/wasm/function-imports.ll index a21f6b509..4fb1c64c7 100644 --- a/test/wasm/function-imports.ll +++ b/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/test/wasm/function-index.test b/test/wasm/function-index.test index 82f5d0cfb..fbcde6cd8 100644 --- a/test/wasm/function-index.test +++ b/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/test/wasm/gc-sections.ll b/test/wasm/gc-sections.ll index fbb4b2be1..a91bbecf3 100644 --- a/test/wasm/gc-sections.ll +++ b/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/test/wasm/local-symbols.ll b/test/wasm/local-symbols.ll index 58d0ddbf7..03e638cdd 100644 --- a/test/wasm/local-symbols.ll +++ b/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/test/wasm/locals-duplicate.test b/test/wasm/locals-duplicate.test index 067d96f61..61018f821 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 5ccaadf12..c3d67b1d7 100644 --- a/test/wasm/relocatable.ll +++ b/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/test/wasm/stack-pointer.ll b/test/wasm/stack-pointer.ll index 30501baf8..4be1bf950 100644 --- a/test/wasm/stack-pointer.ll +++ b/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/test/wasm/undefined-weak-call.ll b/test/wasm/undefined-weak-call.ll index badc77f54..bcb740209 100644 --- a/test/wasm/undefined-weak-call.ll +++ b/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/test/wasm/weak-alias-overide.ll b/test/wasm/weak-alias-overide.ll index 913e53cba..c65d73a94 100644 --- a/test/wasm/weak-alias-overide.ll +++ b/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/test/wasm/weak-alias.ll b/test/wasm/weak-alias.ll index 6d79b7024..7c38fa185 100644 --- a/test/wasm/weak-alias.ll +++ b/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/test/wasm/weak-symbols.ll b/test/wasm/weak-symbols.ll index 1ae28b350..70357b231 100644 --- a/test/wasm/weak-symbols.ll +++ b/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/test/wasm/weak-undefined.ll b/test/wasm/weak-undefined.ll index 65f723de0..8023eb7d3 100644 --- a/test/wasm/weak-undefined.ll +++ b/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 -- cgit v1.2.3