forked from OSchip/llvm-project
[lld][WebAssembly] Emit all return types of multivalue functions
We previously were incorrectly emitting only the first result type. Differential Revision: https://reviews.llvm.org/D85783
This commit is contained in:
parent
e2040d38a1
commit
304264e73d
|
@ -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
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue