| ;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. |
| |
| ;; RUN: wasm-opt %s -all -S -o - | filecheck %s |
| ;; RUN: wasm-opt %s -all -O -S -o - -O | filecheck %s --check-prefix=OPT_O |
| |
| (module |
| ;; CHECK: (import "env" "i32" (global $i32 (mut i32))) |
| ;; OPT_O: (import "env" "i32" (global $i32 (mut i32))) |
| (import "env" "i32" (global $i32 (mut i32))) |
| ;; CHECK: (import "env" "i64" (global $i64 (mut i64))) |
| ;; OPT_O: (import "env" "i64" (global $i64 (mut i64))) |
| (import "env" "i64" (global $i64 (mut i64))) |
| ;; CHECK: (import "env" "any" (global $any (mut (ref any)))) |
| ;; OPT_O: (import "env" "any" (global $any (mut (ref any)))) |
| (import "env" "any" (global $any (mut (ref any)))) |
| ;; CHECK: (import "env" "anyref" (global $anyref (mut anyref))) |
| ;; OPT_O: (import "env" "anyref" (global $anyref (mut anyref))) |
| (import "env" "anyref" (global $anyref (mut anyref))) |
| ;; CHECK: (import "env" "eq" (global $eq (mut (ref eq)))) |
| ;; OPT_O: (import "env" "eq" (global $eq (mut (ref eq)))) |
| (import "env" "eq" (global $eq (mut (ref eq)))) |
| ;; CHECK: (import "env" "eqref" (global $eqref (mut eqref))) |
| ;; OPT_O: (import "env" "eqref" (global $eqref (mut eqref))) |
| (import "env" "eqref" (global $eqref (mut eqref))) |
| |
| ;; CHECK: (import "env" "use-i32-any" (func $use-i32-any (type $15) (param i32 (ref any)))) |
| ;; OPT_O: (import "env" "use-i32-any" (func $use-i32-any (type $15) (param i32 (ref any)))) |
| (import "env" "use-i32-any" (func $use-i32-any (param i32 (ref any)))) |
| |
| ;; CHECK: (tag $e (type $7) (param i32)) |
| ;; OPT_O: (tag $e (type $5) (param i32)) |
| (tag $e (param i32)) |
| ;; CHECK: (tag $e2 (type $7) (param i32)) |
| ;; OPT_O: (tag $e2 (type $5) (param i32)) |
| (tag $e2 (param i32)) |
| |
| ;; CHECK: (func $br_on_null-one (type $8) (param $0 i32) (param $1 anyref) (result i32) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (block $block (result i32) |
| ;; CHECK-NEXT: (block $block0 |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_null $block0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_null-one (type $6) (param $0 i32) (param $1 anyref) (result i32) |
| ;; OPT_O-NEXT: (block $block (result i32) |
| ;; OPT_O-NEXT: (block $block0 |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_null $block0 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_null-one (export "br_on_null-one") (param i32 anyref) (result i32) |
| block (result i32) |
| local.get 0 |
| local.get 1 |
| br_on_null 0 |
| global.set $any |
| global.set $i32 |
| i32.const 1 |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_null-two (type $16) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_5 i64) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (block $block (type $13) (result i32 i64) |
| ;; CHECK-NEXT: (block $block0 |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_null $block0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i64 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_null-two (type $16) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64) |
| ;; OPT_O-NEXT: (local $3 (tuple i32 i64)) |
| ;; OPT_O-NEXT: (block $block (type $11) (result i32 i64) |
| ;; OPT_O-NEXT: (local.set $3 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (block $block0 |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_null $block0 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i64 |
| ;; OPT_O-NEXT: (tuple.extract 2 1 |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (tuple.extract 2 0 |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (i64.const 1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_null-two (export "br_on_null-two") (param i32 i64 anyref) (result i32 i64) |
| block (result i32 i64) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| br_on_null 0 |
| global.set $any |
| global.set $i64 |
| global.set $i32 |
| i32.const 0 |
| i64.const 1 |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_non_null-one (type $9) (param $0 i32) (param $1 anyref) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (block $block (type $3) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block $block0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br_on_non_null $block0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_non_null-one (type $7) (param $0 i32) (param $1 anyref) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (block $block (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result (ref any)) |
| ;; OPT_O-NEXT: (br_on_non_null $block0 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_non_null-one (export "br_on_non_null-one") (param i32 anyref) (result i32 (ref any)) |
| block (result i32 (ref any)) |
| local.get 0 |
| local.get 1 |
| br_on_non_null 0 |
| global.set $i32 |
| i32.const 1 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_non_null-two (type $10) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_5 i64) |
| ;; CHECK-NEXT: (local $scratch_6 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local $scratch_8 (ref any)) |
| ;; CHECK-NEXT: (block $block (type $4) (result i32 i64 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block $block0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br_on_non_null $block0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i64 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_non_null-two (type $8) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) |
| ;; OPT_O-NEXT: (block $block (type $4) (result i32 i64 (ref any)) |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (block $block0 (result (ref any)) |
| ;; OPT_O-NEXT: (br_on_non_null $block0 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i64 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (i64.const 2) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_non_null-two (export "br_on_non_null-two") (param i32 i64 anyref) (result i32 i64 (ref any)) |
| block (result i32 i64 (ref any)) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| br_on_non_null 0 |
| global.set $i64 |
| global.set $i32 |
| i32.const 1 |
| i64.const 2 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast-one (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 eqref) |
| ;; CHECK-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast-one (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast-one (export "br_on_cast-one") (param i32 anyref) (result i32 eqref) |
| block (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast-two (type $17) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_5 i64) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (local $scratch_9 eqref) |
| ;; CHECK-NEXT: (block $block (type $14) (result i32 i64 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i64 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast-two (type $17) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 eqref) |
| ;; OPT_O-NEXT: (block $block (type $12) (result i32 i64 eqref) |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i64 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (i64.const 1) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast-two (export "br_on_cast-two") (param i32 i64 anyref) (result i32 i64 eqref) |
| block (result i32 i64 eqref) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i64 |
| global.set $i32 |
| i32.const 0 |
| i64.const 1 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast-nn (type $18) (param $0 i32) (param $1 (ref any)) (result i32 (ref eq)) |
| ;; CHECK-NEXT: (local $scratch (ref any)) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref eq)) |
| ;; CHECK-NEXT: (block $block (type $5) (result i32 (ref eq)) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result (ref eq)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $block0 (ref any) (ref eq) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast-nn (type $18) (param $0 i32) (param $1 (ref any)) (result i32 (ref eq)) |
| ;; OPT_O-NEXT: (block $block (type $2) (result i32 (ref eq)) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result (ref eq)) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 (ref any) (ref eq) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast-nn (export "br_on_cast-nn") (param i32 (ref any)) (result i32 (ref eq)) |
| block (result i32 (ref eq)) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 (ref any) (ref eq) |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast-to-nn (type $19) (param $0 i32) (param $1 anyref) (result i32 (ref eq)) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 anyref) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref eq)) |
| ;; CHECK-NEXT: (block $block (type $5) (result i32 (ref eq)) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result (ref eq)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref (ref eq) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $anyref |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast-to-nn (type $19) (param $0 i32) (param $1 anyref) (result i32 (ref eq)) |
| ;; OPT_O-NEXT: (block $block (type $2) (result i32 (ref eq)) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result (ref eq)) |
| ;; OPT_O-NEXT: (global.set $anyref |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref (ref eq) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast-to-nn (export "br_on_cast-to-nn") (param i32 anyref) (result i32 (ref eq)) |
| block (result i32 (ref eq)) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref (ref eq) |
| global.set $anyref |
| global.set $i32 |
| i32.const 0 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast_fail-one (type $9) (param $0 i32) (param $1 anyref) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 eqref) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref any)) |
| ;; CHECK-NEXT: (block $block (type $3) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast_fail $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eqref |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast_fail-one (type $7) (param $0 i32) (param $1 anyref) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (block $block (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result (ref any)) |
| ;; OPT_O-NEXT: (global.set $eqref |
| ;; OPT_O-NEXT: (br_on_cast_fail $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast_fail-one (export "br_on_cast_fail-one") (param i32 anyref) (result i32 (ref any)) |
| block (result i32 (ref any)) |
| local.get 0 |
| local.get 1 |
| br_on_cast_fail 0 anyref eqref |
| global.set $eqref |
| global.set $i32 |
| i32.const 0 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast_fail-two (type $10) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_5 i64) |
| ;; CHECK-NEXT: (local $scratch_6 eqref) |
| ;; CHECK-NEXT: (local $scratch_7 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (local $scratch_9 (ref any)) |
| ;; CHECK-NEXT: (block $block (type $4) (result i32 i64 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (block $block0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast_fail $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eqref |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i64 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 3 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast_fail-two (type $8) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) |
| ;; OPT_O-NEXT: (block $block (type $4) (result i32 i64 (ref any)) |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (block $block0 (result (ref any)) |
| ;; OPT_O-NEXT: (global.set $eqref |
| ;; OPT_O-NEXT: (br_on_cast_fail $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i64 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 3 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (i64.const 1) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast_fail-two (export "br_on_cast_fail-two") (param i32 i64 anyref) (result i32 i64 (ref any)) |
| block (result i32 i64 (ref any)) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| br_on_cast_fail 0 anyref eqref |
| global.set $eqref |
| global.set $i64 |
| global.set $i32 |
| i32.const 0 |
| i64.const 1 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast_fail-nn (type $20) (param $0 i32) (param $1 (ref any)) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local $scratch (ref any)) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref eq)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref any)) |
| ;; CHECK-NEXT: (block $block (type $3) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast_fail $block0 (ref any) (ref eq) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eq |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast_fail-nn (type $20) (param $0 i32) (param $1 (ref any)) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (block $block (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result (ref any)) |
| ;; OPT_O-NEXT: (global.set $eq |
| ;; OPT_O-NEXT: (br_on_cast_fail $block0 (ref any) (ref eq) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast_fail-nn (export "br_on_cast_fail-nn") (param i32 (ref any)) (result i32 (ref any)) |
| block (result i32 (ref any)) |
| local.get 0 |
| local.get 1 |
| br_on_cast_fail 0 (ref any) (ref eq) |
| global.set $eq |
| global.set $i32 |
| i32.const 0 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $br_on_cast_fail-to-nn (type $11) (param $0 i32) (param $1 anyref) (result i32 anyref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref eq)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 anyref) |
| ;; CHECK-NEXT: (block $block (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $block0 (result anyref) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast_fail $block0 anyref (ref eq) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eq |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $br_on_cast_fail-to-nn (type $9) (param $0 i32) (param $1 anyref) (result i32 anyref) |
| ;; OPT_O-NEXT: (block $block (type $13) (result i32 anyref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result anyref) |
| ;; OPT_O-NEXT: (global.set $eq |
| ;; OPT_O-NEXT: (br_on_cast_fail $block0 anyref (ref eq) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $any) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $br_on_cast_fail-to-nn (export "br_on_cast_fail-to-nn") (param i32 anyref) (result i32 anyref) |
| block (result i32 anyref) |
| local.get 0 |
| local.get 1 |
| br_on_cast_fail 0 anyref (ref eq) |
| global.set $eq |
| global.set $i32 |
| i32.const 0 |
| global.get $any |
| end |
| ) |
| |
| ;; CHECK: (func $unreachable-fallthrough (type $8) (param $0 i32) (param $1 anyref) (result i32) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 (tuple i32 (ref any))) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_6 |
| ;; CHECK-NEXT: (block $l (type $3) (result i32 (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block $l0 (result (ref any)) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br_on_non_null $l0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $l |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $unreachable-fallthrough (type $6) (param $0 i32) (param $1 anyref) (result i32) |
| ;; OPT_O-NEXT: (drop |
| ;; OPT_O-NEXT: (block $l0 (result (ref any)) |
| ;; OPT_O-NEXT: (br_on_non_null $l0 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (return |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| (func $unreachable-fallthrough (export "unreachable-fallthrough") (param i32 anyref) (result i32) |
| block $l (result i32 (ref any)) |
| local.get 0 |
| local.get 1 |
| br_on_non_null $l |
| return |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $matching-branches (type $21) (param $0 i32) (param $1 anyref) (param $2 i32) (param $3 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (local $scratch_9 anyref) |
| ;; CHECK-NEXT: (local $scratch_10 i32) |
| ;; CHECK-NEXT: (local $scratch_11 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_12 i32) |
| ;; CHECK-NEXT: (local $scratch_13 eqref) |
| ;; CHECK-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_13 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_10 |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_10) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_11 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_12 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: (local.get $scratch_13) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $matching-branches (type $21) (param $0 i32) (param $1 anyref) (param $2 i32) (param $3 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (local $4 eqref) |
| ;; OPT_O-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (local.set $4 |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.set $0 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $4) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $matching-branches (export "matching-branches") (param i32 anyref i32 anyref) (result i32 eqref) |
| block (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| local.get 2 |
| local.get 3 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $different-branches (type $22) (param $0 i32) (param $1 anyref) (param $2 i32) (param $3 eqref) (param $4 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local $scratch_8 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_9 i32) |
| ;; CHECK-NEXT: (local $scratch_10 anyref) |
| ;; CHECK-NEXT: (local $scratch_11 (tuple i32 eqref)) |
| ;; CHECK-NEXT: (local $scratch_12 eqref) |
| ;; CHECK-NEXT: (local $scratch_13 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_14 (tuple i32 eqref)) |
| ;; CHECK-NEXT: (local $scratch_15 i32) |
| ;; CHECK-NEXT: (local $scratch_16 eqref) |
| ;; CHECK-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (block $block1 |
| ;; CHECK-NEXT: (local.set $scratch_16 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_11 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (block (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_12 |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_10 |
| ;; CHECK-NEXT: (local.get $4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_13 |
| ;; CHECK-NEXT: (br_on_null $block1 |
| ;; CHECK-NEXT: (local.get $scratch_10) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_15 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_14 |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_13) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_14) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eqref |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_14) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_15) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: (local.get $scratch_16) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $different-branches (type $22) (param $0 i32) (param $1 anyref) (param $2 i32) (param $3 eqref) (param $4 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (local $5 (tuple i32 eqref)) |
| ;; OPT_O-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $block1 |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.set $5 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_null $block1 |
| ;; OPT_O-NEXT: (local.get $4) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $eqref |
| ;; OPT_O-NEXT: (tuple.extract 2 1 |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (tuple.extract 2 0 |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $different-branches (export "different-branches") (param i32 anyref i32 eqref anyref) (result i32 eqref) |
| block (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| local.get 2 |
| local.get 3 |
| local.get 4 |
| br_on_null 0 |
| global.set $any |
| global.set $eqref |
| global.set $i32 |
| i32.const 0 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $different-branches-2 (type $23) (param $0 i32) (param $1 eqref) (param $2 anyref) (param $3 i32) (param $4 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_6 (tuple i32 eqref)) |
| ;; CHECK-NEXT: (local $scratch_7 eqref) |
| ;; CHECK-NEXT: (local $scratch_8 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_9 (tuple i32 eqref)) |
| ;; CHECK-NEXT: (local $scratch_10 i32) |
| ;; CHECK-NEXT: (local $scratch_11 anyref) |
| ;; CHECK-NEXT: (local $scratch_12 i32) |
| ;; CHECK-NEXT: (local $scratch_13 i32) |
| ;; CHECK-NEXT: (local $scratch_14 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_15 i32) |
| ;; CHECK-NEXT: (local $scratch_16 eqref) |
| ;; CHECK-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (block $block0 |
| ;; CHECK-NEXT: (local.set $scratch_16 |
| ;; CHECK-NEXT: (block $block1 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (block (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (br_on_null $block0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_10 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $eqref |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_10) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_12 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_13 |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_11 |
| ;; CHECK-NEXT: (local.get $4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_13) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_14 |
| ;; CHECK-NEXT: (br_on_cast $block1 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_15 |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_14) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_15) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: (local.get $scratch_16) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $different-branches-2 (type $23) (param $0 i32) (param $1 eqref) (param $2 anyref) (param $3 i32) (param $4 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (local $5 (tuple i32 eqref)) |
| ;; OPT_O-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $block0 |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: (block $block1 (result eqref) |
| ;; OPT_O-NEXT: (local.set $5 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_null $block0 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $eqref |
| ;; OPT_O-NEXT: (tuple.extract 2 1 |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (tuple.extract 2 0 |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block1 anyref eqref |
| ;; OPT_O-NEXT: (local.get $4) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $5) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $different-branches-2 (export "different-branches-2") (param i32 eqref anyref i32 anyref) (result i32 eqref) |
| block (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| br_on_null 0 |
| global.set $any |
| global.set $eqref |
| global.set $i32 |
| local.get 3 |
| local.get 4 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $nested-branches (type $24) (param $0 i32) (param $1 anyref) (param $2 anyref) (result i32) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 anyref) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (local $scratch_9 i32) |
| ;; CHECK-NEXT: (local $scratch_10 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_11 i32) |
| ;; CHECK-NEXT: (local $scratch_12 eqref) |
| ;; CHECK-NEXT: (local $scratch_13 (tuple i32 eqref)) |
| ;; CHECK-NEXT: (local $scratch_14 i32) |
| ;; CHECK-NEXT: (block $block1 (result i32) |
| ;; CHECK-NEXT: (block $block10 |
| ;; CHECK-NEXT: (local.set $scratch_14 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_13 |
| ;; CHECK-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_12 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_10 |
| ;; CHECK-NEXT: (br_on_null $block10 |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_11 |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $scratch_10) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_13) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block1 |
| ;; CHECK-NEXT: (local.get $scratch_14) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $nested-branches (type $24) (param $0 i32) (param $1 anyref) (param $2 anyref) (result i32) |
| ;; OPT_O-NEXT: (block $block1 (result i32) |
| ;; OPT_O-NEXT: (block $block10 |
| ;; OPT_O-NEXT: (br $block1 |
| ;; OPT_O-NEXT: (tuple.extract 2 0 |
| ;; OPT_O-NEXT: (block $block (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (drop |
| ;; OPT_O-NEXT: (br_on_null $block10 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $nested-branches (export "nested-branches") (param i32 anyref anyref) (result i32) |
| block (result i32) |
| block (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| local.get 2 |
| br_on_null 1 |
| drop |
| drop |
| i32.const 0 |
| global.get $eqref |
| end |
| drop |
| end |
| ) |
| |
| ;; CHECK: (func $with-block-param (type $25) (param $0 i64) (param $1 anyref) (result i64 eqref) |
| ;; CHECK-NEXT: (local $scratch i64) |
| ;; CHECK-NEXT: (local $scratch_3 anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i64) |
| ;; CHECK-NEXT: (local $scratch_5 i64) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 i64) |
| ;; CHECK-NEXT: (local $scratch_8 eqref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block $block (type $6) (result i64 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block $block0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $block0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i64 |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $block |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $with-block-param (type $25) (param $0 i64) (param $1 anyref) (result i64 eqref) |
| ;; OPT_O-NEXT: (block $block (type $14) (result i64 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $block0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $block0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i64 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $block |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i64.const 1) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $with-block-param (export "with-block-param") (param i64 anyref) (result i64 eqref) |
| local.get 0 |
| block (param i64) (result i64 eqref) |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i64 |
| i64.const 1 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $loop (type $26) (param $0 i32) (param $1 anyref) |
| ;; CHECK-NEXT: (local $scratch (tuple i32 anyref)) |
| ;; CHECK-NEXT: (local $scratch_3 (tuple i32 anyref)) |
| ;; CHECK-NEXT: (local $scratch_4 anyref) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_8 i32) |
| ;; CHECK-NEXT: (local $scratch_9 anyref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (loop $label2 |
| ;; CHECK-NEXT: (block $label3 |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (block $label (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (block $label1 |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (block $label0 (result anyref) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_3 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $loop (type $26) (param $0 i32) (param $1 anyref) |
| ;; OPT_O-NEXT: (loop $label2 |
| ;; OPT_O-NEXT: (block $label3 |
| ;; OPT_O-NEXT: (local.set $1 |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $label3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $label2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $loop (export "loop") (param i32 anyref) |
| local.get 0 |
| local.get 1 |
| loop (param i32 anyref) |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| end |
| ) |
| |
| ;; CHECK: (func $loop-results (type $11) (param $0 i32) (param $1 anyref) (result i32 anyref) |
| ;; CHECK-NEXT: (local $scratch (tuple i32 anyref)) |
| ;; CHECK-NEXT: (local $scratch_3 (tuple i32 anyref)) |
| ;; CHECK-NEXT: (local $scratch_4 anyref) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_8 anyref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (loop $label2 (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (block $label3 (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (block $label (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (br $label3 |
| ;; CHECK-NEXT: (block $label1 (type $1) (result i32 anyref) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block $label0 (result anyref) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_3 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label1 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $loop-results (type $9) (param $0 i32) (param $1 anyref) (result i32 anyref) |
| ;; OPT_O-NEXT: (local $2 (tuple i32 anyref)) |
| ;; OPT_O-NEXT: (local $3 eqref) |
| ;; OPT_O-NEXT: (local.set $2 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (loop $label2 (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (block $label3 (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (local.set $2 |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (br $label3 |
| ;; OPT_O-NEXT: (block $label1 (type $1) (result i32 (ref any)) |
| ;; OPT_O-NEXT: (local.set $3 |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label1 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.tee $0 |
| ;; OPT_O-NEXT: (tuple.extract 2 0 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (tuple.extract 2 1 |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $label2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $loop-results (export "loop-results") (param i32 anyref) (result i32 anyref) |
| local.get 0 |
| local.get 1 |
| loop (param i32 anyref) (result i32 anyref) |
| br_on_cast 0 anyref eqref |
| end |
| ) |
| |
| ;; CHECK: (func $if (type $12) (param $0 i32) (param $1 i32) (param $2 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local $scratch_8 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (if (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $if (type $10) (param $0 i32) (param $1 i32) (param $2 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (if (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (then |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (else |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $if (export "if") (param i32 i32 anyref) (result i32 eqref) |
| local.get 0 |
| if (result i32 eqref) |
| local.get 1 |
| local.get 2 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eqref |
| else |
| i32.const 1 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $else (type $12) (param $0 i32) (param $1 i32) (param $2 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local $scratch_8 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (if (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $else (type $10) (param $0 i32) (param $1 i32) (param $2 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (if (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (then |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (else |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $else (export "else") (param i32 i32 anyref) (result i32 eqref) |
| local.get 0 |
| if (result i32 eqref) |
| i32.const 0 |
| global.get $eqref |
| else |
| local.get 1 |
| local.get 2 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 1 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-params (type $27) (param $0 i32) (param $1 i32) (param $2 anyref) (param $3 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local $scratch_5 anyref) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 i32) |
| ;; CHECK-NEXT: (local $scratch_8 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_9 i32) |
| ;; CHECK-NEXT: (local $scratch_10 anyref) |
| ;; CHECK-NEXT: (local $scratch_11 i32) |
| ;; CHECK-NEXT: (local $scratch_12 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_13 i32) |
| ;; CHECK-NEXT: (local $scratch_14 eqref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_14 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (if (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_8 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_9 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_8) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_9) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_11 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_10 |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_11) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_12 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_10) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_13 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_12) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_13) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: (local.get $scratch_14) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $if-else-params (type $27) (param $0 i32) (param $1 i32) (param $2 anyref) (param $3 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (if (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: (then |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (else |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $3) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $if-else-params (export "if-else-params") (param i32 i32 anyref anyref) (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| if (param i32) (result i32 eqref) |
| local.get 2 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.get $eq |
| else |
| local.get 3 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $e |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (pop i32) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try-catch (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (do |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (catch $e |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (pop i32) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try-catch (export "try-catch") (param i32 anyref) (result i32 eqref) |
| try (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eqref |
| catch $e |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch_all (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try-catch_all (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (do |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (catch_all |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try-catch_all (export "try-catch_all") (param i32 anyref) (result i32 eqref) |
| try (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eqref |
| catch_all |
| i32.const 1 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try-delegate (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (do |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (delegate 2) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try-delegate (export "try-delegate") (param i32 anyref) (result i32 eqref) |
| try (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eqref |
| delegate 0 |
| ) |
| |
| ;; CHECK: (func $try-everything-params (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local $scratch_3 anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 eqref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $e |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (pop i32) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $e2 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (pop i32) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try-everything-params (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (do |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (catch $e |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (pop i32) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (catch $e2 |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (pop i32) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (catch_all |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 1) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try-everything-params (export "try-everything-params") (param i32 anyref) (result i32 eqref) |
| local.get 0 |
| try (param i32) (result i32 eqref) |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eqref |
| catch $e |
| global.get $eqref |
| catch $e2 |
| global.get $eqref |
| catch_all |
| i32.const 1 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $try_table (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try_table (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try_table (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try_table (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try_table (export "try_table") (param i32 anyref) (result i32 eqref) |
| try_table (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eqref |
| end |
| ) |
| |
| ;; CHECK: (func $try_table-params (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local $scratch_3 anyref) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 i32) |
| ;; CHECK-NEXT: (local $scratch_6 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_7 eqref) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (try_table (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call $use-i32-any |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eq) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $try_table-params (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (try_table (type $2) (result i32 (ref eq)) |
| ;; OPT_O-NEXT: (call $use-i32-any |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eq) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $try_table-params (export "try_table-params") (param i32 anyref) (result i32 eqref) |
| local.get 0 |
| try_table (param i32) (result i32 eqref) |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| call $use-i32-any |
| i32.const 0 |
| global.get $eq |
| end |
| ) |
| |
| ;; CHECK: (func $branch-to-func (type $2) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; CHECK-NEXT: (local $scratch anyref) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (ref any)) |
| ;; CHECK-NEXT: (local $scratch_6 i32) |
| ;; CHECK-NEXT: (local $scratch_7 eqref) |
| ;; CHECK-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; CHECK-NEXT: (local.set $scratch_7 |
| ;; CHECK-NEXT: (block $label0 (result eqref) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_5 |
| ;; CHECK-NEXT: (br_on_cast $label0 anyref eqref |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $i32 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $any |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (global.get $eqref) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: (local.get $scratch_7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; OPT_O: (func $branch-to-func (type $3) (param $0 i32) (param $1 anyref) (result i32 eqref) |
| ;; OPT_O-NEXT: (block $label (type $0) (result i32 eqref) |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: (block $label0 (result eqref) |
| ;; OPT_O-NEXT: (global.set $any |
| ;; OPT_O-NEXT: (br_on_cast $label0 anyref eqref |
| ;; OPT_O-NEXT: (local.get $1) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (global.set $i32 |
| ;; OPT_O-NEXT: (local.get $0) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: (br $label |
| ;; OPT_O-NEXT: (tuple.make 2 |
| ;; OPT_O-NEXT: (i32.const 0) |
| ;; OPT_O-NEXT: (global.get $eqref) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| ;; OPT_O-NEXT: ) |
| (func $branch-to-func (export "branch-to-func") (param i32 anyref) (result i32 eqref) |
| local.get 0 |
| local.get 1 |
| br_on_cast 0 anyref eqref |
| global.set $any |
| global.set $i32 |
| i32.const 0 |
| global.get $eqref |
| ) |
| ) |