summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2023-09-14 15:34:23 -0700
committerGitHub <noreply@github.com>2023-09-14 15:34:23 -0700
commit6dde22cd3a65bb4adee8ff9f6107093cdf42b346 (patch)
tree72297bbf3466833399df590477894d02be08588d /test
parent3e8a9dacf6c65c29054094ce9f1d34ae8480df65 (diff)
downloadbinaryen-6dde22cd3a65bb4adee8ff9f6107093cdf42b346.tar.gz
binaryen-6dde22cd3a65bb4adee8ff9f6107093cdf42b346.tar.bz2
binaryen-6dde22cd3a65bb4adee8ff9f6107093cdf42b346.zip
[NFC] Port the multivalue round tripping test to lit (#5942)
Diffstat (limited to 'test')
-rw-r--r--test/lit/multivalue.wast670
-rw-r--r--test/multivalue.wast167
-rw-r--r--test/multivalue.wast.from-wast172
-rw-r--r--test/multivalue.wast.fromBinary476
-rw-r--r--test/multivalue.wast.fromBinary.noDebugInfo476
5 files changed, 670 insertions, 1291 deletions
diff --git a/test/lit/multivalue.wast b/test/lit/multivalue.wast
new file mode 100644
index 000000000..f75182ca4
--- /dev/null
+++ b/test/lit/multivalue.wast
@@ -0,0 +1,670 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
+;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s
+
+;; Test basic lowering of tuple.make, tuple.extract, and tuple variables and
+;; that they round trip through the binary format correctly.
+
+(module
+ ;; CHECK: (import "env" "pair" (func $pair (type $0) (result i32 i64)))
+ (import "env" "pair" (func $pair (result i32 i64)))
+ ;; CHECK: (global $g1 (mut i32) (i32.const 0))
+ (global $g1 (mut (i32 i64)) (tuple.make (i32.const 0) (i64.const 0)))
+ ;; CHECK: (global $g2 (mut i64) (i64.const 0))
+ (global $g2 (i32 i64) (tuple.make (i32.const 0) (i64.const 0)))
+
+ ;; CHECK: (func $triple (type $5) (result i32 i64 f32)
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 7)
+ ;; CHECK-NEXT: (f32.const 13)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $triple (result i32 i64 f32)
+ (tuple.make
+ (i32.const 42)
+ (i64.const 7)
+ (f32.const 13)
+ )
+ )
+
+ ;; CHECK: (func $get-first (type $6) (result i32)
+ ;; CHECK-NEXT: (local $0 (i32 i64 f32))
+ ;; CHECK-NEXT: (local $1 i64)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (call $triple)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (tuple.extract 2
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $get-first (result i32)
+ (tuple.extract 0
+ (call $triple)
+ )
+ )
+
+ ;; CHECK: (func $get-second (type $3) (result i64)
+ ;; CHECK-NEXT: (local $0 i64)
+ ;; CHECK-NEXT: (local $1 (i32 i64 f32))
+ ;; CHECK-NEXT: (local $2 i64)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (call $triple)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (tuple.extract 2
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ (func $get-second (result i64)
+ (tuple.extract 1
+ (call $triple)
+ )
+ )
+
+ ;; CHECK: (func $get-third (type $7) (result f32)
+ ;; CHECK-NEXT: (local $0 f32)
+ ;; CHECK-NEXT: (local $1 (i32 i64 f32))
+ ;; CHECK-NEXT: (local $2 i64)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (call $triple)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (tuple.extract 2
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ (func $get-third (result f32)
+ (tuple.extract 2
+ (call $triple)
+ )
+ )
+
+ ;; CHECK: (func $reverse (type $4) (result f32 i64 i32)
+ ;; CHECK-NEXT: (local $x i32)
+ ;; CHECK-NEXT: (local $1 i64)
+ ;; CHECK-NEXT: (local $2 i64)
+ ;; CHECK-NEXT: (local $3 f32)
+ ;; CHECK-NEXT: (local $4 f32)
+ ;; CHECK-NEXT: (local $5 (i32 i64 f32))
+ ;; CHECK-NEXT: (local $6 i64)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i64)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (local $10 i64)
+ ;; CHECK-NEXT: (local $11 i32)
+ ;; CHECK-NEXT: (local $12 i64)
+ ;; CHECK-NEXT: (local $13 i32)
+ ;; CHECK-NEXT: (local $14 f32)
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (call $triple)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (tuple.extract 2
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (block (result f32)
+ ;; CHECK-NEXT: (local.set $14
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $11
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $10
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $14)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $13
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i64)
+ ;; CHECK-NEXT: (local.set $12
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $12)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $13)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $reverse (result f32 i64 i32)
+ (local $x (i32 i64 f32))
+ (local.set $x
+ (call $triple)
+ )
+ (tuple.make
+ (tuple.extract 2
+ (local.get $x)
+ )
+ (tuple.extract 1
+ (local.get $x)
+ )
+ (tuple.extract 0
+ (local.get $x)
+ )
+ )
+ )
+
+ ;; CHECK: (func $unreachable (type $3) (result i64)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (i64.const 7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ (func $unreachable (result i64)
+ (tuple.extract 1
+ (tuple.make
+ (i32.const 42)
+ (i64.const 7)
+ (unreachable)
+ )
+ )
+ )
+
+ ;; Test multivalue globals
+ ;; CHECK: (func $global (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (local $0 i64)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (global.set $g1
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (global.set $g2
+ ;; CHECK-NEXT: (i64.const 7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (global.get $g1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (global.get $g2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (global.get $global$2)
+ ;; CHECK-NEXT: (global.get $global$3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $global (result i32 i64)
+ (global.set $g1
+ (tuple.make
+ (i32.const 42)
+ (i64.const 7)
+ )
+ )
+ (drop
+ (tuple.extract 1
+ (global.get $g1)
+ )
+ )
+ (global.get $g2)
+ )
+
+ ;; Test lowering of multivalue drops
+ ;; CHECK: (func $drop-call (type $1)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (call $pair)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $drop-call
+ (drop
+ (call $pair)
+ )
+ )
+
+ ;; CHECK: (func $drop-tuple-make (type $1)
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $drop-tuple-make
+ (drop
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+
+ ;; CHECK: (func $drop-block (type $1)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $label$1 (result i32 i64)
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $drop-block
+ (drop
+ (block $block (result i32 i64)
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+ )
+
+ ;; Test multivalue control structures
+ ;; CHECK: (func $mv-return (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-return (result i32 i64)
+ (return
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-return-in-block (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-return-in-block (result i32 i64)
+ (block (result i32 i64)
+ (return
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-block-break (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $label$1 (result i32 i64)
+ ;; CHECK-NEXT: (br $label$1
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-block-break (result i32 i64)
+ (block $l (result i32 i64)
+ (br $l
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-block-br-if (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local $1 (i32 i64))
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $label$1 (result i32 i64)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (br_if $label$1
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-block-br-if (result i32 i64)
+ (block $l (result i32 i64)
+ (br_if $l
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ (i32.const 1)
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-if (type $2) (result i32 i64 externref)
+ ;; CHECK-NEXT: (local $0 (i32 i64 externref))
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (if (result i32 i64 externref)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: (ref.null noextern)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: (ref.null noextern)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 2
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-if (result i32 i64 externref)
+ (if (result i32 i64 externref)
+ (i32.const 1)
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ (ref.null extern)
+ )
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ (ref.null extern)
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-loop (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (loop $label$1 (result i32 i64)
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-loop (result i32 i64)
+ (loop (result i32 i64)
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ )
+ )
+
+ ;; CHECK: (func $mv-switch (type $0) (result i32 i64)
+ ;; CHECK-NEXT: (local $0 (i32 i64))
+ ;; CHECK-NEXT: (local $1 (i32 i64))
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $label$1 (result i32 i64)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $label$2 (result i32 i64)
+ ;; CHECK-NEXT: (br_table $label$1 $label$2
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.const 42)
+ ;; CHECK-NEXT: (i64.const 42)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $mv-switch (result i32 i64)
+ (block $a (result i32 i64)
+ (block $b (result i32 i64)
+ (br_table $a $b
+ (tuple.make
+ (i32.const 42)
+ (i64.const 42)
+ )
+ (i32.const 0)
+ )
+ )
+ )
+ )
+)
diff --git a/test/multivalue.wast b/test/multivalue.wast
deleted file mode 100644
index 347278b10..000000000
--- a/test/multivalue.wast
+++ /dev/null
@@ -1,167 +0,0 @@
-(module
- (import "env" "pair" (func $pair (result i32 i64)))
- (global $g1 (mut (i32 i64)) (tuple.make (i32.const 0) (i64.const 0)))
- (global $g2 (i32 i64) (tuple.make (i32.const 0) (i64.const 0)))
- ;; Test basic lowering of tuple.make, tuple.extract, and tuple variables
- (func $triple (result i32 i64 f32)
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (f32.const 13)
- )
- )
- (func $get-first (result i32)
- (tuple.extract 0
- (call $triple)
- )
- )
- (func $get-second (result i64)
- (tuple.extract 1
- (call $triple)
- )
- )
- (func $get-third (result f32)
- (tuple.extract 2
- (call $triple)
- )
- )
- (func $reverse (result f32 i64 i32)
- (local $x (i32 i64 f32))
- (local.set $x
- (call $triple)
- )
- (tuple.make
- (tuple.extract 2
- (local.get $x)
- )
- (tuple.extract 1
- (local.get $x)
- )
- (tuple.extract 0
- (local.get $x)
- )
- )
- )
- (func $unreachable (result i64)
- (tuple.extract 1
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (unreachable)
- )
- )
- )
-
- ;; Test multivalue globals
- (func $global (result i32 i64)
- (global.set $g1
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- )
- )
- (global.get $g2)
- )
-
- ;; Test lowering of multivalue drops
- (func $drop-call
- (drop
- (call $pair)
- )
- )
- (func $drop-tuple-make
- (drop
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $drop-block
- (drop
- (block $block (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
-
- ;; Test multivalue control structures
- (func $mv-return (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-return-in-block (result i32 i64)
- (block (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (func $mv-block-break (result i32 i64)
- (block $l (result i32 i64)
- (br $l
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (func $mv-block-br-if (result i32 i64)
- (block $l (result i32 i64)
- (br_if $l
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 1)
- )
- )
- )
- (func $mv-if (result i32 i64 externref)
- (if (result i32 i64 externref)
- (i32.const 1)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null extern)
- )
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null extern)
- )
- )
- )
- (func $mv-loop (result i32 i64)
- (loop (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-switch (result i32 i64)
- (block $a (result i32 i64)
- (block $b (result i32 i64)
- (br_table $a $b
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 0)
- )
- )
- )
- )
-)
diff --git a/test/multivalue.wast.from-wast b/test/multivalue.wast.from-wast
deleted file mode 100644
index 40158656a..000000000
--- a/test/multivalue.wast.from-wast
+++ /dev/null
@@ -1,172 +0,0 @@
-(module
- (type $0 (func (result i32 i64)))
- (type $1 (func))
- (type $2 (func (result i64)))
- (type $3 (func (result f32 i64 i32)))
- (type $4 (func (result i32 i64 externref)))
- (type $5 (func (result i32 i64 f32)))
- (type $6 (func (result i32)))
- (type $7 (func (result f32)))
- (import "env" "pair" (func $pair (type $0) (result i32 i64)))
- (global $g1 (mut (i32 i64)) (tuple.make
- (i32.const 0)
- (i64.const 0)
- ))
- (global $g2 (i32 i64) (tuple.make
- (i32.const 0)
- (i64.const 0)
- ))
- (func $triple (type $5) (result i32 i64 f32)
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (f32.const 13)
- )
- )
- (func $get-first (type $6) (result i32)
- (tuple.extract 0
- (call $triple)
- )
- )
- (func $get-second (type $2) (result i64)
- (tuple.extract 1
- (call $triple)
- )
- )
- (func $get-third (type $7) (result f32)
- (tuple.extract 2
- (call $triple)
- )
- )
- (func $reverse (type $3) (result f32 i64 i32)
- (local $x (i32 i64 f32))
- (local.set $x
- (call $triple)
- )
- (tuple.make
- (tuple.extract 2
- (local.get $x)
- )
- (tuple.extract 1
- (local.get $x)
- )
- (tuple.extract 0
- (local.get $x)
- )
- )
- )
- (func $unreachable (type $2) (result i64)
- (tuple.extract 1
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (unreachable)
- )
- )
- )
- (func $global (type $0) (result i32 i64)
- (global.set $g1
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- )
- )
- (global.get $g2)
- )
- (func $drop-call (type $1)
- (drop
- (call $pair)
- )
- )
- (func $drop-tuple-make (type $1)
- (drop
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $drop-block (type $1)
- (drop
- (block $block (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (func $mv-return (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-return-in-block (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-block-break (type $0) (result i32 i64)
- (block $l (result i32 i64)
- (br $l
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (func $mv-block-br-if (type $0) (result i32 i64)
- (block $l (result i32 i64)
- (br_if $l
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 1)
- )
- )
- )
- (func $mv-if (type $4) (result i32 i64 externref)
- (if (result i32 i64 externref)
- (i32.const 1)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- )
- )
- (func $mv-loop (type $0) (result i32 i64)
- (loop $loop-in (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-switch (type $0) (result i32 i64)
- (block $a (result i32 i64)
- (block $b (result i32 i64)
- (br_table $a $b
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 0)
- )
- )
- )
- )
-)
diff --git a/test/multivalue.wast.fromBinary b/test/multivalue.wast.fromBinary
deleted file mode 100644
index 5d81b49c5..000000000
--- a/test/multivalue.wast.fromBinary
+++ /dev/null
@@ -1,476 +0,0 @@
-(module
- (type $0 (func (result i32 i64)))
- (type $1 (func))
- (type $2 (func (result i32 i64 externref)))
- (type $3 (func (result i64)))
- (type $4 (func (result f32 i64 i32)))
- (type $5 (func (result i32 i64 f32)))
- (type $6 (func (result i32)))
- (type $7 (func (result f32)))
- (import "env" "pair" (func $pair (type $0) (result i32 i64)))
- (global $g1 (mut i32) (i32.const 0))
- (global $g2 (mut i64) (i64.const 0))
- (global $global$2 i32 (i32.const 0))
- (global $global$3 i64 (i64.const 0))
- (func $triple (type $5) (result i32 i64 f32)
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (f32.const 13)
- )
- )
- (func $get-first (type $6) (result i32)
- (local $0 (i32 i64 f32))
- (local $1 i64)
- (local $2 i32)
- (local.set $0
- (call $triple)
- )
- (block (result i32)
- (local.set $2
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (block (result i64)
- (local.set $1
- (tuple.extract 1
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 2
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (func $get-second (type $3) (result i64)
- (local $0 i64)
- (local $1 (i32 i64 f32))
- (local $2 i64)
- (local $3 i32)
- (local.set $1
- (call $triple)
- )
- (drop
- (block (result i32)
- (local.set $3
- (tuple.extract 0
- (local.get $1)
- )
- )
- (local.set $0
- (block (result i64)
- (local.set $2
- (tuple.extract 1
- (local.get $1)
- )
- )
- (drop
- (tuple.extract 2
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (local.get $3)
- )
- )
- (local.get $0)
- )
- (func $get-third (type $7) (result f32)
- (local $0 f32)
- (local $1 (i32 i64 f32))
- (local $2 i64)
- (local $3 i32)
- (local.set $1
- (call $triple)
- )
- (drop
- (block (result i32)
- (local.set $3
- (tuple.extract 0
- (local.get $1)
- )
- )
- (drop
- (block (result i64)
- (local.set $2
- (tuple.extract 1
- (local.get $1)
- )
- )
- (local.set $0
- (tuple.extract 2
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (local.get $3)
- )
- )
- (local.get $0)
- )
- (func $reverse (type $4) (result f32 i64 i32)
- (local $x i32)
- (local $1 i64)
- (local $2 i64)
- (local $3 f32)
- (local $4 f32)
- (local $5 (i32 i64 f32))
- (local $6 i64)
- (local $7 i32)
- (local $8 i64)
- (local $9 i32)
- (local $10 i64)
- (local $11 i32)
- (local $12 i64)
- (local $13 i32)
- (local $14 f32)
- (local.set $5
- (call $triple)
- )
- (local.set $x
- (block (result i32)
- (local.set $7
- (tuple.extract 0
- (local.get $5)
- )
- )
- (local.set $1
- (block (result i64)
- (local.set $6
- (tuple.extract 1
- (local.get $5)
- )
- )
- (local.set $3
- (tuple.extract 2
- (local.get $5)
- )
- )
- (local.get $6)
- )
- )
- (local.get $7)
- )
- )
- (drop
- (block (result i32)
- (local.set $9
- (local.get $x)
- )
- (drop
- (block (result i64)
- (local.set $8
- (local.get $1)
- )
- (local.set $4
- (local.get $3)
- )
- (local.get $8)
- )
- )
- (local.get $9)
- )
- )
- (tuple.make
- (block (result f32)
- (local.set $14
- (local.get $4)
- )
- (drop
- (block (result i32)
- (local.set $11
- (local.get $x)
- )
- (local.set $2
- (block (result i64)
- (local.set $10
- (local.get $1)
- )
- (drop
- (local.get $3)
- )
- (local.get $10)
- )
- )
- (local.get $11)
- )
- )
- (local.get $14)
- )
- (local.get $2)
- (block (result i32)
- (local.set $13
- (local.get $x)
- )
- (drop
- (block (result i64)
- (local.set $12
- (local.get $1)
- )
- (drop
- (local.get $3)
- )
- (local.get $12)
- )
- )
- (local.get $13)
- )
- )
- )
- (func $unreachable (type $3) (result i64)
- (drop
- (i32.const 42)
- )
- (drop
- (i64.const 7)
- )
- (unreachable)
- )
- (func $global (type $0) (result i32 i64)
- (local $0 i32)
- (global.set $g1
- (block (result i32)
- (local.set $0
- (i32.const 42)
- )
- (global.set $g2
- (i64.const 7)
- )
- (local.get $0)
- )
- )
- (tuple.make
- (global.get $global$2)
- (global.get $global$3)
- )
- )
- (func $drop-call (type $1)
- (local $0 (i32 i64))
- (local $1 i32)
- (local.set $0
- (call $pair)
- )
- (drop
- (block (result i32)
- (local.set $1
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 1
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- )
- (func $drop-tuple-make (type $1)
- (local $0 i32)
- (drop
- (block (result i32)
- (local.set $0
- (i32.const 42)
- )
- (drop
- (i64.const 42)
- )
- (local.get $0)
- )
- )
- )
- (func $drop-block (type $1)
- (local $0 (i32 i64))
- (local $1 i32)
- (local.set $0
- (block $label$1 (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (drop
- (block (result i32)
- (local.set $1
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 1
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- )
- (func $mv-return (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-return-in-block (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $mv-block-break (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local.set $0
- (block $label$1 (result i32 i64)
- (br $label$1
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- (func $mv-block-br-if (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local $1 (i32 i64))
- (local.set $1
- (block $label$1 (result i32 i64)
- (local.set $0
- (br_if $label$1
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 1)
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $1)
- )
- (tuple.extract 1
- (local.get $1)
- )
- )
- )
- (func $mv-if (type $2) (result i32 i64 externref)
- (local $0 (i32 i64 externref))
- (local.set $0
- (if (result i32 i64 externref)
- (i32.const 1)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- (tuple.extract 2
- (local.get $0)
- )
- )
- )
- (func $mv-loop (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local.set $0
- (loop $label$1 (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- (func $mv-switch (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local $1 (i32 i64))
- (local.set $1
- (block $label$1 (result i32 i64)
- (local.set $0
- (block $label$2 (result i32 i64)
- (br_table $label$1 $label$2
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 0)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $1)
- )
- (tuple.extract 1
- (local.get $1)
- )
- )
- )
-)
-
diff --git a/test/multivalue.wast.fromBinary.noDebugInfo b/test/multivalue.wast.fromBinary.noDebugInfo
deleted file mode 100644
index 1c6270e97..000000000
--- a/test/multivalue.wast.fromBinary.noDebugInfo
+++ /dev/null
@@ -1,476 +0,0 @@
-(module
- (type $0 (func (result i32 i64)))
- (type $1 (func))
- (type $2 (func (result i32 i64 externref)))
- (type $3 (func (result i64)))
- (type $4 (func (result f32 i64 i32)))
- (type $5 (func (result i32 i64 f32)))
- (type $6 (func (result i32)))
- (type $7 (func (result f32)))
- (import "env" "pair" (func $fimport$0 (type $0) (result i32 i64)))
- (global $global$0 (mut i32) (i32.const 0))
- (global $global$1 (mut i64) (i64.const 0))
- (global $global$2 i32 (i32.const 0))
- (global $global$3 i64 (i64.const 0))
- (func $0 (type $5) (result i32 i64 f32)
- (tuple.make
- (i32.const 42)
- (i64.const 7)
- (f32.const 13)
- )
- )
- (func $1 (type $6) (result i32)
- (local $0 (i32 i64 f32))
- (local $1 i64)
- (local $2 i32)
- (local.set $0
- (call $0)
- )
- (block (result i32)
- (local.set $2
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (block (result i64)
- (local.set $1
- (tuple.extract 1
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 2
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (func $2 (type $3) (result i64)
- (local $0 i64)
- (local $1 (i32 i64 f32))
- (local $2 i64)
- (local $3 i32)
- (local.set $1
- (call $0)
- )
- (drop
- (block (result i32)
- (local.set $3
- (tuple.extract 0
- (local.get $1)
- )
- )
- (local.set $0
- (block (result i64)
- (local.set $2
- (tuple.extract 1
- (local.get $1)
- )
- )
- (drop
- (tuple.extract 2
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (local.get $3)
- )
- )
- (local.get $0)
- )
- (func $3 (type $7) (result f32)
- (local $0 f32)
- (local $1 (i32 i64 f32))
- (local $2 i64)
- (local $3 i32)
- (local.set $1
- (call $0)
- )
- (drop
- (block (result i32)
- (local.set $3
- (tuple.extract 0
- (local.get $1)
- )
- )
- (drop
- (block (result i64)
- (local.set $2
- (tuple.extract 1
- (local.get $1)
- )
- )
- (local.set $0
- (tuple.extract 2
- (local.get $1)
- )
- )
- (local.get $2)
- )
- )
- (local.get $3)
- )
- )
- (local.get $0)
- )
- (func $4 (type $4) (result f32 i64 i32)
- (local $0 i32)
- (local $1 i64)
- (local $2 i64)
- (local $3 f32)
- (local $4 f32)
- (local $5 (i32 i64 f32))
- (local $6 i64)
- (local $7 i32)
- (local $8 i64)
- (local $9 i32)
- (local $10 i64)
- (local $11 i32)
- (local $12 i64)
- (local $13 i32)
- (local $14 f32)
- (local.set $5
- (call $0)
- )
- (local.set $0
- (block (result i32)
- (local.set $7
- (tuple.extract 0
- (local.get $5)
- )
- )
- (local.set $1
- (block (result i64)
- (local.set $6
- (tuple.extract 1
- (local.get $5)
- )
- )
- (local.set $3
- (tuple.extract 2
- (local.get $5)
- )
- )
- (local.get $6)
- )
- )
- (local.get $7)
- )
- )
- (drop
- (block (result i32)
- (local.set $9
- (local.get $0)
- )
- (drop
- (block (result i64)
- (local.set $8
- (local.get $1)
- )
- (local.set $4
- (local.get $3)
- )
- (local.get $8)
- )
- )
- (local.get $9)
- )
- )
- (tuple.make
- (block (result f32)
- (local.set $14
- (local.get $4)
- )
- (drop
- (block (result i32)
- (local.set $11
- (local.get $0)
- )
- (local.set $2
- (block (result i64)
- (local.set $10
- (local.get $1)
- )
- (drop
- (local.get $3)
- )
- (local.get $10)
- )
- )
- (local.get $11)
- )
- )
- (local.get $14)
- )
- (local.get $2)
- (block (result i32)
- (local.set $13
- (local.get $0)
- )
- (drop
- (block (result i64)
- (local.set $12
- (local.get $1)
- )
- (drop
- (local.get $3)
- )
- (local.get $12)
- )
- )
- (local.get $13)
- )
- )
- )
- (func $5 (type $3) (result i64)
- (drop
- (i32.const 42)
- )
- (drop
- (i64.const 7)
- )
- (unreachable)
- )
- (func $6 (type $0) (result i32 i64)
- (local $0 i32)
- (global.set $global$0
- (block (result i32)
- (local.set $0
- (i32.const 42)
- )
- (global.set $global$1
- (i64.const 7)
- )
- (local.get $0)
- )
- )
- (tuple.make
- (global.get $global$2)
- (global.get $global$3)
- )
- )
- (func $7 (type $1)
- (local $0 (i32 i64))
- (local $1 i32)
- (local.set $0
- (call $fimport$0)
- )
- (drop
- (block (result i32)
- (local.set $1
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 1
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- )
- (func $8 (type $1)
- (local $0 i32)
- (drop
- (block (result i32)
- (local.set $0
- (i32.const 42)
- )
- (drop
- (i64.const 42)
- )
- (local.get $0)
- )
- )
- )
- (func $9 (type $1)
- (local $0 (i32 i64))
- (local $1 i32)
- (local.set $0
- (block $label$1 (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (drop
- (block (result i32)
- (local.set $1
- (tuple.extract 0
- (local.get $0)
- )
- )
- (drop
- (tuple.extract 1
- (local.get $0)
- )
- )
- (local.get $1)
- )
- )
- )
- (func $10 (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $11 (type $0) (result i32 i64)
- (return
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (func $12 (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local.set $0
- (block $label$1 (result i32 i64)
- (br $label$1
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- (func $13 (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local $1 (i32 i64))
- (local.set $1
- (block $label$1 (result i32 i64)
- (local.set $0
- (br_if $label$1
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 1)
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $1)
- )
- (tuple.extract 1
- (local.get $1)
- )
- )
- )
- (func $14 (type $2) (result i32 i64 externref)
- (local $0 (i32 i64 externref))
- (local.set $0
- (if (result i32 i64 externref)
- (i32.const 1)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- (ref.null noextern)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- (tuple.extract 2
- (local.get $0)
- )
- )
- )
- (func $15 (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local.set $0
- (loop $label$1 (result i32 i64)
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- (func $16 (type $0) (result i32 i64)
- (local $0 (i32 i64))
- (local $1 (i32 i64))
- (local.set $1
- (block $label$1 (result i32 i64)
- (local.set $0
- (block $label$2 (result i32 i64)
- (br_table $label$1 $label$2
- (tuple.make
- (i32.const 42)
- (i64.const 42)
- )
- (i32.const 0)
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $0)
- )
- (tuple.extract 1
- (local.get $0)
- )
- )
- )
- )
- (tuple.make
- (tuple.extract 0
- (local.get $1)
- )
- (tuple.extract 1
- (local.get $1)
- )
- )
- )
-)
-