| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| |
| ;; RUN: wasm-opt -all %s -S -o - | filecheck %s |
| |
| (module $parse |
| ;; types |
| |
| ;; CHECK: (type $0 (func)) |
| |
| ;; CHECK: (type $1 (func (result i32))) |
| |
| ;; CHECK: (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) |
| |
| ;; CHECK: (type $ret2 (func (result i32 i32))) |
| (type $ret2 (func (result i32 i32))) |
| |
| (rec |
| ;; CHECK: (type $void (sub (func))) |
| |
| ;; CHECK: (type $5 (func (result i32 i64))) |
| |
| ;; CHECK: (type $a2 (array (mut f32))) |
| |
| ;; CHECK: (type $7 (func (param i32 i64))) |
| |
| ;; CHECK: (type $a1 (array i64)) |
| |
| ;; CHECK: (type $9 (func (param anyref))) |
| |
| ;; CHECK: (type $simple (func (param i32 i64) (result f32))) |
| |
| ;; CHECK: (type $simple-cont (cont $simple)) |
| |
| ;; CHECK: (type $12 (func (param i32 i64 v128))) |
| |
| ;; CHECK: (rec |
| ;; CHECK-NEXT: (type $s0 (struct)) |
| (type $s0 (struct)) |
| ;; CHECK: (type $s1 (struct)) |
| (type $s1 (struct (field))) |
| ) |
| |
| (rec) |
| |
| ;; CHECK: (type $many (sub (func (param i32 i64 f32 f64) (result anyref (ref func))))) |
| |
| ;; CHECK: (type $packed-i8 (array (mut i8))) |
| |
| ;; CHECK: (type $packed-i16 (array (mut i16))) |
| |
| ;; CHECK: (type $a0 (array i32)) |
| |
| ;; CHECK: (type $19 (func (param i32))) |
| |
| ;; CHECK: (type $any-array (array (mut anyref))) |
| |
| ;; CHECK: (type $21 (func (param i32 i64) (result i32 i64))) |
| |
| ;; CHECK: (type $22 (func (result exnref))) |
| |
| ;; CHECK: (type $23 (func (result i64))) |
| |
| ;; CHECK: (type $24 (func (result i64 f32))) |
| |
| ;; CHECK: (type $25 (func (param i32 i32 i32))) |
| |
| ;; CHECK: (type $26 (func (param v128 i32) (result v128))) |
| |
| ;; CHECK: (type $27 (func (param i32) (result i32))) |
| |
| ;; CHECK: (type $28 (func (param i32) (result i32 i64))) |
| |
| ;; CHECK: (type $29 (func (param stringref stringref) (result i32))) |
| |
| ;; CHECK: (type $30 (func (param i64 v128) (result v128))) |
| |
| ;; CHECK: (type $31 (func (param i64 v128))) |
| |
| ;; CHECK: (type $cont-bind-before-func (func (param i32 i64 i32 i64) (result f32))) |
| |
| ;; CHECK: (type $cont-bind-before (cont $cont-bind-before-func)) |
| |
| ;; CHECK: (type $to-f32 (func (result f32))) |
| |
| ;; CHECK: (type $s2 (struct (field i32))) |
| (type $s2 (struct i32)) |
| ;; CHECK: (type $s3 (struct (field i64))) |
| (type $s3 (struct (field i64))) |
| ;; CHECK: (type $s4 (struct (field $x f32))) |
| (type $s4 (struct (field $x f32))) |
| ;; CHECK: (type $s5 (struct (field i32) (field i64))) |
| (type $s5 (struct i32 i64)) |
| ;; CHECK: (type $s6 (struct (field i64) (field f32))) |
| (type $s6 (struct (field i64 f32))) |
| ;; CHECK: (type $s7 (struct (field $x f32) (field $y f64))) |
| (type $s7 (struct (field $x f32) (field $y f64))) |
| ;; CHECK: (type $s8 (struct (field i32) (field i64) (field $z f32) (field f64) (field (mut i32)))) |
| (type $s8 (struct i32 (field) i64 (field $z f32) (field f64 (mut i32)))) |
| |
| (type $a0 (array i32)) |
| (type $a1 (array (field i64))) |
| (type $a2 (array (mut f32))) |
| ;; CHECK: (type $a3 (array (mut f64))) |
| (type $a3 (array (field $x (mut f64)))) |
| |
| (type $pair (struct (field $first (mut i32)) (field $second (mut i64)))) |
| |
| (type $packed-i8 (array (mut i8))) |
| |
| (type $packed-i16 (array (mut i16))) |
| |
| (type $any-array (array (mut anyref))) |
| |
| (rec |
| (type $void (sub (func))) |
| ) |
| |
| ;; CHECK: (type $subvoid (sub final $void (func))) |
| (type $subvoid (sub final $void (func))) |
| |
| (type $simple (func (param $x i32) (param $y i64) (result f32))) |
| (type $to-f32 (func (result f32))) |
| |
| (type $many (sub (func (param $x i32) (param i64 f32) (param) (param $y f64) |
| (result anyref (ref func))))) |
| |
| ;; CHECK: (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) |
| (type $submany (sub final $many (func (param i32 i64 f32 f64) (result anyref (ref func))))) |
| |
| (type $simple-cont (cont $simple)) |
| ;; CHECK: (type $all-types (struct (field externref) (field (ref extern)) (field (ref null (shared extern))) (field (ref (shared extern))) (field funcref) (field (ref func)) (field (ref null (shared func))) (field (ref (shared func))) (field anyref) (field (ref any)) (field (ref null (shared any))) (field (ref (shared any))) (field eqref) (field (ref eq)) (field (ref null (shared eq))) (field (ref (shared eq))) (field i31ref) (field (ref i31)) (field (ref null (shared i31))) (field (ref (shared i31))) (field structref) (field (ref struct)) (field (ref null (shared struct))) (field (ref (shared struct))) (field arrayref) (field (ref array)) (field (ref null (shared array))) (field (ref (shared array))) (field exnref) (field (ref exn)) (field (ref null (shared exn))) (field (ref (shared exn))) (field stringref) (field (ref string)) (field (ref null (shared string))) (field (ref (shared string))) (field contref) (field (ref cont)) (field (ref null (shared cont))) (field (ref (shared cont))) (field nullref) (field (ref none)) (field (ref null (shared none))) (field (ref (shared none))) (field nullexternref) (field (ref noextern)) (field (ref null (shared noextern))) (field (ref (shared noextern))) (field nullfuncref) (field (ref nofunc)) (field (ref null (shared nofunc))) (field (ref (shared nofunc))) (field nullexnref) (field (ref noexn)) (field (ref null (shared noexn))) (field (ref (shared noexn))) (field nullcontref) (field (ref nocont)) (field (ref null (shared nocont))) (field (ref (shared nocont))))) |
| |
| ;; CHECK: (type $46 (func (param i32 i32))) |
| |
| ;; CHECK: (type $47 (func (param exnref))) |
| |
| ;; CHECK: (type $48 (func (result anyref anyref))) |
| |
| ;; CHECK: (type $49 (func (param i32 i32 f64 f64))) |
| |
| ;; CHECK: (type $50 (func (param i64))) |
| |
| ;; CHECK: (type $51 (func (param v128) (result i32))) |
| |
| ;; CHECK: (type $52 (func (param v128 v128) (result v128))) |
| |
| ;; CHECK: (type $53 (func (param v128 v128 v128) (result v128))) |
| |
| ;; CHECK: (type $54 (func (param i32 i32 i64 i64))) |
| |
| ;; CHECK: (type $55 (func (param i64) (result i32 i64))) |
| |
| ;; CHECK: (type $56 (func (param anyref) (result i32))) |
| |
| ;; CHECK: (type $57 (func (param eqref eqref) (result i32))) |
| |
| ;; CHECK: (type $58 (func (param i32) (result i31ref))) |
| |
| ;; CHECK: (type $59 (func (param i31ref))) |
| |
| ;; CHECK: (type $60 (func (param i32 i64) (result (ref $pair)))) |
| |
| ;; CHECK: (type $61 (func (result (ref $pair)))) |
| |
| ;; CHECK: (type $62 (func (param (ref $pair)) (result i32))) |
| |
| ;; CHECK: (type $63 (func (param (ref $pair)) (result i64))) |
| |
| ;; CHECK: (type $64 (func (param (ref null $pair)) (result i32))) |
| |
| ;; CHECK: (type $65 (func (param (ref $pair) i32))) |
| |
| ;; CHECK: (type $66 (func (param (ref $pair) i64))) |
| |
| ;; CHECK: (type $67 (func (param (ref null $pair) i64))) |
| |
| ;; CHECK: (type $68 (func (param i64 i32) (result (ref $a1)))) |
| |
| ;; CHECK: (type $69 (func (param i32) (result (ref $a1)))) |
| |
| ;; CHECK: (type $70 (func (param i32 i32) (result (ref $a1)))) |
| |
| ;; CHECK: (type $71 (func (param (ref $a1) i32) (result i64))) |
| |
| ;; CHECK: (type $72 (func (param (ref $packed-i8) i32) (result i32))) |
| |
| ;; CHECK: (type $73 (func (param (ref $packed-i16) i32) (result i32))) |
| |
| ;; CHECK: (type $74 (func (param (ref $a2) i32 f32))) |
| |
| ;; CHECK: (type $75 (func (param arrayref) (result i32))) |
| |
| ;; CHECK: (type $76 (func (param (ref $a2) i32 (ref $a2) i32 i32))) |
| |
| ;; CHECK: (type $77 (func (param (ref $a2) i32 f32 i32))) |
| |
| ;; CHECK: (type $78 (func (param (ref $a2) i32 i32 i32))) |
| |
| ;; CHECK: (type $79 (func (param (ref $any-array) i32 i32 i32))) |
| |
| ;; CHECK: (type $80 (func (param externref))) |
| |
| ;; CHECK: (type $81 (func (param (ref $packed-i8) i32 i32) (result stringref))) |
| |
| ;; CHECK: (type $82 (func (param i32) (result stringref))) |
| |
| ;; CHECK: (type $83 (func (result (ref string)))) |
| |
| ;; CHECK: (type $84 (func (param stringref))) |
| |
| ;; CHECK: (type $85 (func (param stringref (ref $packed-i16) i32) (result i32))) |
| |
| ;; CHECK: (type $86 (func (param stringref stringref) (result (ref string)))) |
| |
| ;; CHECK: (type $87 (func (param stringref i32) (result i32))) |
| |
| ;; CHECK: (type $88 (func (param stringref i32 i32) (result (ref string)))) |
| |
| ;; CHECK: (type $89 (func (param (ref $simple-cont)))) |
| |
| ;; CHECK: (type $to-f32-cont (cont $to-f32)) |
| (type $to-f32-cont (cont $to-f32)) |
| |
| |
| (type $cont-bind-before-func (func (param i32) (param i64) (param i32) (param i64) (result f32))) |
| (type $cont-bind-before (cont $cont-bind-before-func)) |
| |
| (type $all-types (struct externref (ref extern) (ref null (shared extern)) (ref (shared extern)) |
| funcref (ref func) (ref null (shared func)) (ref (shared func)) |
| anyref (ref any) (ref null (shared any)) (ref (shared any)) |
| eqref (ref eq) (ref null (shared eq)) (ref (shared eq)) |
| i31ref (ref i31) (ref null (shared i31)) (ref (shared i31)) |
| structref (ref struct) (ref null (shared struct)) (ref (shared struct)) |
| arrayref (ref array) (ref null (shared array)) (ref (shared array)) |
| exnref (ref exn) (ref null (shared exn)) (ref (shared exn)) |
| stringref (ref string) (ref null (shared string)) (ref (shared string)) |
| contref (ref cont) (ref null (shared cont)) (ref (shared cont)) |
| nullref (ref none) (ref null (shared none)) (ref (shared none)) |
| nullexternref (ref noextern) (ref null (shared noextern)) (ref (shared noextern)) |
| nullfuncref (ref nofunc) (ref null (shared nofunc)) (ref (shared nofunc)) |
| nullexnref (ref noexn) (ref null (shared noexn)) (ref (shared noexn)) |
| nullcontref (ref nocont) (ref null (shared nocont)) (ref (shared nocont)))) |
| |
| ;; imported memories |
| (memory (export "mem") (export "mem2") (import "" "mem") 0) |
| ;; CHECK: (type $91 (func (param (ref $simple)) (result (ref $simple-cont)))) |
| |
| ;; CHECK: (type $92 (func (param (ref $cont-bind-before)) (result (ref $simple-cont)))) |
| |
| ;; CHECK: (type $93 (func (param (ref $s0) (ref $s1) (ref $s2) (ref $s3) (ref $s4) (ref $s5) (ref $s6) (ref $s7) (ref $s8) (ref $a0) (ref $a1) (ref $a2) (ref $a3) (ref $subvoid) (ref $submany) (ref $all-types)))) |
| |
| ;; CHECK: (type $94 (func (result structref arrayref))) |
| |
| ;; CHECK: (type $95 (func (result arrayref structref))) |
| |
| ;; CHECK: (type $96 (func (result i32 i64 (ref null $simple-cont)))) |
| |
| ;; CHECK: (import "" "mem" (memory $mimport$0 0)) |
| |
| ;; CHECK: (import "mod" "imported-m" (memory $m-imported 1 2 shared)) |
| (import "mod" "imported-m" (memory $m-imported 1 2 shared)) |
| |
| ;; imported tables |
| (table (export "tab") (export "tab2") (import "" "tab") 0 funcref) |
| (import "mod" "imported-tab" (table 2 3 externref)) |
| |
| ;; imported globals |
| (global $g1 (export "g1") (export "g1.1") (import "mod" "g1") i32) |
| (global $g2 (import "mod" "g2") (mut i64)) |
| (global (import "" "g3") (ref 0)) |
| (global (import "mod" "") (ref null $many)) |
| ;; CHECK: (import "" "tab" (table $timport$0 0 funcref)) |
| |
| ;; CHECK: (import "mod" "imported-tab" (table $timport$1 2 3 externref)) |
| |
| ;; CHECK: (import "mod" "g1" (global $g1 i32)) |
| |
| ;; CHECK: (import "mod" "g2" (global $g2 (mut i64))) |
| |
| ;; CHECK: (import "" "g3" (global $gimport$0 (ref $ret2))) |
| |
| ;; CHECK: (import "mod" "" (global $gimport$1 (ref null $many))) |
| |
| ;; CHECK: (import "mod" "imported-g" (global $g-imported (mut i32))) |
| (import "mod" "imported-g" (global $g-imported (mut i32))) |
| |
| ;; imported functions |
| (func (export "f5.0") (export "f5.1") (import "mod" "f5")) |
| (import "mod" "imported-f" (func (param) (result i32 i64))) |
| |
| ;; imported tags |
| (tag $imported (export "t0.0") (export "t0.1") (import "mod" "t0") (param i32 i64)) |
| (tag (import "mod" "t1")) |
| (import "mod" "imported-tag" (tag (param) (result))) |
| |
| ;; globals |
| (global (mut i32) i32.const 0) |
| |
| ;; CHECK: (import "mod" "f5" (func $fimport$0 (type $0))) |
| |
| ;; CHECK: (import "mod" "imported-f" (func $fimport$1 (type $5) (result i32 i64))) |
| |
| ;; CHECK: (import "mod" "t0" (tag $imported (type $7) (param i32 i64))) |
| |
| ;; CHECK: (import "mod" "t1" (tag $eimport$0 (type $0))) |
| |
| ;; CHECK: (import "mod" "imported-tag" (tag $eimport$1 (type $0))) |
| |
| ;; CHECK: (global $global$2 (mut i32) (i32.const 0)) |
| |
| ;; CHECK: (global $i32 i32 (i32.const 42)) |
| (global $i32 i32 i32.const 42) |
| |
| ;; CHECK: (global $pair (mut (tuple i32 i64)) (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: )) |
| (global $pair (mut (tuple i32 i64)) (tuple.make 2 (i32.const 0) (i64.const 1))) |
| |
| ;; memories |
| ;; CHECK: (memory $mem 1 1 shared) |
| (memory $mem 1 1 shared) |
| (memory 0 1 shared) |
| ;; CHECK: (memory $1 0 1 shared) |
| |
| ;; CHECK: (memory $mem-i32 0 1) |
| (memory $mem-i32 i32 0 1) |
| |
| ;; CHECK: (memory $mem-i64 i64 2) |
| (memory $mem-i64 i64 2) |
| |
| ;; CHECK: (memory $mem-init 1 1) |
| (memory $mem-init (data "hello inline data")) |
| |
| ;; CHECK: (memory $mem-init-32 1 1) |
| (memory $mem-init-32 i32 (data "hello i32 inline data")) |
| |
| ;; CHECK: (memory $mem-init-64 i64 1 1) |
| (memory $mem-init-64 i64 (data "hello i64 inline data")) |
| |
| ;; data segments |
| (data "hello world") |
| ;; CHECK: (data $implicit-data (memory $mem-init) (i32.const 0) "hello inline data") |
| |
| ;; CHECK: (data $implicit-data_1 (memory $mem-init-32) (i32.const 0) "hello i32 inline data") |
| |
| ;; CHECK: (data $implicit-data_2 (memory $mem-init-64) (i64.const 0) "hello i64 inline data") |
| |
| ;; CHECK: (data $0 "hello world") |
| |
| ;; CHECK: (data $passive "hello again") |
| (data $passive "hello" " " "again") |
| |
| ;; CHECK: (data $active (i32.const 0) "active hello") |
| (data $active (offset i32.const 0) "active hello" "" "") |
| |
| ;; CHECK: (data $active2 (i32.const 1) "active again!") |
| (data $active2 (offset (i32.const 1)) "" "active again" "!") |
| |
| ;; CHECK: (data $active3 (memory $mem) (i32.const 42) "active abbreviated") |
| (data $active3 (memory $mem) (i32.const 42) "" "active abbreviated" "") |
| |
| ;; CHECK: (data $active4 (memory $mem-i32) (i32.const 16) "") |
| (data $active4 (memory $mem-i32) (i32.const 16) "") |
| |
| (data (memory 5) (offset i64.const 0) "64-bit") |
| |
| ;; tables |
| ;; CHECK: (data $1 (memory $mem-i64) (i64.const 0) "64-bit") |
| |
| ;; CHECK: (table $funcs 1 2 funcref) |
| (table $funcs 1 2 (ref null func)) |
| |
| ;; CHECK: (table $table-any 3 3 anyref) |
| (table $table-any anyref (elem (item i32.const 0 ref.i31) (ref.null any) (item (ref.i31 (i32.const 0))))) |
| |
| ;; elems |
| ;; CHECK: (elem $implicit-elem (table $table-any) (i32.const 0) anyref (item (ref.i31 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: )) (item (ref.null none)) (item (ref.i31 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ))) |
| |
| ;; CHECK: (elem $implicit-table (table $timport$0) (i32.const 0) funcref (item (ref.null nofunc)) (item (ref.null nofunc)) (item (ref.null nofunc))) |
| (elem $implicit-table (offset i32.const 0) funcref (ref.null func) (item ref.null func) (item (ref.null func))) |
| |
| ;; CHECK: (elem $implicit-table-2 (table $timport$0) (i32.const 1) func) |
| (elem $implicit-table-2 (i32.const 1) funcref) |
| |
| ;; CHECK: (elem $implicit-table-indices (table $timport$0) (i32.const 2) func $fimport$0 $fimport$1 $2) |
| (elem $implicit-table-indices (offset (i32.const 2)) func 0 1 2) |
| |
| ;; CHECK: (elem $implicit-table-legacy-indices (table $timport$0) (i32.const 3) func $fimport$0 $fimport$1 $2 $f1) |
| (elem $implicit-table-legacy-indices (i32.const 3) 0 1 2 3) |
| |
| ;; CHECK: (elem $explicit-table (table $timport$0) (i32.const 0) funcref (item (ref.null nofunc))) |
| (elem $explicit-table (table 0) (offset (i32.const 0)) funcref (item ref.null func)) |
| |
| ;; CHECK: (elem $explicit-table-named (table $table-any) (i32.const 1) anyref) |
| (elem $explicit-table-named (table $table-any) (i32.const 1) anyref) |
| |
| ;; CHECK: (elem $passive (ref null $s0) (item (struct.new_default $s0)) (item (struct.new_default $s0))) |
| (elem $passive (ref null $s0) (item struct.new $s0) (struct.new $s0)) |
| |
| ;; CHECK: (elem $passive-2 anyref (item (struct.new_default $s0)) (item (struct.new_default $s0))) |
| (elem $passive-2 anyref (item struct.new $s0) (struct.new $s0)) |
| |
| ;; CHECK: (elem declare func $ref-func $table-fill $table-grow $table-set) |
| (elem declare func 0 1 2 3) |
| |
| (elem $declare-2 declare funcref (item ref.func 0) (ref.func 1) (item (ref.func 2))) |
| |
| ;; tags |
| (tag) |
| |
| ;; CHECK: (tag $tag$2 (type $0)) |
| |
| ;; CHECK: (tag $empty (type $0)) |
| (tag $empty) |
| |
| ;; CHECK: (tag $tag-i32 (type $19) (param i32)) |
| (tag $tag-i32 (param $x i32)) |
| |
| ;; CHECK: (tag $tag-pair (type $7) (param i32 i64)) |
| (tag $tag-pair (param i32 i64)) |
| |
| ;; CHECK: (tag $tag-pair-to-pair (type $21) (param i32 i64) (result i32 i64)) |
| (tag $tag-pair-to-pair (param i32 i64) (result i32 i64)) |
| |
| ;; explicit exports |
| (export "exported-func" (func 0)) |
| ;; CHECK: (export "mem" (memory $mimport$0)) |
| |
| ;; CHECK: (export "mem2" (memory $mimport$0)) |
| |
| ;; CHECK: (export "tab" (table $timport$0)) |
| |
| ;; CHECK: (export "tab2" (table $timport$0)) |
| |
| ;; CHECK: (export "g1" (global $g1)) |
| |
| ;; CHECK: (export "g1.1" (global $g1)) |
| |
| ;; CHECK: (export "f5.0" (func $fimport$0)) |
| |
| ;; CHECK: (export "f5.1" (func $fimport$0)) |
| |
| ;; CHECK: (export "t0.0" (tag $imported)) |
| |
| ;; CHECK: (export "t0.1" (tag $imported)) |
| |
| ;; CHECK: (export "exported-func" (func $fimport$0)) |
| |
| ;; CHECK: (export "exported-table" (table $funcs)) |
| (export "exported-table" (table $funcs)) |
| (export "exported-memory" (memory 0)) |
| ;; CHECK: (export "exported-memory" (memory $mimport$0)) |
| |
| ;; CHECK: (export "exported-global" (global $g1)) |
| (export "exported-global" (global $g1)) |
| (export "exported-tag" (tag 0)) |
| |
| ;; start function |
| ;; CHECK: (export "exported-tag" (tag $imported)) |
| |
| ;; CHECK: (start $return-none) |
| (start $return-none) |
| |
| ;; Annotations |
| (@annotation this is a meaningless (@annotation ) ;; This is still a comment )) |
| it spans multiple lines just fine and can include $ids 0x42 numbers and "strings" |
| ) |
| |
| ;; functions |
| (func) |
| |
| ;; CHECK: (func $2 (type $0) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $f1 (type $19) (param $0 i32) |
| ;; CHECK-NEXT: ) |
| (func $f1 (param i32)) |
| ;; CHECK: (func $f2 (type $19) (param $x i32) |
| ;; CHECK-NEXT: ) |
| (func $f2 (param $x i32)) |
| ;; CHECK: (func $f3 (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| (func $f3 (result i32) |
| i32.const 0 |
| ) |
| ;; CHECK: (func $f4 (type $void) |
| ;; CHECK-NEXT: (local $0 i32) |
| ;; CHECK-NEXT: (local $1 i64) |
| ;; CHECK-NEXT: (local $l f32) |
| ;; CHECK-NEXT: ) |
| (func $f4 (type 18) (local i32 i64) (local $l f32)) |
| |
| ;; CHECK: (func $"[quoted_name]" (type $0) |
| ;; CHECK-NEXT: ) |
| (func $"[quoted_name]") |
| |
| ;; CHECK: (func $nop-skate (type $0) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| (func $nop-skate |
| nop |
| nop |
| unreachable |
| nop |
| nop |
| ) |
| |
| ;; CHECK: (func $nop-ski (type $0) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| (func $nop-ski |
| (unreachable |
| (nop |
| (nop) |
| (nop) |
| (nop |
| (nop) |
| ) |
| ) |
| (nop) |
| ) |
| (nop) |
| ) |
| |
| ;; CHECK: (func $nop-sled (type $0) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| (func $nop-sled |
| nop |
| (nop |
| (nop |
| (unreachable) |
| ) |
| ) |
| nop |
| (unreachable) |
| nop |
| ) |
| |
| ;; CHECK: (func $add (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add (result i32) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-folded (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-folded (result i32) |
| (i32.add |
| (i32.const 1) |
| (i32.const 2) |
| ) |
| ) |
| |
| ;; CHECK: (func $add-stacky (type $1) (result i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-stacky (result i32) |
| i32.const 1 |
| nop |
| i32.const 2 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-stacky-2 (type $1) (result i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-stacky-2 (result i32) |
| i32.const 1 |
| i32.const 2 |
| nop |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-stacky-3 (type $1) (result i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| (func $add-stacky-3 (result i32) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| nop |
| ) |
| |
| ;; CHECK: (func $add-stacky-4 (type $1) (result i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local $scratch_1 i32) |
| ;; CHECK-NEXT: (local $scratch_2 i32) |
| ;; CHECK-NEXT: (local.set $scratch_2 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_1 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch_1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch_2) |
| ;; CHECK-NEXT: ) |
| (func $add-stacky-4 (result i32) |
| i32.const 1 |
| nop |
| i32.const 2 |
| nop |
| i32.add |
| nop |
| ) |
| |
| ;; CHECK: (func $add-unreachable (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-unreachable (result i32) |
| unreachable |
| i32.const 1 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-unreachable-2 (type $1) (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-unreachable-2 (result i32) |
| i32.const 1 |
| unreachable |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-unreachable-3 (type $1) (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $add-unreachable-3 (result i32) |
| i32.const 1 |
| i32.const 2 |
| unreachable |
| ) |
| |
| ;; CHECK: (func $add-twice (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-twice (type $ret2) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-twice-stacky (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-twice-stacky (type $ret2) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| nop |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-twice-stacky-2 (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-twice-stacky-2 (type $ret2) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| nop |
| ) |
| |
| ;; CHECK: (func $add-twice-unreachable (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-twice-unreachable (type $ret2) |
| unreachable |
| i32.const 2 |
| i32.add |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-twice-unreachable-2 (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $add-twice-unreachable-2 (type $ret2) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| unreachable |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $add-twice-unreachable-3 (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $add-twice-unreachable-3 (type $ret2) |
| i32.const 1 |
| i32.const 2 |
| i32.add |
| i32.const 3 |
| i32.const 4 |
| i32.add |
| unreachable |
| ) |
| |
| ;; CHECK: (func $big-stack (type $0) |
| ;; CHECK-NEXT: (local $scratch f64) |
| ;; CHECK-NEXT: (local $scratch_1 i64) |
| ;; CHECK-NEXT: (local $scratch_2 f32) |
| ;; CHECK-NEXT: (local $scratch_3 i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result f32) |
| ;; CHECK-NEXT: (local.set $scratch_2 |
| ;; CHECK-NEXT: (f32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i64) |
| ;; CHECK-NEXT: (local.set $scratch_1 |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result f64) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (f64.const 3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $big-stack |
| i32.const 0 |
| f32.const 1 |
| i64.const 2 |
| f64.const 3 |
| ref.null any |
| drop |
| drop |
| drop |
| drop |
| drop |
| ) |
| |
| ;; CHECK: (func $locals (type $46) (param $0 i32) (param $x i32) |
| ;; CHECK-NEXT: (local $2 i32) |
| ;; CHECK-NEXT: (local $y i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $x) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $y) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $x |
| ;; CHECK-NEXT: (local.get $x) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.tee $y |
| ;; CHECK-NEXT: (local.get $y) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $locals (param i32) (param $x i32) |
| (local i32) |
| (local $y i32) |
| local.get 0 |
| drop |
| local.get 1 |
| drop |
| local.get 2 |
| drop |
| local.get 3 |
| drop |
| local.get $x |
| local.set 1 |
| local.get $y |
| local.tee 3 |
| drop |
| ) |
| |
| ;; CHECK: (func $tuple-locals (type $0) |
| ;; CHECK-NEXT: (local $0 (tuple i32 i64)) |
| ;; CHECK-NEXT: (local.set $0 |
| ;; CHECK-NEXT: (local.tee $0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $0 |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $tuple-locals |
| (local (tuple i32 i64)) |
| local.get 0 |
| local.tee 0 |
| local.set 0 |
| i32.const 1 |
| i64.const 2 |
| local.set 0 |
| ) |
| |
| ;; CHECK: (func $block (type $0) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $block |
| nop |
| block $l (type $void) |
| nop |
| nop |
| nop |
| end $l |
| ) |
| |
| ;; CHECK: (func $block-folded (type $0) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (tuple.drop 2 |
| ;; CHECK-NEXT: (block $l (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $block-folded |
| nop |
| (block $l (result i32) (result) (result i32) |
| nop |
| nop |
| unreachable |
| ) |
| unreachable |
| ) |
| |
| ;; CHECK: (func $block-mix (type $0) |
| ;; CHECK-NEXT: (local $scratch i32) |
| ;; CHECK-NEXT: (local $scratch_1 (tuple i32 i32)) |
| ;; CHECK-NEXT: (local $scratch_2 i32) |
| ;; CHECK-NEXT: (block $0 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_2 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_1 |
| ;; CHECK-NEXT: (block $1 (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (block $2 (result i32) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (block $3 (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| (func $block-mix |
| (block $0 |
| block $1 (type $ret2) |
| (block $2 (result i32) |
| block $3 (result i32) |
| i32.const 0 |
| end |
| nop |
| ) |
| i32.const 1 |
| end $1 |
| drop |
| drop |
| ) |
| nop |
| ) |
| |
| |
| ;; CHECK: (func $multivalue-nested (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (local $scratch (tuple i32 i32)) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (block (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (block (type $ret2) (result i32 i32) |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| (func $multivalue-nested (type $ret2) |
| block (type $ret2) |
| nop |
| block (type $ret2) |
| block (type $ret2) |
| i32.const 0 |
| i32.const 1 |
| end |
| end |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $if-else (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else |
| i32.const 0 |
| if |
| nop |
| else |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-empty (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-empty |
| i32.const 0 |
| if |
| else |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-many (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-many |
| i32.const 0 |
| if |
| nop |
| nop |
| else |
| nop |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-single-nested (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-single-nested |
| i32.const 0 |
| if |
| f32.const 1 |
| drop |
| else |
| f64.const 2 |
| drop |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-folded-body (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-body |
| i32.const 0 |
| if |
| (drop |
| (f32.const 1) |
| ) |
| else |
| (drop |
| (f32.const 2) |
| ) |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-labeled (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-labeled |
| i32.const 0 |
| if $l |
| nop |
| else $l |
| nop |
| end $l |
| ) |
| |
| ;; CHECK: (func $if-no-else (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-no-else |
| i32.const 0 |
| if |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-result (type $1) (result i32) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-result (result i32) |
| i32.const 0 |
| if (result i32) |
| i32.const 1 |
| else |
| i32.const 2 |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-unreachable (type $1) (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-unreachable (result i32) |
| i32.const 0 ;; This will be dropped |
| unreachable |
| if (result i32) |
| i32.const 1 |
| else |
| i32.const 2 |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-nested-unreachable (type $1) (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-nested-unreachable (result i32) |
| i32.const 0 ;; This will be dropped |
| unreachable |
| if (result i32) |
| i32.const 1 |
| else |
| i32.const 2 |
| end |
| if (result i32) |
| i32.const 3 |
| else |
| i32.const 4 |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-labeled-result (type $1) (result i32) |
| ;; CHECK-NEXT: (block $l (result i32) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-labeled-result (result i32) |
| i32.const 0 |
| if $l (result i32) |
| i32.const 1 |
| else |
| i32.const 2 |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-folded (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded |
| (if |
| (i32.const 0) |
| (then |
| nop |
| ) |
| (else |
| nop |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-empty (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-empty |
| (if |
| (i32.const 0) |
| (then) |
| (else) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-many (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-many |
| (if |
| (i32.const 0) |
| (then |
| nop |
| nop |
| ) |
| (else |
| nop |
| nop |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-single-nested (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.eqz |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-single-nested |
| (if |
| (i32.eqz |
| (i32.const 0) |
| ) |
| (then |
| (drop |
| (i32.const 1) |
| ) |
| ) |
| (else |
| (drop |
| (i32.const 2) |
| ) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-labeled (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-labeled |
| (if $l |
| (i32.const 0) |
| (then |
| nop |
| ) |
| (else |
| nop |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-no-else-folded (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-no-else-folded |
| (if |
| (i32.const 0) |
| (then |
| nop |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-result (type $1) (result i32) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-result (result i32) |
| (if (result i32) |
| (i32.const 0) |
| (then |
| i32.const 1 |
| ) |
| (else |
| i32.const 2 |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-folded-labeled-result (type $1) (result i32) |
| ;; CHECK-NEXT: (block $l (result i32) |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-folded-labeled-result (result i32) |
| (if $l (result i32) |
| (i32.const 0) |
| (then |
| i32.const 1 |
| ) |
| (else |
| i32.const 2 |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $if-else-atypical-condition (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.eqz |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-atypical-condition |
| i32.const 0 |
| (if (then) (else)) |
| (if (i32.const 0) (i32.eqz) (then) (else)) |
| ) |
| |
| ;; CHECK: (func $if-else-mixed (type $0) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 6) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 7) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-mixed |
| i32.const 0 |
| if (result i32) |
| i32.const 1 |
| else |
| i32.const 2 |
| end |
| if |
| (if |
| (if (result i32) |
| (i32.const 3) |
| (then |
| (i32.const 4) |
| ) |
| (else |
| (i32.const 5) |
| ) |
| ) |
| (then |
| i32.const 6 |
| if |
| i32.const 7 |
| drop |
| end |
| ) |
| ) |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-brs (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-brs |
| i32.const 0 |
| if |
| br 0 |
| else |
| br 0 |
| end |
| ) |
| |
| ;; CHECK: (func $if-else-brs-i32 (type $1) (result i32) |
| ;; CHECK-NEXT: (block $label (result i32) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-brs-i32 (result i32) |
| i32.const 0 |
| if (result i32) |
| i32.const 1 |
| br 0 |
| else |
| i32.const 2 |
| br 0 |
| end |
| ) |
| |
| ;; CHECK: (func $loop (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop |
| loop |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $loop-empty (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-empty |
| loop |
| end |
| ) |
| |
| ;; CHECK: (func $loop-many (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-many |
| loop |
| nop |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $loop-nested (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-nested |
| loop |
| i32.const 0 |
| drop |
| end |
| ) |
| |
| ;; CHECK: (func $loop-folded-body (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-body |
| loop |
| (drop |
| (i32.const 0) |
| ) |
| end |
| ) |
| |
| ;; CHECK: (func $loop-labeled (type $0) |
| ;; CHECK-NEXT: (loop $l |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-labeled |
| loop $l |
| nop |
| end $l |
| ) |
| |
| ;; CHECK: (func $loop-result (type $1) (result i32) |
| ;; CHECK-NEXT: (loop (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-result (result i32) |
| loop (result i32) |
| i32.const 0 |
| end |
| ) |
| |
| ;; CHECK: (func $loop-labeled-result (type $1) (result i32) |
| ;; CHECK-NEXT: (loop $l (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-labeled-result (result i32) |
| loop $l (result i32) |
| i32.const 0 |
| end $l |
| ) |
| |
| ;; CHECK: (func $loop-folded (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded |
| (loop |
| (nop) |
| ) |
| ) |
| |
| ;; CHECK: (func $loop-folded-empty (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-empty |
| (loop) |
| ) |
| |
| ;; CHECK: (func $loop-folded-many (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-many |
| (loop |
| nop |
| nop |
| ) |
| ) |
| |
| ;; CHECK: (func $loop-folded-nested (type $0) |
| ;; CHECK-NEXT: (loop |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-nested |
| (loop |
| (drop |
| (f32.const 0) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $loop-folded-labeled (type $0) |
| ;; CHECK-NEXT: (loop $l |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-labeled |
| (loop $l |
| nop |
| ) |
| ) |
| |
| ;; CHECK: (func $loop-folded-result (type $1) (result i32) |
| ;; CHECK-NEXT: (loop (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-result (result i32) |
| (loop (result i32) |
| i32.const 0 |
| ) |
| ) |
| |
| ;; CHECK: (func $loop-folded-labeled-result (type $1) (result i32) |
| ;; CHECK-NEXT: (loop $l (result i32) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $loop-folded-labeled-result (result i32) |
| (loop $l (result i32) |
| i32.const 0 |
| ) |
| ) |
| |
| ;; CHECK: (func $try (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try |
| try |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-catch |
| try |
| catch $empty |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch-params (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (try (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $tag-pair |
| ;; CHECK-NEXT: (pop (tuple i32 i64)) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-catch-params (result i32 i64) |
| try (result i32 i64) |
| i32.const 0 |
| i64.const 1 |
| catch $tag-pair |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch-pop (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (try (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $tag-pair |
| ;; CHECK-NEXT: (pop (tuple i32 i64)) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-catch-pop (result i32 i64) |
| try (result i32 i64) |
| i32.const 0 |
| i64.const 1 |
| catch $tag-pair |
| pop (tuple i32 i64) |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch_all (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-catch_all |
| try |
| catch_all |
| end |
| ) |
| |
| ;; CHECK: (func $try-catch-catch_all (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $eimport$0 |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-catch-catch_all |
| try |
| catch $empty |
| catch 1 |
| catch_all |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate |
| try |
| delegate 0 |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-func-direct (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-func-direct |
| block $l |
| try |
| delegate 1 |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-func-indirect-index (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-func-indirect-index |
| block $l |
| try |
| delegate 0 |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-func-indirect-name (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-func-indirect-name |
| block $l |
| try |
| delegate $l |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-try-direct-index (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-try-direct-index |
| try |
| block |
| try |
| delegate 1 |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-try-direct-name (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-try-direct-name |
| try $l |
| block |
| try |
| delegate $l |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-try-indirect-index (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-try-indirect-index |
| try |
| block |
| try |
| delegate 0 |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-try-indirect-name (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-try-indirect-name |
| try |
| block $l |
| try |
| delegate $l |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-try-shadowing (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (block $l0 |
| ;; CHECK-NEXT: (try $l1 |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-try-shadowing |
| try $l |
| block $l |
| try $l |
| delegate $l |
| end |
| end $l |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-catch-shadowing (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (try $l0 |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (try $l1 |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-catch-shadowing |
| try $l |
| try $l |
| catch $empty |
| try $l |
| ;; goes to the outermost try, not the middle one |
| delegate $l |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-delegate-nested-catch_all-shadowing (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (try $l0 |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (try $l1 |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-nested-catch_all-shadowing |
| try $l |
| try $l |
| catch_all |
| try $l |
| ;; goes to the outermost try, not the middle one |
| delegate $l |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-br-index (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-br-index |
| try |
| br 0 |
| catch $empty |
| br 0 |
| catch_all |
| br 0 |
| end |
| ) |
| |
| ;; CHECK: (func $try-br-name (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-br-name |
| try $l |
| br $l |
| catch $l $empty |
| br $l |
| catch_all $l |
| br $l |
| end $l |
| ) |
| |
| ;; CHECK: (func $try-folded (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $eimport$0 |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-folded |
| (try |
| (do |
| nop |
| (nop) |
| ) |
| (catch $empty |
| (nop) |
| nop |
| ) |
| (catch 1 |
| nop |
| (nop) |
| ) |
| (catch_all |
| (nop) |
| nop |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-delegate-folded (type $0) |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (delegate 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-delegate-folded |
| (try |
| (do) |
| (delegate 0) |
| ) |
| ) |
| |
| ;; CHECK: (func $rethrow (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (rethrow $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow |
| try |
| catch $empty |
| rethrow 0 |
| end |
| ) |
| |
| ;; CHECK: (func $rethrow-named (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (rethrow $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow-named |
| try $l |
| catch $empty |
| rethrow $l |
| end |
| ) |
| |
| ;; CHECK: (func $rethrow-nested (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (rethrow $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow-nested |
| try |
| catch $empty |
| block |
| try |
| catch $empty |
| rethrow 2 |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $rethrow-nested-named (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (rethrow $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow-nested-named |
| try $l |
| catch $empty |
| block |
| try |
| catch $empty |
| rethrow $l |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $rethrow-try-nested (type $0) |
| ;; CHECK-NEXT: (try $label |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (rethrow $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow-try-nested |
| try |
| catch $empty |
| block |
| try |
| ;; Same as before, but now the rethrow is in the inner try instead of the |
| ;; inner catch. |
| rethrow 2 |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $rethrow-try-nested-named (type $0) |
| ;; CHECK-NEXT: (try $l |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (rethrow $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $rethrow-try-nested-named |
| try $l |
| catch $empty |
| block |
| try |
| rethrow $l |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $try-table (type $0) |
| ;; CHECK-NEXT: (try_table |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table |
| try_table |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $try-table-catch (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try_table (catch $empty $label) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-catch |
| try_table (catch $empty 0) |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $try-table-catch-ref (type $22) (result exnref) |
| ;; CHECK-NEXT: (block $label (result exnref) |
| ;; CHECK-NEXT: (try_table (result exnref) (catch_ref $empty $label) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-catch-ref (result exnref) |
| try_table (result exnref) (catch_ref $empty 0) |
| unreachable |
| end |
| ) |
| |
| ;; CHECK: (func $try-table-catch-all (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try_table (catch_all $label) |
| ;; CHECK-NEXT: (nop) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-catch-all |
| try_table (catch_all 0) |
| nop |
| end |
| ) |
| |
| ;; CHECK: (func $try-table-catch-all-ref (type $22) (result exnref) |
| ;; CHECK-NEXT: (block $label (result exnref) |
| ;; CHECK-NEXT: (try_table (result exnref) (catch_all_ref $label) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-catch-all-ref (result exnref) |
| try_table (result exnref) (catch_all_ref 0) |
| unreachable |
| end |
| ) |
| |
| ;; CHECK: (func $try-table-all (type $0) |
| ;; CHECK-NEXT: (block $catch |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $catch_ref (result exnref) |
| ;; CHECK-NEXT: (block $catch_all |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $catch_all_ref (result exnref) |
| ;; CHECK-NEXT: (block $try |
| ;; CHECK-NEXT: (try_table (catch $empty $catch) (catch_ref $empty $catch_ref) (catch_all $catch_all) (catch_all_ref $catch_all_ref) |
| ;; CHECK-NEXT: (br $try) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-all |
| block $catch |
| block $catch_ref (result exnref) |
| block $catch_all |
| block $catch_all_ref (result exnref) |
| try_table $try (catch $empty $catch) |
| (catch_ref $empty $catch_ref) |
| (catch_all $catch_all) |
| (catch_all_ref $catch_all_ref) |
| br $try |
| end $try |
| unreachable |
| end $catch_all_ref |
| drop |
| end $catch_all |
| unreachable |
| end $catch_ref |
| drop |
| end $catch |
| ) |
| |
| ;; CHECK: (func $try-table-folded (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $try (result i32) |
| ;; CHECK-NEXT: (try_table (result i32) (catch $empty $label) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-folded |
| (drop |
| (try_table $try (result i32) (catch $empty 0) |
| (i32.const 0) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-table-throw-ref (type $47) (param $0 exnref) |
| ;; CHECK-NEXT: (throw_ref |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-table-throw-ref (param exnref) |
| local.get 0 |
| throw_ref |
| ) |
| |
| ;; CHECK: (func $label-siblings (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (br $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (loop $l0 |
| ;; CHECK-NEXT: (br $l0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (block $l1 |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (br $l1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $label-siblings |
| block $l |
| br $l |
| end |
| loop $l |
| br $l |
| end |
| i32.const 0 |
| if $l |
| br $l |
| end |
| ) |
| |
| ;; CHECK: (func $label-shadowed (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (br $l) |
| ;; CHECK-NEXT: (loop $l0 |
| ;; CHECK-NEXT: (br $l0) |
| ;; CHECK-NEXT: (block $l1 |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (br $l1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $l0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $l) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $label-shadowed |
| block $l |
| br $l |
| loop $l |
| br $l |
| i32.const 0 |
| if $l |
| br $l |
| end |
| br $l |
| end |
| br $l |
| end |
| ) |
| |
| ;; CHECK: (func $label-index (type $0) |
| ;; CHECK-NEXT: (block $block2 |
| ;; CHECK-NEXT: (block $block |
| ;; CHECK-NEXT: (block $block1 |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (br $block) |
| ;; CHECK-NEXT: (br $block1) |
| ;; CHECK-NEXT: (br $l) |
| ;; CHECK-NEXT: (br $block2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $label-index |
| block |
| block |
| block |
| block $l |
| br 2 |
| br 1 |
| br 0 |
| br 3 |
| end |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $label-func (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: (block $a |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: (block $b |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $label-func |
| br 0 |
| block $a |
| br 1 |
| block $b |
| br 2 |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $br-value (type $1) (result i32) |
| ;; CHECK-NEXT: (block $label (result i32) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-value (result i32) |
| i32.const 0 |
| br 0 |
| ) |
| |
| ;; CHECK: (func $br-value-drop (type $1) (result i32) |
| ;; CHECK-NEXT: (block $label (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-value-drop (result i32) |
| f32.const 0 |
| i32.const 1 |
| br 0 |
| ) |
| |
| ;; CHECK: (func $br-multivalue (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (block $label (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-multivalue (result i32 i64) |
| i32.const 0 |
| i64.const 1 |
| br 0 |
| ) |
| |
| ;; CHECK: (func $br-multivalue-drop (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (block $label (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-multivalue-drop (result i32 i64) |
| f32.const 0 |
| i32.const 1 |
| i64.const 2 |
| br 0 |
| ) |
| |
| ;; CHECK: (func $br-mismatch-after (type $1) (result i32) |
| ;; CHECK-NEXT: (block $label (result i32) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-mismatch-after (result i32) |
| i32.const 1 |
| br 0 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $br-mismatch-after-extra (type $1) (result i32) |
| ;; CHECK-NEXT: (block $label (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (br $label |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-mismatch-after-extra (result i32) |
| i64.const 0 |
| i32.const 1 |
| br 0 |
| i32.add |
| ) |
| |
| ;; CHECK: (func $br_if (type $0) |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (br_if $l |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if |
| block $l |
| i32.const 0 |
| br_if $l |
| end |
| ) |
| |
| ;; CHECK: (func $br_if-index (type $0) |
| ;; CHECK-NEXT: (block $block |
| ;; CHECK-NEXT: (br_if $block |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if-index |
| block |
| i32.const 0 |
| br_if 0 |
| end |
| ) |
| |
| ;; CHECK: (func $br_if-return (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (br_if $label |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if-return |
| i32.const 0 |
| br_if 0 |
| ) |
| |
| ;; CHECK: (func $br_if-value (type $23) (result i64) |
| ;; CHECK-NEXT: (block $l (result i64) |
| ;; CHECK-NEXT: (br_if $l |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if-value (result i64) |
| block $l (result i64) |
| i64.const 0 |
| i32.const 1 |
| br_if $l |
| end |
| ) |
| |
| ;; CHECK: (func $br_if-multivalue (type $24) (result i64 f32) |
| ;; CHECK-NEXT: (block $l (type $24) (result i64 f32) |
| ;; CHECK-NEXT: (br_if $l |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: (f32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if-multivalue (result i64 f32) |
| block $l (result i64 f32) |
| i64.const 0 |
| f32.const 1 |
| i32.const 2 |
| br_if $l |
| end |
| ) |
| |
| ;; CHECK: (func $br_if-loop (type $23) (result i64) |
| ;; CHECK-NEXT: (local $scratch i64) |
| ;; CHECK-NEXT: (loop $l (result i64) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (i64.const 42) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br_if $l |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br_if-loop (result i64) |
| loop $l (result i64) |
| i64.const 42 |
| i32.const 0 |
| br_if $l |
| end |
| ) |
| |
| ;; CHECK: (func $br-table (type $0) |
| ;; CHECK-NEXT: (block $a |
| ;; CHECK-NEXT: (block $b |
| ;; CHECK-NEXT: (block $c |
| ;; CHECK-NEXT: (block $d |
| ;; CHECK-NEXT: (br_table $a $b $d $c |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table |
| block $a |
| block $b |
| block $c |
| block $d |
| i32.const 0 |
| br_table $a $b $d $c |
| end |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $br-table-index (type $0) |
| ;; CHECK-NEXT: (block $block |
| ;; CHECK-NEXT: (block $l |
| ;; CHECK-NEXT: (block $block2 |
| ;; CHECK-NEXT: (block $block1 |
| ;; CHECK-NEXT: (br_table $block $l $block1 $block2 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-index |
| block |
| block $l |
| block |
| block |
| i32.const 0 |
| br_table 3 2 0 1 |
| end |
| end |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $br-table-return (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (br_table $label $label $label $label $label $label $label $label |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-return |
| i32.const 0 |
| br_table 0 0 0 0 0 0 0 0 |
| ) |
| |
| ;; CHECK: (func $br-table-value (type $1) (result i32) |
| ;; CHECK-NEXT: (block $a (result i32) |
| ;; CHECK-NEXT: (block $b (result i32) |
| ;; CHECK-NEXT: (br_table $a $b |
| ;; CHECK-NEXT: (i32.const 42) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-value (result i32) |
| block $a (result i32) |
| block $b (result i32) |
| i32.const 42 |
| i32.const 0 |
| br_table $a $b |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $br-table-multivalue (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (block $a (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (block $b (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (br_table $a $b |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 42) |
| ;; CHECK-NEXT: (i64.const 42) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-multivalue (result i32 i64) |
| block $a (result i32 i64) |
| block $b (result i32 i64) |
| i32.const 42 |
| i64.const 42 |
| i32.const 0 |
| br_table $a $b |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $br-table-multivalue-glb (type $48) (result anyref anyref) |
| ;; CHECK-NEXT: (block $a (type $95) (result arrayref structref) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (block $b (type $94) (result structref arrayref) |
| ;; CHECK-NEXT: (br_table $a $b |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-multivalue-glb (result anyref anyref) |
| block $a (result arrayref structref) |
| block $b (result structref arrayref) |
| ref.null none |
| ref.null none |
| tuple.make 2 |
| unreachable |
| br_table $a $b |
| end |
| return |
| end |
| ) |
| |
| ;; CHECK: (func $br-table-loop (type $1) (result i32) |
| ;; CHECK-NEXT: (loop $a (result i32) |
| ;; CHECK-NEXT: (loop $b (result i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 42) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br_table $a $b |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-table-loop (result i32) |
| loop $a (result i32) |
| loop $b (result i32) |
| i32.const 42 |
| i32.const 0 |
| br_table $a $b |
| end |
| end |
| ) |
| |
| ;; CHECK: (func $binary (type $49) (param $0 i32) (param $1 i32) (param $2 f64) (param $3 f64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (f64.mul |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $binary (param i32 i32 f64 f64) |
| local.get 0 |
| local.get 1 |
| i32.add |
| drop |
| local.get 2 |
| local.get 3 |
| f64.mul |
| drop |
| ) |
| |
| ;; CHECK: (func $unary (type $50) (param $0 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.eqz |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $unary (param i64) |
| local.get 0 |
| i64.eqz |
| drop |
| ) |
| |
| ;; CHECK: (func $select (type $25) (param $0 i32) (param $1 i32) (param $2 i32) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (select |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (select |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (select |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (select |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $select (param i32 i32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| select |
| drop |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| select (result) |
| drop |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| select (result i32) |
| drop |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| select (result) (result i32) (result) |
| drop |
| ) |
| |
| ;; CHECK: (func $memory-size (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.size $mimport$0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.size $m-imported) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.size $mem-i64) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $memory-size |
| memory.size |
| drop |
| memory.size 1 |
| drop |
| memory.size $mem-i64 |
| drop |
| ) |
| |
| ;; CHECK: (func $memory-grow (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.grow $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.grow $m-imported |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.grow $mem-i64 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $memory-grow (param i32 i64) |
| local.get 0 |
| memory.grow |
| drop |
| local.get 0 |
| memory.grow 1 |
| drop |
| local.get 1 |
| memory.grow $mem-i64 |
| drop |
| ) |
| |
| ;; CHECK: (func $globals (type $0) |
| ;; CHECK-NEXT: (global.set $g-imported |
| ;; CHECK-NEXT: (global.get $i32) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $globals |
| global.get $i32 |
| global.set 4 |
| ) |
| |
| ;; CHECK: (func $tuple-globals (type $0) |
| ;; CHECK-NEXT: (global.set $pair |
| ;; CHECK-NEXT: (global.get $pair) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (global.set $pair |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $tuple-globals |
| global.get $pair |
| global.set $pair |
| i32.const 1 |
| i64.const 2 |
| global.set $pair |
| ) |
| |
| ;; CHECK: (func $load (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.load $mimport$0 offset=42 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.load8_s $m-imported |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.atomic.load16_u $mem-i64 offset=42 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $load (param i32 i64) |
| local.get 0 |
| i32.load offset=42 |
| drop |
| local.get 0 |
| i64.load8_s 1 align=1 |
| drop |
| local.get 1 |
| i32.atomic.load16_u $mem-i64 offset=42 align=2 |
| drop |
| ) |
| |
| ;; CHECK: (func $load-v128-unreachable (type $0) |
| ;; CHECK-NEXT: (v128.load $mimport$0 |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i64.load $mimport$0 align=8 |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| (func $load-v128-unreachable |
| unreachable |
| v128.load align=16 |
| unreachable |
| v128.load align=8 |
| unreachable |
| ) |
| |
| ;; CHECK: (func $store (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (i32.store $mimport$0 offset=42 align=1 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i64.atomic.store8 $m-imported |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (f32.store $mem-i64 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (f32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $store (param i32 i64) |
| local.get 0 |
| i32.const 0 |
| i32.store offset=42 align=1 |
| local.get 0 |
| i64.const 1 |
| i64.atomic.store8 1 |
| local.get 1 |
| f32.const 2 |
| f32.store $mem-i64 |
| ) |
| |
| ;; CHECK: (func $atomic-rmw (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.atomic.rmw16.add_u $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.atomic.rmw.xor $mem-i64 offset=8 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $atomic-rmw (param i32 i64) |
| local.get 0 |
| i32.const 1 |
| i32.atomic.rmw16.add_u |
| drop |
| local.get 1 |
| i64.const 2 |
| i64.atomic.rmw.xor $mem-i64 offset=8 align=8 |
| drop |
| ) |
| |
| ;; CHECK: (func $atomic-cmpxchg (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.atomic.rmw8.cmpxchg_u $mem |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.atomic.rmw32.cmpxchg_u $mem-i64 offset=16 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i64.const 3) |
| ;; CHECK-NEXT: (i64.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $atomic-cmpxchg (param i32 i64) |
| local.get 0 |
| i32.const 1 |
| i32.const 2 |
| i32.atomic.rmw8.cmpxchg_u 2 align=1 |
| drop |
| local.get 1 |
| i64.const 3 |
| i64.const 4 |
| i64.atomic.rmw32.cmpxchg_u 5 offset=16 |
| drop |
| ) |
| |
| ;; CHECK: (func $atomic-wait (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.atomic.wait32 $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.atomic.wait64 $mem-i64 offset=8 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i64.const 3) |
| ;; CHECK-NEXT: (i64.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $atomic-wait (param i32 i64) |
| local.get 0 |
| i32.const 1 |
| i64.const 2 |
| memory.atomic.wait32 |
| drop |
| local.get 1 |
| i64.const 3 |
| i64.const 4 |
| memory.atomic.wait64 $mem-i64 offset=8 align=8 |
| drop |
| ) |
| |
| ;; CHECK: (func $atomic-notify (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.atomic.notify $mimport$0 offset=8 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (memory.atomic.notify $mem-i64 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $atomic-notify (param i32 i64) |
| local.get 0 |
| i32.const 0 |
| memory.atomic.notify offset=8 align=4 |
| drop |
| local.get 1 |
| i32.const 1 |
| memory.atomic.notify $mem-i64 |
| drop |
| ) |
| |
| ;; CHECK: (func $atomic-fence (type $0) |
| ;; CHECK-NEXT: (atomic.fence) |
| ;; CHECK-NEXT: ) |
| (func $atomic-fence |
| atomic.fence |
| ) |
| |
| ;; CHECK: (func $simd-const (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x00010000 0x00030002 0x00050004 0x00070006) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000001 0x00000002 0x00000003) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000000 0x00000001 0x00000000) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x3f800000 0x40000000 0x40400000) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x3ff00000) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-const |
| v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
| drop |
| v128.const i16x8 0 1 2 3 4 5 6 7 |
| drop |
| v128.const i32x4 0 1 2 3 |
| drop |
| v128.const i64x2 0 1 |
| drop |
| v128.const f32x4 0.0 1.0 2.0 3.0 |
| drop |
| v128.const f64x2 0.0 1.0 |
| drop |
| ) |
| |
| ;; CHECK: (func $simd-extract (type $51) (param $0 v128) (result i32) |
| ;; CHECK-NEXT: (i32x4.extract_lane 3 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-extract (param v128) (result i32) |
| local.get 0 |
| i32x4.extract_lane 3 |
| ) |
| |
| ;; CHECK: (func $simd-replace (type $26) (param $0 v128) (param $1 i32) (result v128) |
| ;; CHECK-NEXT: (i32x4.replace_lane 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-replace (param v128 i32) (result v128) |
| local.get 0 |
| local.get 1 |
| i32x4.replace_lane 2 |
| ) |
| |
| ;; CHECK: (func $simd-shuffle (type $52) (param $0 v128) (param $1 v128) (result v128) |
| ;; CHECK-NEXT: (i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-shuffle (param v128 v128) (result v128) |
| local.get 0 |
| local.get 1 |
| i8x16.shuffle 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 |
| ) |
| |
| ;; CHECK: (func $simd-ternary (type $53) (param $0 v128) (param $1 v128) (param $2 v128) (result v128) |
| ;; CHECK-NEXT: (v128.bitselect |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-ternary (param v128 v128 v128) (result v128) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| v128.bitselect |
| ) |
| |
| ;; CHECK: (func $simd-shift (type $26) (param $0 v128) (param $1 i32) (result v128) |
| ;; CHECK-NEXT: (i8x16.shl |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-shift (param v128 i32) (result v128) |
| local.get 0 |
| local.get 1 |
| i8x16.shl |
| ) |
| |
| ;; CHECK: (func $simd-load (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.load8x8_s $mimport$0 offset=8 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.load16_splat $mem-i64 offset=2 align=1 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-load (param i32 i64) |
| local.get 0 |
| v128.load8x8_s offset=8 align=8 |
| drop |
| local.get 1 |
| v128.load16_splat $mem-i64 offset=2 align=1 |
| drop |
| ) |
| |
| ;; CHECK: (func $simd-load-store-lane (type $12) (param $0 i32) (param $1 i64) (param $2 v128) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (v128.load16_lane $mimport$0 7 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (v128.store64_lane $mem-i64 align=4 0 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $simd-load-store-lane (param i32 i64 v128) |
| local.get 0 |
| local.get 2 |
| v128.load16_lane 7 |
| drop |
| local.get 1 |
| local.get 2 |
| v128.store64_lane 5 align=4 0 |
| ) |
| |
| ;; CHECK: (func $memory-init (type $25) (param $0 i32) (param $1 i32) (param $2 i32) |
| ;; CHECK-NEXT: (memory.init $mem-i32 $passive |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.init $mem-i64 $0 |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.init $mimport$0 $implicit-data |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $memory-init (param i32 i32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| memory.init $mem-i32 $passive |
| i64.const 0 |
| local.get 1 |
| local.get 2 |
| memory.init 5 3 |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| memory.init 0 |
| ) |
| |
| ;; CHECK: (func $data-drop (type $0) |
| ;; CHECK-NEXT: (data.drop $implicit-data) |
| ;; CHECK-NEXT: (data.drop $passive) |
| ;; CHECK-NEXT: ) |
| (func $data-drop |
| data.drop 0 |
| data.drop $passive |
| ) |
| |
| ;; CHECK: (func $memory-copy (type $54) (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) |
| ;; CHECK-NEXT: (memory.copy $mimport$0 $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.copy $mem $mem-i32 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.copy $mem-i64 $mem-i64 |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: (i64.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $memory-copy (param i32 i32 i64 i64) |
| local.get 0 |
| local.get 1 |
| i32.const 2 |
| memory.copy |
| local.get 0 |
| local.get 1 |
| i32.const 3 |
| memory.copy 2 $mem-i32 |
| local.get 2 |
| local.get 3 |
| i64.const 4 |
| memory.copy $mem-i64 5 |
| ) |
| |
| ;; CHECK: (func $memory-fill (type $7) (param $0 i32) (param $1 i64) |
| ;; CHECK-NEXT: (memory.fill $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.fill $mimport$0 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (memory.fill $mem-i64 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: (i64.const 6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $memory-fill (param i32 i64) |
| local.get 0 |
| i32.const 1 |
| i32.const 2 |
| memory.fill |
| local.get 0 |
| i32.const 3 |
| i32.const 4 |
| memory.fill 0 |
| local.get 1 |
| i32.const 5 |
| i64.const 6 |
| memory.fill $mem-i64 |
| ) |
| |
| ;; CHECK: (func $return-none (type $0) |
| ;; CHECK-NEXT: (return) |
| ;; CHECK-NEXT: ) |
| (func $return-none |
| return |
| ) |
| |
| ;; CHECK: (func $return-one (type $27) (param $0 i32) (result i32) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-one (param i32) (result i32) |
| local.get 0 |
| return |
| ) |
| |
| ;; CHECK: (func $return-two (type $21) (param $0 i32) (param $1 i64) (result i32 i64) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-two (param i32 i64) (result i32 i64) |
| local.get 0 |
| local.get 1 |
| return |
| ) |
| |
| ;; CHECK: (func $return-two-first-unreachable (type $55) (param $0 i64) (result i32 i64) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-two-first-unreachable (param i64) (result i32 i64) |
| unreachable |
| local.get 0 |
| return |
| ) |
| |
| ;; CHECK: (func $return-two-second-unreachable (type $28) (param $0 i32) (result i32 i64) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-two-second-unreachable (param i32) (result i32 i64) |
| local.get 0 |
| unreachable |
| return |
| ) |
| |
| ;; CHECK: (func $return-two-second-unreachable-tuple (type $28) (param $0 i32) (result i32 i64) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (tuple.make 2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-two-second-unreachable-tuple (param i32) (result i32 i64) |
| local.get 0 |
| unreachable |
| tuple.make 2 |
| return |
| ) |
| |
| ;; CHECK: (func $return-multivalue (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (call $return-multivalue) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-multivalue (result i32 i64) |
| call $return-multivalue |
| return |
| ) |
| |
| ;; CHECK: (func $ref-is-null (type $56) (param $0 anyref) (result i32) |
| ;; CHECK-NEXT: (ref.is_null |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-is-null (param anyref) (result i32) |
| local.get 0 |
| ref.is_null |
| ) |
| |
| ;; CHECK: (func $ref-func (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.func $ref-func) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.func $ref-func) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-func |
| ref.func $ref-func |
| drop |
| ref.func 164 |
| drop |
| ) |
| |
| ;; CHECK: (func $throw (type $0) |
| ;; CHECK-NEXT: (throw $eimport$1) |
| ;; CHECK-NEXT: (throw $tag-i32 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (throw $tag-pair |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i64.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $throw |
| throw 2 |
| i32.const 0 |
| throw $tag-i32 |
| i32.const 1 |
| i64.const 2 |
| throw $tag-pair |
| ) |
| |
| ;; CHECK: (func $ref-eq (type $57) (param $0 eqref) (param $1 eqref) (result i32) |
| ;; CHECK-NEXT: (ref.eq |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-eq (param eqref eqref) (result i32) |
| local.get 0 |
| local.get 1 |
| ref.eq |
| ) |
| |
| ;; CHECK: (func $table-get (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.get $timport$0 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.get $timport$1 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.get $table-any |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-get |
| i32.const 0 |
| table.get |
| drop |
| i32.const 1 |
| table.get 1 |
| drop |
| i32.const 2 |
| table.get $table-any |
| drop |
| ) |
| |
| ;; CHECK: (func $table-set (type $0) |
| ;; CHECK-NEXT: (table.set $timport$0 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (ref.null nofunc) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (table.set $funcs |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (ref.func $table-set) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (table.set $table-any |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-set |
| i32.const 0 |
| ref.null func |
| table.set |
| i32.const 1 |
| ref.func $table-set |
| table.set 2 |
| i32.const 2 |
| ref.null any |
| table.set $table-any |
| ) |
| |
| ;; CHECK: (func $table-size (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.size $timport$0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.size $timport$1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.size $table-any) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-size |
| table.size |
| drop |
| table.size 1 |
| drop |
| table.size $table-any |
| drop |
| ) |
| |
| ;; CHECK: (func $table-grow (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.grow $timport$0 |
| ;; CHECK-NEXT: (ref.null nofunc) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.grow $funcs |
| ;; CHECK-NEXT: (ref.func $table-grow) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (table.grow $table-any |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-grow |
| ref.null func |
| i32.const 0 |
| table.grow |
| drop |
| ref.func $table-grow |
| i32.const 1 |
| table.grow 2 |
| drop |
| ref.null any |
| i32.const 2 |
| table.grow $table-any |
| drop |
| ) |
| |
| ;; CHECK: (func $table-fill (type $0) |
| ;; CHECK-NEXT: (table.fill $timport$0 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (ref.null nofunc) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (table.fill $funcs |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: (ref.func $table-fill) |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (table.fill $table-any |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-fill |
| i32.const 0 |
| ref.null func |
| i32.const 1 |
| table.fill |
| i32.const 2 |
| ref.func $table-fill |
| i32.const 3 |
| table.fill 2 |
| i32.const 4 |
| ref.null any |
| i32.const 5 |
| table.fill $table-any |
| ) |
| |
| ;; CHECK: (func $table-copy (type $0) |
| ;; CHECK-NEXT: (table.copy $timport$0 $timport$0 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (table.copy $funcs $funcs |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 4) |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-copy |
| i32.const 0 |
| i32.const 1 |
| i32.const 2 |
| table.copy |
| i32.const 3 |
| i32.const 4 |
| i32.const 5 |
| table.copy 2 $funcs |
| ) |
| |
| ;; CHECK: (func $i31-new (type $58) (param $0 i32) (result i31ref) |
| ;; CHECK-NEXT: (ref.i31 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $i31-new (param i32) (result i31ref) |
| local.get 0 |
| ref.i31 |
| ) |
| |
| ;; CHECK: (func $i31-get (type $59) (param $0 i31ref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i31.get_s |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i31.get_u |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $i31-get (param i31ref) |
| local.get 0 |
| i31.get_s |
| drop |
| local.get 0 |
| i31.get_u |
| drop |
| ) |
| |
| ;; CHECK: (func $call-ref (type $0) |
| ;; CHECK-NEXT: (local $0 (ref null $void)) |
| ;; CHECK-NEXT: (local $1 (ref null $ret2)) |
| ;; CHECK-NEXT: (local $2 (ref null $many)) |
| ;; CHECK-NEXT: (local $scratch (tuple i32 i32)) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (local $scratch_5 (tuple anyref (ref func))) |
| ;; CHECK-NEXT: (local $scratch_6 anyref) |
| ;; CHECK-NEXT: (call_ref $void |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch |
| ;; CHECK-NEXT: (call_ref $ret2 |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result anyref) |
| ;; CHECK-NEXT: (local.set $scratch_6 |
| ;; CHECK-NEXT: (tuple.extract 2 0 |
| ;; CHECK-NEXT: (local.tee $scratch_5 |
| ;; CHECK-NEXT: (call_ref $many |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: (f32.const 2) |
| ;; CHECK-NEXT: (f64.const 3) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (tuple.extract 2 1 |
| ;; CHECK-NEXT: (local.get $scratch_5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_6) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $call-ref |
| (local (ref null $void) (ref null $ret2) (ref null $many)) |
| local.get 0 |
| call_ref $void |
| local.get 1 |
| call_ref $ret2 |
| drop |
| drop |
| i32.const 0 |
| i64.const 1 |
| f32.const 2 |
| f64.const 3 |
| local.get 2 |
| call_ref $many |
| drop |
| drop |
| ) |
| |
| ;; CHECK: (func $ref-test (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.test i31ref |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.test (ref $s0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-test (param anyref) |
| local.get 0 |
| ref.test i31ref |
| drop |
| local.get 0 |
| ref.test (ref $s0) |
| drop |
| ) |
| |
| ;; CHECK: (func $ref-cast (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.cast i31ref |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.cast (ref $s0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-cast (param anyref) |
| local.get 0 |
| ref.cast i31ref |
| drop |
| local.get 0 |
| ref.cast (ref $s0) |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-null (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (br_on_null $label |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-null (param anyref) |
| local.get 0 |
| br_on_null 0 |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-non-null (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result (ref any)) |
| ;; CHECK-NEXT: (br_on_non_null $block |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-non-null (param anyref) |
| block (result (ref any)) |
| local.get 0 |
| br_on_non_null 0 |
| unreachable |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-cast (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result i31ref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result (ref any)) |
| ;; CHECK-NEXT: (br_on_cast $block anyref i31ref |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-cast (param anyref) |
| block (result i31ref) |
| block (result (ref any)) |
| local.get 0 |
| br_on_cast 1 anyref i31ref |
| end |
| unreachable |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-cast-unreachable (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result i31ref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result (ref any)) |
| ;; CHECK-NEXT: (br_on_cast $block i31ref i31ref |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-cast-unreachable |
| block (result i31ref) |
| block (result (ref any)) |
| unreachable |
| br_on_cast 1 anyref i31ref |
| end |
| unreachable |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-cast-fail (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result (ref any)) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i31ref) |
| ;; CHECK-NEXT: (br_on_cast_fail $block anyref i31ref |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-cast-fail (param anyref) |
| block (result (ref any)) |
| block (result i31ref) |
| local.get 0 |
| br_on_cast_fail 1 anyref i31ref |
| end |
| unreachable |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $br-on-cast-fail-unreachable (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result (ref any)) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block (result i31ref) |
| ;; CHECK-NEXT: (br_on_cast_fail $block i31ref i31ref |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $br-on-cast-fail-unreachable |
| block (result (ref any)) |
| block (result i31ref) |
| unreachable |
| br_on_cast_fail 1 anyref i31ref |
| end |
| unreachable |
| end |
| drop |
| ) |
| |
| ;; CHECK: (func $struct-new (type $60) (param $0 i32) (param $1 i64) (result (ref $pair)) |
| ;; CHECK-NEXT: (struct.new $pair |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-new (param i32 i64) (result (ref $pair)) |
| local.get 0 |
| local.get 1 |
| struct.new $pair |
| ) |
| |
| ;; CHECK: (func $struct-new-default (type $61) (result (ref $pair)) |
| ;; CHECK-NEXT: (struct.new_default $pair) |
| ;; CHECK-NEXT: ) |
| (func $struct-new-default (result (ref $pair)) |
| struct.new_default 14 |
| ) |
| |
| ;; CHECK: (func $struct-get-0 (type $62) (param $0 (ref $pair)) (result i32) |
| ;; CHECK-NEXT: (struct.get $pair $first |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-get-0 (param (ref $pair)) (result i32) |
| local.get 0 |
| struct.get 14 0 |
| ) |
| |
| ;; CHECK: (func $struct-get-1 (type $63) (param $0 (ref $pair)) (result i64) |
| ;; CHECK-NEXT: (struct.get $pair $second |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-get-1 (param (ref $pair)) (result i64) |
| local.get 0 |
| struct.get $pair 1 |
| ) |
| |
| ;; CHECK: (func $struct-get-named (type $64) (param $0 (ref null $pair)) (result i32) |
| ;; CHECK-NEXT: (struct.get $pair $first |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-get-named (param (ref null $pair)) (result i32) |
| local.get 0 |
| struct.get $pair $first |
| ) |
| |
| ;; CHECK: (func $struct-set-0 (type $65) (param $0 (ref $pair)) (param $1 i32) |
| ;; CHECK-NEXT: (struct.set $pair $first |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-set-0 (param (ref $pair) i32) |
| local.get 0 |
| local.get 1 |
| struct.set $pair 0 |
| ) |
| |
| ;; CHECK: (func $struct-set-1 (type $66) (param $0 (ref $pair)) (param $1 i64) |
| ;; CHECK-NEXT: (struct.set $pair $second |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-set-1 (param (ref $pair) i64) |
| local.get 0 |
| local.get 1 |
| struct.set 14 1 |
| ) |
| |
| ;; CHECK: (func $struct-set-named (type $67) (param $0 (ref null $pair)) (param $1 i64) |
| ;; CHECK-NEXT: (struct.set $pair $second |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $struct-set-named (param (ref null $pair) i64) |
| local.get 0 |
| local.get 1 |
| struct.set 14 $second |
| ) |
| |
| ;; CHECK: (func $array-new (type $68) (param $0 i64) (param $1 i32) (result (ref $a1)) |
| ;; CHECK-NEXT: (array.new $a1 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-new (param i64 i32) (result (ref 11)) |
| local.get 0 |
| local.get 1 |
| array.new $a1 |
| ) |
| |
| ;; CHECK: (func $array-new-default (type $69) (param $0 i32) (result (ref $a1)) |
| ;; CHECK-NEXT: (array.new_default $a1 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-new-default (param i32) (result (ref $a1)) |
| local.get 0 |
| array.new_default 11 |
| ) |
| |
| ;; CHECK: (func $array-new-data (type $70) (param $0 i32) (param $1 i32) (result (ref $a1)) |
| ;; CHECK-NEXT: (array.new_data $a1 $implicit-data |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-new-data (param i32 i32) (result (ref $a1)) |
| local.get 0 |
| local.get 1 |
| array.new_data $a1 0 |
| ) |
| |
| ;; CHECK: (func $array-new-fixed (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (array.new_fixed $a0 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (array.new_fixed $a0 3 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-new-fixed |
| array.new_fixed $a0 0 |
| drop |
| i32.const 0 |
| i32.const 1 |
| i32.const 2 |
| array.new_fixed $a0 3 |
| drop |
| ) |
| |
| ;; CHECK: (func $array-get (type $71) (param $0 (ref $a1)) (param $1 i32) (result i64) |
| ;; CHECK-NEXT: (array.get $a1 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-get (param (ref 11) i32) (result i64) |
| local.get 0 |
| local.get 1 |
| array.get $a1 |
| ) |
| |
| ;; CHECK: (func $array-get-s (type $72) (param $0 (ref $packed-i8)) (param $1 i32) (result i32) |
| ;; CHECK-NEXT: (array.get_s $packed-i8 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-get-s (param (ref $packed-i8) i32) (result i32) |
| local.get 0 |
| local.get 1 |
| array.get_s 15 |
| ) |
| |
| ;; CHECK: (func $array-get-u (type $73) (param $0 (ref $packed-i16)) (param $1 i32) (result i32) |
| ;; CHECK-NEXT: (array.get_u $packed-i16 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-get-u (param (ref 16) i32) (result i32) |
| local.get 0 |
| local.get 1 |
| array.get_u $packed-i16 |
| ) |
| |
| ;; CHECK: (func $array-set (type $74) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) |
| ;; CHECK-NEXT: (array.set $a2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-set (param (ref $a2) i32 f32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| array.set $a2 |
| ) |
| |
| ;; CHECK: (func $array-len (type $75) (param $0 arrayref) (result i32) |
| ;; CHECK-NEXT: (array.len |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-len (param (ref null array)) (result i32) |
| local.get 0 |
| array.len |
| ) |
| |
| ;; CHECK: (func $array-copy (type $76) (param $0 (ref $a2)) (param $1 i32) (param $2 (ref $a2)) (param $3 i32) (param $4 i32) |
| ;; CHECK-NEXT: (array.copy $a2 $a2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: (local.get $4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-copy (param (ref $a2) i32 (ref $a2) i32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| local.get 3 |
| local.get 4 |
| array.copy $a2 $a2 |
| ) |
| |
| ;; CHECK: (func $array-fill (type $77) (param $0 (ref $a2)) (param $1 i32) (param $2 f32) (param $3 i32) |
| ;; CHECK-NEXT: (array.fill $a2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-fill (param (ref $a2) i32 f32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| local.get 3 |
| array.fill $a2 |
| ) |
| |
| ;; CHECK: (func $array-init-data (type $78) (param $0 (ref $a2)) (param $1 i32) (param $2 i32) (param $3 i32) |
| ;; CHECK-NEXT: (array.init_data $a2 $implicit-data |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-init-data (param (ref $a2) i32 i32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| local.get 3 |
| array.init_data $a2 0 |
| ) |
| |
| ;; CHECK: (func $array-init-elem (type $79) (param $0 (ref $any-array)) (param $1 i32) (param $2 i32) (param $3 i32) |
| ;; CHECK-NEXT: (array.init_elem $any-array $passive-2 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $array-init-elem (param (ref $any-array) i32 i32 i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| local.get 3 |
| array.init_elem $any-array $passive-2 |
| ) |
| |
| ;; CHECK: (func $ref-as-non-null (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.as_non_null |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $ref-as-non-null (param anyref) |
| local.get 0 |
| ref.as_non_null |
| drop |
| ) |
| |
| ;; CHECK: (func $any-convert-extern (type $80) (param $0 externref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (any.convert_extern |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $any-convert-extern (param externref) |
| local.get 0 |
| any.convert_extern |
| drop |
| ) |
| |
| ;; CHECK: (func $extern-convert-any (type $9) (param $0 anyref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (extern.convert_any |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $extern-convert-any (param anyref) |
| local.get 0 |
| extern.convert_any |
| drop |
| ) |
| |
| ;; CHECK: (func $string-new-gc (type $81) (param $0 (ref $packed-i8)) (param $1 i32) (param $2 i32) (result stringref) |
| ;; CHECK-NEXT: (string.new_lossy_utf8_array |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-new-gc (param (ref $packed-i8) i32 i32) (result stringref) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| string.new_lossy_utf8_array |
| ) |
| |
| ;; CHECK: (func $string-new-code-point (type $82) (param $0 i32) (result stringref) |
| ;; CHECK-NEXT: (string.from_code_point |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-new-code-point (param i32) (result stringref) |
| local.get 0 |
| string.from_code_point |
| ) |
| |
| ;; CHECK: (func $string-const (type $83) (result (ref string)) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (string.const "foobar") |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (string.const "\00\00\00") |
| ;; CHECK-NEXT: ) |
| (func $string-const (result (ref string)) |
| string.const "foobar" |
| drop |
| string.const "\00\00\00" |
| ) |
| |
| ;; CHECK: (func $string-measure (type $84) (param $0 stringref) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (string.measure_utf8 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (string.measure_wtf16 |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-measure (param stringref) |
| local.get 0 |
| string.measure_utf8 |
| drop |
| local.get 0 |
| string.measure_wtf16 |
| drop |
| ) |
| |
| ;; CHECK: (func $string-encode-gc (type $85) (param $0 stringref) (param $1 (ref $packed-i16)) (param $2 i32) (result i32) |
| ;; CHECK-NEXT: (string.encode_wtf16_array |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-encode-gc (param stringref (ref $packed-i16) i32) (result i32) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| string.encode_wtf16_array |
| ) |
| |
| ;; CHECK: (func $string-concat (type $86) (param $0 stringref) (param $1 stringref) (result (ref string)) |
| ;; CHECK-NEXT: (string.concat |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-concat (param stringref stringref) (result (ref string)) |
| local.get 0 |
| local.get 1 |
| string.concat |
| ) |
| |
| ;; CHECK: (func $string-eq (type $29) (param $0 stringref) (param $1 stringref) (result i32) |
| ;; CHECK-NEXT: (string.eq |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-eq (param stringref stringref) (result i32) |
| local.get 0 |
| local.get 1 |
| string.eq |
| ) |
| |
| ;; CHECK: (func $string-compare (type $29) (param $0 stringref) (param $1 stringref) (result i32) |
| ;; CHECK-NEXT: (string.compare |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-compare (param stringref stringref) (result i32) |
| local.get 0 |
| local.get 1 |
| string.compare |
| ) |
| |
| ;; CHECK: (func $string-get (type $87) (param $0 stringref) (param $1 i32) (result i32) |
| ;; CHECK-NEXT: (stringview_wtf16.get_codeunit |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-get (param stringref i32) (result i32) |
| local.get 0 |
| local.get 1 |
| stringview_wtf16.get_codeunit |
| ) |
| |
| ;; CHECK: (func $string-slice (type $88) (param $0 stringref) (param $1 i32) (param $2 i32) (result (ref string)) |
| ;; CHECK-NEXT: (stringview_wtf16.slice |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $string-slice (param stringref i32 i32) (result (ref string)) |
| local.get 0 |
| local.get 1 |
| local.get 2 |
| stringview_wtf16.slice |
| ) |
| |
| ;; CHECK: (func $call (type $simple) (param $0 i32) (param $1 i64) (result f32) |
| ;; CHECK-NEXT: (call $call |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $call (param i32 i64) (result f32) |
| local.get 0 |
| local.get 1 |
| call $call |
| ) |
| |
| ;; CHECK: (func $return_call (type $simple) (param $0 i32) (param $1 i64) (result f32) |
| ;; CHECK-NEXT: (return_call $return_call |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return_call (param i32 i64) (result f32) |
| local.get 0 |
| local.get 1 |
| return_call $return_call |
| ) |
| |
| ;; CHECK: (func $call-indirect (type $12) (param $0 i32) (param $1 i64) (param $2 v128) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $30) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $call-indirect (param i32 i64 v128) |
| local.get 0 |
| call_indirect |
| local.get 0 |
| call_indirect 2 |
| local.get 0 |
| call_indirect $funcs |
| local.get 0 |
| call_indirect (type $void) |
| local.get 0 |
| call_indirect 2 (type $void) (param) (result) |
| local.get 0 |
| call_indirect $funcs (type $void) |
| local.get 0 |
| call_indirect (param) (result) |
| local.get 0 |
| call_indirect 2 (param) (result) |
| local.get 0 |
| call_indirect $funcs (param) (result) |
| local.get 1 |
| local.get 2 |
| local.get 0 |
| call_indirect (param i64 v128) (result v128) |
| drop |
| ) |
| |
| ;; CHECK: (func $call-indirect-folded (type $12) (param $0 i32) (param $1 i64) (param $2 v128) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (call_indirect $timport$0 (type $30) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $call-indirect-folded (param i32 i64 v128) |
| (call_indirect |
| (local.get 0) |
| ) |
| (call_indirect 2 |
| (local.get 0) |
| ) |
| (call_indirect $funcs |
| (local.get 0) |
| ) |
| (call_indirect (type $void) |
| (local.get 0) |
| ) |
| (call_indirect 2 (type $void) (param) (result) |
| (local.get 0) |
| ) |
| (call_indirect $funcs (type $void) |
| (local.get 0) |
| ) |
| (call_indirect (param) (result) |
| (local.get 0) |
| ) |
| (call_indirect 2 (param) (result) |
| (local.get 0) |
| ) |
| (call_indirect $funcs (param) (result) |
| (local.get 0) |
| ) |
| (drop |
| (call_indirect (param i64 v128) (result v128) |
| (local.get 1) |
| (local.get 2) |
| (local.get 0) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $return-call-indirect (type $12) (param $0 i32) (param $1 i64) (param $2 v128) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $31) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-call-indirect (param i32 i64 v128) |
| local.get 0 |
| return_call_indirect |
| local.get 0 |
| return_call_indirect 2 |
| local.get 0 |
| return_call_indirect $funcs |
| local.get 0 |
| return_call_indirect (type $void) |
| local.get 0 |
| return_call_indirect 2 (type $void) (param) (result) |
| local.get 0 |
| return_call_indirect $funcs (type $void) |
| local.get 0 |
| return_call_indirect (param) (result) |
| local.get 0 |
| return_call_indirect 2 (param) (result) |
| local.get 0 |
| return_call_indirect $funcs (param) (result) |
| local.get 1 |
| local.get 2 |
| local.get 0 |
| return_call_indirect (param i64 v128) |
| ) |
| |
| ;; CHECK: (func $return-call-indirect-folded (type $12) (param $0 i32) (param $1 i64) (param $2 v128) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $void) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $funcs (type $0) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (return_call_indirect $timport$0 (type $31) |
| ;; CHECK-NEXT: (local.get $1) |
| ;; CHECK-NEXT: (local.get $2) |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $return-call-indirect-folded (param i32 i64 v128) |
| (return_call_indirect |
| (local.get 0) |
| ) |
| (return_call_indirect 2 |
| (local.get 0) |
| ) |
| (return_call_indirect $funcs |
| (local.get 0) |
| ) |
| (return_call_indirect (type $void) |
| (local.get 0) |
| ) |
| (return_call_indirect 2 (type $void) (param) (result) |
| (local.get 0) |
| ) |
| (return_call_indirect $funcs (type $void) |
| (local.get 0) |
| ) |
| (return_call_indirect (param) (result) |
| (local.get 0) |
| ) |
| (return_call_indirect 2 (param) (result) |
| (local.get 0) |
| ) |
| (return_call_indirect $funcs (param) (result) |
| (local.get 0) |
| ) |
| (return_call_indirect (param i64 v128) |
| (local.get 1) |
| (local.get 2) |
| (local.get 0) |
| ) |
| ) |
| |
| ;; CHECK: (func $resume (type $89) (param $ct (ref $simple-cont)) |
| ;; CHECK-NEXT: (local $f f32) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block $block (result (ref $to-f32-cont)) |
| ;; CHECK-NEXT: (tuple.drop 3 |
| ;; CHECK-NEXT: (block $block1 (type $96) (result i32 i64 (ref null $simple-cont)) |
| ;; CHECK-NEXT: (local.set $f |
| ;; CHECK-NEXT: (resume $simple-cont (on $empty $block) (on $tag-pair-to-pair $block1) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 1) |
| ;; CHECK-NEXT: (local.get $ct) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $resume (param $ct (ref $simple-cont)) |
| (local $f f32) |
| block (result (ref $to-f32-cont)) |
| block (result i32 i64 (ref null $simple-cont)) |
| i32.const 0 |
| i64.const 1 |
| local.get $ct |
| resume $simple-cont (on $empty 1) (on $tag-pair-to-pair 0) |
| local.set $f |
| unreachable |
| end |
| unreachable |
| end |
| br 0 |
| ) |
| |
| ;; CHECK: (func $contnew (type $91) (param $f (ref $simple)) (result (ref $simple-cont)) |
| ;; CHECK-NEXT: (cont.new $simple-cont |
| ;; CHECK-NEXT: (local.get $f) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $contnew (param $f (ref $simple)) (result (ref $simple-cont)) |
| local.get $f |
| cont.new $simple-cont |
| ) |
| |
| ;; CHECK: (func $contbind (type $92) (param $c (ref $cont-bind-before)) (result (ref $simple-cont)) |
| ;; CHECK-NEXT: (cont.bind $cont-bind-before $simple-cont |
| ;; CHECK-NEXT: (i32.const 123) |
| ;; CHECK-NEXT: (i64.const 123) |
| ;; CHECK-NEXT: (local.get $c) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $contbind (param $c (ref $cont-bind-before)) (result (ref $simple-cont)) |
| i32.const 123 |
| i64.const 123 |
| local.get $c |
| cont.bind $cont-bind-before $simple-cont |
| ) |
| |
| ;; CHECK: (func $suspend (type $5) (result i32 i64) |
| ;; CHECK-NEXT: (suspend $tag-pair-to-pair |
| ;; CHECK-NEXT: (i32.const 123) |
| ;; CHECK-NEXT: (i64.const 456) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $suspend (result i32 i64) |
| i32.const 123 |
| i64.const 456 |
| suspend $tag-pair-to-pair |
| ) |
| |
| ;; CHECK: (func $source-maps (type $0) |
| ;; CHECK-NEXT: ;;@ src.cpp:40:1 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: ;;@ src.cpp:30:1 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: ;;@ src.cpp:10:1 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ;;@ src.cpp:20:1 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;;@ src.cpp:90:1 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: ;;@ src.cpp:70:1 |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: ;;@ src.cpp:50:1 |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ;;@ src.cpp:60:1 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: ;;@ src.cpp:70:1 |
| ;; CHECK-NEXT: (loop (result i32) |
| ;; CHECK-NEXT: ;;@ src.cpp:80:1 |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;;@ src.cpp:100:1 |
| ;; CHECK-NEXT: (block |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $source-maps |
| ;;@ src.cpp:10:1 |
| i32.const 0 |
| ;;@ src.cpp:20:1 |
| i32.const 1 |
| (@src src.cpp:30:1) |
| i32.add |
| (@src src.cpp:40:1) |
| drop |
| ;;@ src.cpp:90:1 |
| (drop |
| (@src src.cpp:70:1) |
| (i32.add |
| ;;@ src.cpp:50:1 |
| (i32.const 2) |
| (@src src.cpp:60:1) |
| (block (result i32) |
| ;;@ src.cpp:70:1 |
| (loop (result i32) |
| ;;@ src.cpp:80:1 |
| (unreachable) |
| ) |
| ) |
| ) |
| ) |
| ;;@ src.cpp:100:1 |
| block |
| end |
| ) |
| |
| ;; CHECK: (func $source-map-propagation (type $0) |
| ;; CHECK-NEXT: ;;@ src.cpp:20:1 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: ;;@ src.cpp:10:1 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ;;@ src.cpp:10:1 |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;;@ src.cpp:20:1 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ;;@ src.cpp:30:1 |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.add |
| ;; CHECK-NEXT: (i32.const 100) |
| ;; CHECK-NEXT: (i32.const 200) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $source-map-propagation |
| ;;@ src.cpp:10:1 |
| i32.const 0 |
| i32.const 1 |
| i32.add |
| ;;@ src.cpp:20:1 |
| drop |
| i32.const 2 |
| drop |
| i32.const 100 |
| i32.const 200 |
| i32.add |
| ;;@ src.cpp:30:1 |
| drop |
| ) |
| |
| ;; CHECK: (func $use-types (type $93) (param $0 (ref $s0)) (param $1 (ref $s1)) (param $2 (ref $s2)) (param $3 (ref $s3)) (param $4 (ref $s4)) (param $5 (ref $s5)) (param $6 (ref $s6)) (param $7 (ref $s7)) (param $8 (ref $s8)) (param $9 (ref $a0)) (param $10 (ref $a1)) (param $11 (ref $a2)) (param $12 (ref $a3)) (param $13 (ref $subvoid)) (param $14 (ref $submany)) (param $15 (ref $all-types)) |
| ;; CHECK-NEXT: ) |
| (func $use-types |
| (param (ref $s0)) |
| (param (ref $s1)) |
| (param (ref $s2)) |
| (param (ref $s3)) |
| (param (ref $s4)) |
| (param (ref $s5)) |
| (param (ref $s6)) |
| (param (ref $s7)) |
| (param (ref $s8)) |
| (param (ref $a0)) |
| (param (ref $a1)) |
| (param (ref $a2)) |
| (param (ref $a3)) |
| (param (ref $subvoid)) |
| (param (ref $submany)) |
| (param (ref $all-types)) |
| ) |
| |
| ;; The if is unreachable except through the break; make sure this is |
| ;; parsed correctly |
| ;; CHECK: (func $if-else-br-return (type $27) (param $a i32) (result i32) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (local.get $a) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| (func $if-else-br-return (param $a i32) (result i32) |
| (if (local.get $a) |
| (then |
| (br 0) |
| ) |
| (else |
| (return (i32.const 0)) |
| ) |
| ) |
| (i32.const 1) |
| ) |
| |
| ;; CHECK: (func $if-else-unreachable-br-extra (type $1) (result i32) |
| ;; CHECK-NEXT: (local $scratch nullref) |
| ;; CHECK-NEXT: (local $scratch_1 i32) |
| ;; CHECK-NEXT: (local $scratch_2 i32) |
| ;; CHECK-NEXT: (local $scratch_3 (ref none)) |
| ;; CHECK-NEXT: (local $scratch_4 i32) |
| ;; CHECK-NEXT: (block $l (result i32) |
| ;; CHECK-NEXT: (block $l0 |
| ;; CHECK-NEXT: (br $l |
| ;; CHECK-NEXT: (if (result i32) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (local.set $scratch_1 |
| ;; CHECK-NEXT: (block (result i32) |
| ;; CHECK-NEXT: (local.set $scratch_2 |
| ;; CHECK-NEXT: (i32.const 42) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_2) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_3 |
| ;; CHECK-NEXT: (br_on_null $l0 |
| ;; CHECK-NEXT: (local.get $scratch) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.set $scratch_4 |
| ;; CHECK-NEXT: (local.get $scratch_1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (local.get $scratch_3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_4) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (else |
| ;; CHECK-NEXT: (i32.const 1337) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $scratch_1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $if-else-unreachable-br-extra (result i32) |
| ;; The condition is unreachable, making the if unreachable. |
| unreachable |
| if $l (result i32) |
| ;; Send an extra i32. We should not get confused because the if is |
| ;; unreachable. |
| i32.const 42 |
| ref.null none |
| br_on_null $l |
| drop |
| else $l |
| i32.const 1337 |
| end $l |
| ) |
| |
| ;; CHECK: (func $try-br-catch-all-return (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch_all |
| ;; CHECK-NEXT: (return) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-br-catch-all-return |
| (try |
| (do |
| (br 0) |
| ) |
| (catch_all |
| (return) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $try-br-catch-return (type $0) |
| ;; CHECK-NEXT: (block $label |
| ;; CHECK-NEXT: (try |
| ;; CHECK-NEXT: (do |
| ;; CHECK-NEXT: (br $label) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (catch $empty |
| ;; CHECK-NEXT: (return) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $try-br-catch-return |
| (try |
| (do |
| (br 0) |
| ) |
| (catch $empty |
| (return) |
| ) |
| ) |
| ) |
| ) |