1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue | FileCheck %s
2
3; Test that the multivalue returns, function types, and block types
4; work as expected.
5
6target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
7target triple = "wasm32-unknown-unknown"
8
9%pair = type { i32, i32 }
10%packed_pair = type <{ i32, i32 }>
11
12; CHECK-LABEL: pair_ident:
13; CHECK-NEXT: .functype pair_ident (i32, i32) -> (i32, i32)
14; CHECK-NEXT: return $0, $1{{$}}
15define %pair @pair_ident(%pair %p) {
16  ret %pair %p
17}
18
19; CHECK-LABEL: packed_pair_ident:
20; CHECK-NEXT: .functype packed_pair_ident (i32, i32) -> (i32, i32)
21; CHECK-NEXT: return $0, $1{{$}}
22define %packed_pair @packed_pair_ident(%packed_pair %p) {
23  ret %packed_pair %p
24}
25
26; CHECK-LABEL: minimal_loop:
27; CHECK-NEXT: .functype minimal_loop (i32) -> (i32, i64)
28; CHECK-NEXT: .LBB{{[0-9]+}}_1:
29; CHECK-NEXT: loop () -> (i32, i64)
30; CHECK-NEXT: br 0{{$}}
31; CHECK-NEXT: .LBB{{[0-9]+}}_2:
32; CHECK-NEXT: end_loop{{$}}
33define {i32, i64} @minimal_loop(i32* %p) {
34entry:
35  br label %loop
36loop:
37  br label %loop
38}
39
40; CHECK-LABEL: .section .custom_section.target_features
41; CHECK-NEXT: .int8 1
42; CHECK-NEXT: .int8 43
43; CHECK-NEXT: .int8 10
44; CHECK-NEXT: .ascii "multivalue"
45