| ;; 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 $13) (param i32 (ref any)))) | |
| ;; OPT_O: (import "env" "use-i32-any" (func $use-i32-any (type $11) (param i32 (ref any)))) | |
| (import "env" "use-i32-any" (func $use-i32-any (param i32 (ref any)))) | |
| ;; CHECK: (tag $e (type $4) (param i32)) | |
| ;; OPT_O: (tag $e (type $4) (param i32)) | |
| (tag $e (param i32)) | |
| ;; CHECK: (tag $e2 (type $4) (param i32)) | |
| ;; OPT_O: (tag $e2 (type $4) (param i32)) | |
| (tag $e2 (param i32)) | |
| ;; CHECK: (func $br_on_null-one (type $5) (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 $5) (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 $14) (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 $26) (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 $12) (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 $24) (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 $6) (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 $6) (param $0 i32) (param $1 anyref) (result i32 (ref any)) | |
| ;; OPT_O-NEXT: (block $block (type $2) (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 $7) (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 $10) (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 $7) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) | |
| ;; OPT_O-NEXT: (block $block (type $10) (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 $1) (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 $1) (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 $15) (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 $27) (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 $13) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 eqref) | |
| ;; OPT_O-NEXT: (block $block (type $25) (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 $16) (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 $11) (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 $14) (param $0 i32) (param $1 (ref any)) (result i32 (ref eq)) | |
| ;; OPT_O-NEXT: (block $block (type $3) (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 $17) (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 $11) (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 $15) (param $0 i32) (param $1 anyref) (result i32 (ref eq)) | |
| ;; OPT_O-NEXT: (block $block (type $3) (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 $6) (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 $6) (param $0 i32) (param $1 anyref) (result i32 (ref any)) | |
| ;; OPT_O-NEXT: (block $block (type $2) (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 $7) (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 $10) (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 $7) (param $0 i32) (param $1 i64) (param $2 anyref) (result i32 i64 (ref any)) | |
| ;; OPT_O-NEXT: (block $block (type $10) (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 $18) (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 $16) (param $0 i32) (param $1 (ref any)) (result i32 (ref any)) | |
| ;; OPT_O-NEXT: (block $block (type $2) (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 $8) (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 $2) (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 $8) (param $0 i32) (param $1 anyref) (result i32 anyref) | |
| ;; OPT_O-NEXT: (block $block (type $26) (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 $5) (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 $5) (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 $19) (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 $17) (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 $20) (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 $18) (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 $21) (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 $19) (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 $22) (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 $20) (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 $23) (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 $12) (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 $21) (param $0 i64) (param $1 anyref) (result i64 eqref) | |
| ;; OPT_O-NEXT: (block $block (type $27) (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 $24) (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 $2) (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 $22) (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 $8) (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 $2) (result i32 anyref) | |
| ;; CHECK-NEXT: (block $label3 (type $2) (result i32 anyref) | |
| ;; CHECK-NEXT: (local.set $scratch | |
| ;; CHECK-NEXT: (block $label (type $2) (result i32 anyref) | |
| ;; CHECK-NEXT: (br $label3 | |
| ;; CHECK-NEXT: (block $label1 (type $2) (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 $8) (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 $2) (result i32 (ref any)) | |
| ;; OPT_O-NEXT: (block $label3 (type $2) (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 $2) (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 $9) (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 $9) (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 $9) (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 $9) (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 $25) (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 anyref) | |
| ;; CHECK-NEXT: (local $scratch_10 i32) | |
| ;; CHECK-NEXT: (local $scratch_11 (ref any)) | |
| ;; CHECK-NEXT: (local $scratch_12 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_12 | |
| ;; 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: (local.get $scratch_6) | |
| ;; CHECK-NEXT: (block (result (ref eq)) | |
| ;; CHECK-NEXT: (global.set $any | |
| ;; CHECK-NEXT: (local.get $scratch_8) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: (global.get $eq) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: (else | |
| ;; CHECK-NEXT: (local.set $scratch_6 | |
| ;; CHECK-NEXT: (block (result i32) | |
| ;; CHECK-NEXT: (local.set $scratch_10 | |
| ;; CHECK-NEXT: (local.get $scratch) | |
| ;; 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 $label0 anyref eqref | |
| ;; CHECK-NEXT: (local.get $scratch_9) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: (tuple.make 2 | |
| ;; CHECK-NEXT: (local.get $scratch_6) | |
| ;; CHECK-NEXT: (block (result eqref) | |
| ;; CHECK-NEXT: (global.set $any | |
| ;; CHECK-NEXT: (local.get $scratch_11) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: (global.get $eqref) | |
| ;; CHECK-NEXT: ) | |
| ;; 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_12) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: ) | |
| ;; CHECK-NEXT: ) | |
| ;; OPT_O: (func $if-else-params (type $23) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $1) (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 $3) (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 $1) (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 $1) (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 | |
| ) | |
| ) |