Skip to content

Commit

Permalink
[lld][WebAssembly] Emit all return types of multivalue functions
Browse files Browse the repository at this point in the history
We previously were incorrectly emitting only the first result type.

Differential Revision: https://reviews.llvm.org/D85783
  • Loading branch information
Samuel Kostial authored and tlively committed Aug 12, 2020
1 parent e2040d3 commit 304264e
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 2 deletions.
80 changes: 80 additions & 0 deletions lld/test/wasm/multivalue-return-func-types.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s
# RUN: wasm-ld %t.o -o %t.wasm
# RUN: obj2yaml %t.wasm | FileCheck %s

.globl _start
.globl fn_i32
.globl fn_i32_i32
.globl fn_i32_i64
.globl fn_i64_f64_i32_f32


_start:
.functype _start () -> ()
call fn_i32
drop
call fn_i32_i32
drop
drop
call fn_i32_i64
drop
drop
call fn_i64_f64_i32_f32
drop
drop
drop
drop
end_function

fn_i32:
.functype fn_i32 () -> (i32)
i32.const 1
end_function

fn_i32_i32:
.functype fn_i32_i32 () -> (i32, i32)
i32.const 1
i32.const 1
end_function

fn_i32_i64:
.functype fn_i32_i64 () -> (i32, i64)
i32.const 1
i64.const 1
end_function

fn_i64_f64_i32_f32:
.functype fn_i64_f64_i32_f32 () -> (i64, f64, i32, f32)
i64.const 1
f64.const 1.0
i32.const 1
f32.const 1.0
end_function


# CHECK: - Type: TYPE
# CHECK-NEXT: Signatures:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: ParamTypes: []
# CHECK-NEXT: ReturnTypes: []
# CHECK-NEXT: - Index: 1
# CHECK-NEXT: ParamTypes: []
# CHECK-NEXT: ReturnTypes:
# CHECK-NEXT: - I32
# CHECK-NEXT: - Index: 2
# CHECK-NEXT: ParamTypes: []
# CHECK-NEXT: ReturnTypes:
# CHECK-NEXT: - I32
# CHECK-NEXT: - I32
# CHECK-NEXT: - Index: 3
# CHECK-NEXT: ParamTypes: []
# CHECK-NEXT: ReturnTypes:
# CHECK-NEXT: - I32
# CHECK-NEXT: - I64
# CHECK-NEXT: - Index: 4
# CHECK-NEXT: ParamTypes: []
# CHECK-NEXT: ReturnTypes:
# CHECK-NEXT: - I64
# CHECK-NEXT: - F64
# CHECK-NEXT: - I32
# CHECK-NEXT: - F32
4 changes: 2 additions & 2 deletions lld/wasm/WriterUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ void writeSig(raw_ostream &os, const WasmSignature &sig) {
writeValueType(os, paramType, "param type");
}
writeUleb128(os, sig.Returns.size(), "result Count");
if (sig.Returns.size()) {
writeValueType(os, sig.Returns[0], "result type");
for (ValType returnType : sig.Returns) {
writeValueType(os, returnType, "result type");
}
}

Expand Down

0 comments on commit 304264e

Please sign in to comment.