diff options
| author | Thomas Lively <tlively@google.com> | 2019-10-15 18:28:22 +0000 |
|---|---|---|
| committer | Thomas Lively <tlively@google.com> | 2019-10-15 18:28:22 +0000 |
| commit | 2cb27072cefb11d5018735a3b70a903dc1d319ac (patch) | |
| tree | b007b3e4e319c5caf584201dceb06b0852aee65b /llvm/test/CodeGen/WebAssembly | |
| parent | 0650355c09ab8e6605ae37b818270a7a7c8ce2c7 (diff) | |
| download | bcm5719-llvm-2cb27072cefb11d5018735a3b70a903dc1d319ac.tar.gz bcm5719-llvm-2cb27072cefb11d5018735a3b70a903dc1d319ac.zip | |
[WebAssembly] Allow multivalue types in block signature operands
Summary:
Renames `ExprType` to the more apt `BlockType` and adds a variant for
multivalue blocks. Currently non-void blocks are only generated at the
end of functions where the block return type needs to agree with the
function return type, and that remains true for multivalue
blocks. That invariant means that the actual signature does not need
to be stored in the block signature `MachineOperand` because it can be
inferred by `WebAssemblyMCInstLower` from the return type of the
parent function. `WebAssemblyMCInstLower` continues to lower block
signature operands to immediates when possible but lowers multivalue
signatures to function type symbols. The AsmParser and Disassembler
are updated to handle multivalue block types as well.
Reviewers: aheejin, dschuff, aardappel
Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68889
llvm-svn: 374933
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly')
| -rw-r--r-- | llvm/test/CodeGen/WebAssembly/multivalue.ll | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/multivalue.ll b/llvm/test/CodeGen/WebAssembly/multivalue.ll index 483e45b687a..877851f6a36 100644 --- a/llvm/test/CodeGen/WebAssembly/multivalue.ll +++ b/llvm/test/CodeGen/WebAssembly/multivalue.ll @@ -1,7 +1,7 @@ ; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue | FileCheck %s -; Test that the multivalue attribute is accepted -; TODO(tlively): implement multivalue +; Test that the multivalue returns, function types, and block types +; work as expected. target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" @@ -10,19 +10,33 @@ target triple = "wasm32-unknown-unknown" %packed_pair = type <{ i32, i32 }> ; CHECK-LABEL: pair_ident: -; CHECK-NEXT: pair_ident (i32, i32) -> (i32, i32) +; CHECK-NEXT: .functype pair_ident (i32, i32) -> (i32, i32) ; CHECK-NEXT: return $0, $1{{$}} define %pair @pair_ident(%pair %p) { ret %pair %p } ; CHECK-LABEL: packed_pair_ident: -; CHECK-NEXT: packed_pair_ident (i32, i32) -> (i32, i32) -; CHECK-nEXT: return $0, $1{{$}} +; CHECK-NEXT: .functype packed_pair_ident (i32, i32) -> (i32, i32) +; CHECK-NEXT: return $0, $1{{$}} define %packed_pair @packed_pair_ident(%packed_pair %p) { ret %packed_pair %p } +; CHECK-LABEL: minimal_loop: +; CHECK-NEXT: .functype minimal_loop (i32) -> (i32, i64) +; CHECK-NEXT: .LBB{{[0-9]+}}_1: +; CHECK-NEXT: loop () -> (i32, i64) +; CHECK-NEXT: br 0{{$}} +; CHECK-NEXT: .LBB{{[0-9]+}}_2: +; CHECK-NEXT: end_loop{{$}} +define {i32, i64} @minimal_loop(i32* %p) { +entry: + br label %loop +loop: + br label %loop +} + ; CHECK-LABEL: .section .custom_section.target_features ; CHECK-NEXT: .int8 1 ; CHECK-NEXT: .int8 43 |

