blob: 6dd71c7969dc8efe91a5e5106e0f04e08c29f43d [file] [log] [blame] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.
;; RUN: foreach %s %t wasm-opt --duplicate-function-elimination --optimize-level=1 -S -o - | filecheck %s
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $erase (type $0)
(nop)
)
(func $other (type $0)
(nop)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $other (type $0)
(nop)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(i32.const 0)
)
)
(func $other (type $0)
(drop
(i32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.const 1)
)
)
)
(module
(memory 0)
(start $other)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (table $0 3 3 funcref)
;; CHECK: (elem $0 (i32.const 0) $keep2 $keep2 $caller)
;; CHECK: (export "keep2" (func $keep2))
(export "keep2" (func $keep2))
(export "other" (func $other))
(table 3 3 funcref)
(elem (i32.const 0) $keep2 $other $caller)
;; CHECK: (export "other" (func $keep2))
;; CHECK: (start $keep2)
;; CHECK: (func $keep2
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $keep2 (type $0)
(nop)
)
(func $other (type $0)
(nop)
)
;; CHECK: (func $caller
;; CHECK-NEXT: (call $keep2)
;; CHECK-NEXT: (call $keep2)
;; CHECK-NEXT: )
(func $caller (type $0)
(call $keep2)
(call $other)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2-after-two-passes
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $keep2-after-two-passes (type $0)
(nop)
)
(func $other (type $0)
(nop)
)
;; CHECK: (func $keep-caller
;; CHECK-NEXT: (call $keep2-after-two-passes)
;; CHECK-NEXT: )
(func $keep-caller (type $0)
(call $keep2-after-two-passes)
)
;; CHECK: (func $other-caller
;; CHECK-NEXT: (call $keep2-after-two-passes)
;; CHECK-NEXT: )
(func $other-caller (type $0)
(call $other)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep-4
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $keep-4 (type $0)
(nop)
)
;; CHECK: (func $other
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
(func $other (type $0)
(unreachable)
)
;; CHECK: (func $keep-caller
;; CHECK-NEXT: (call $keep-4)
;; CHECK-NEXT: )
(func $keep-caller (type $0)
(call $keep-4)
)
;; CHECK: (func $other-caller
;; CHECK-NEXT: (call $other)
;; CHECK-NEXT: )
(func $other-caller (type $0)
(call $other)
)
)
(module
(memory 0)
;; CHECK: (type $2 (func))
;; CHECK: (type $3 (func (param i32)))
;; CHECK: (type $T (func (result i32)))
(type $T (func (result i32)))
(type $S (func (result i32)))
(type $2 (func))
(type $3 (func (param i32)))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep4-similar-but-func-sig-differs
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep4-similar-but-func-sig-differs (type $2)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other1 (param $i i32)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other1 (type $3) (param $i i32)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other2 (result i32)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
(func $other2 (type $T) (result i32)
(i32.const 0)
)
(func $other3 (type $S) (result i32)
(i32.const 0)
)
)
(module
(memory 0)
;; CHECK: (type $1 (func (param i32)))
;; CHECK: (type $S (func (result i32)))
(type $S (func (result i32)))
(type $1 (func (param i32)))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2-similar-but-func-sig-differs (param $i i32)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2-similar-but-func-sig-differs (type $1) (param $i i32)
(drop
(i32.const 0)
)
)
(func $other1 (type $1) (param $i i32)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other2 (result i32)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
(func $other2 (type $S) (result i32)
(i32.const 0)
)
(func $other3 (type $S) (result i32)
(i32.const 0)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $keep2 (type $0)
(nop)
)
;; CHECK: (func $other
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $other (type $0)
(nop)
(nop)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(block $block0
)
)
(func $other (type $0)
(block $block0
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $block0
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $block0
(nop)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(block $block0
(nop)
)
)
(func $other (type $0)
(block $block0
(nop)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $block0
(nop)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $block0
(nop)
(unreachable)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $block0
(nop)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $block0
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $block0
(unreachable)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase-since-block-names-do-not-matter
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase-since-block-names-do-not-matter (type $0)
(block $foo
)
)
(func $other (type $0)
(block $bar
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase-since-block-names-do-not-matter
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (br $foo)
;; CHECK-NEXT: (br_table $foo $foo
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase-since-block-names-do-not-matter (type $0)
(block $foo
(br $foo)
(br_table $foo $foo
(i32.const 0)
)
)
)
(func $other (type $0)
(block $bar
(br $bar)
(br_table $bar $bar
(i32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (br $foo)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $foo
(block
(drop
(i32.const 0)
)
(br $foo)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (br $bar)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $bar
(block
(drop
(i32.const 1)
)
(br $bar)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (br_if $foo
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $foo
(br_if $foo
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (br_if $bar
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $bar
(br_if $bar
(i32.const 1)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (br_if $foo
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(block $foo
(br_if $foo
(i32.const 0)
)
)
)
(func $other (type $0)
(block $bar
(br_if $bar
(i32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (br_table $foo $foo
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $foo
(br_table $foo $foo
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (br_table $bar $bar
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $bar
(br_table $bar $bar
(i32.const 1)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (loop $bar
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(loop $bar
(nop)
)
)
(func $other (type $0)
(loop $sjc
(nop)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $foo (result i32)
;; CHECK-NEXT: (br_table $foo $foo
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(block $foo (result i32)
(br_table $foo $foo
(i32.const 0)
(i32.const 0)
)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (block $bar (result i32)
;; CHECK-NEXT: (br_table $bar $bar
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(block $bar (result i32)
(br_table $bar $bar
(i32.const 0)
(i32.const 1)
)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (br_table $foo $bar
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(block $foo
(block $bar
(br_table $foo $bar
(i32.const 0)
)
)
)
)
(func $other (type $0)
(block $bar
(block $foo
(br_table $bar $foo
(i32.const 0)
)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (br_table $foo $bar
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(block $foo
(block $bar
(br_table $foo $bar
(i32.const 0)
)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (block $bar
;; CHECK-NEXT: (block $foo
;; CHECK-NEXT: (br_table $foo $bar
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(block $bar
(block $foo
(br_table $foo $bar
(i32.const 0)
)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (call $erase)
;; CHECK-NEXT: )
(func $erase (type $0)
(call $erase)
)
(func $other (type $0)
(call $erase)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2-but-in-theory-we-could-erase
;; CHECK-NEXT: (call $keep2-but-in-theory-we-could-erase)
;; CHECK-NEXT: )
(func $keep2-but-in-theory-we-could-erase (type $0)
(call $keep2-but-in-theory-we-could-erase)
)
;; CHECK: (func $other
;; CHECK-NEXT: (call $other)
;; CHECK-NEXT: )
(func $other (type $0)
(call $other)
)
)
(module
;; CHECK: (type $FUNCSIG$v (func))
;; CHECK: (import "env" "i" (func $i))
(import "env" "i" (func $i))
;; CHECK: (import "env" "j" (func $j))
(import "env" "j" (func $j))
(memory 0)
(type $FUNCSIG$v (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (call $i)
;; CHECK-NEXT: )
(func $erase (type $FUNCSIG$v)
(call $i)
)
(func $other (type $FUNCSIG$v)
(call $i)
)
)
(module
;; CHECK: (type $FUNCSIG$v (func))
;; CHECK: (import "env" "i" (func $i))
(import "env" "i" (func $i))
;; CHECK: (import "env" "j" (func $j))
(import "env" "j" (func $j))
(memory 0)
(type $FUNCSIG$v (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (call $i)
;; CHECK-NEXT: )
(func $keep2 (type $FUNCSIG$v)
(call $i)
)
;; CHECK: (func $other
;; CHECK-NEXT: (call $j)
;; CHECK-NEXT: )
(func $other (type $FUNCSIG$v)
(call $j)
)
)
(module
(memory 0)
;; CHECK: (type $T (func))
(type $T (func))
(table 2 2 funcref)
(elem (i32.const 0) $erase $other)
;; CHECK: (memory $0 0)
;; CHECK: (table $0 2 2 funcref)
;; CHECK: (elem $0 (i32.const 0) $erase $erase)
;; CHECK: (func $erase
;; CHECK-NEXT: (call_indirect (type $T)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $T)
(call_indirect (type $T)
(i32.const 0)
)
)
(func $other (type $T)
(call_indirect (type $T)
(i32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $T (func))
(type $T (func))
(table 2 2 funcref)
(elem (i32.const 0) $keep2 $other)
;; CHECK: (memory $0 0)
;; CHECK: (table $0 2 2 funcref)
;; CHECK: (elem $0 (i32.const 0) $keep2 $other)
;; CHECK: (func $keep2
;; CHECK-NEXT: (call_indirect (type $T)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $T)
(call_indirect (type $T)
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (call_indirect (type $T)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $T)
(call_indirect (type $T)
(i32.const 1)
)
)
)
(module
(memory 0)
;; CHECK: (type $T (func))
(type $T (func))
(type $S (func))
(table 2 2 funcref)
(elem (i32.const 0) $keep2 $other)
;; CHECK: (memory $0 0)
;; CHECK: (table $0 2 2 funcref)
;; CHECK: (elem $0 (i32.const 0) $keep2 $keep2)
;; CHECK: (func $keep2
;; CHECK-NEXT: (call_indirect (type $T)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $T)
(call_indirect (type $T)
(i32.const 0)
)
)
(func $other (type $T)
(call_indirect (type $S)
(i32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase-even-locals-with-different-names
;; CHECK-NEXT: (local $i i32)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $i)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase-even-locals-with-different-names (type $0)
(local $i i32)
(drop
(local.get $i)
)
)
(func $other (type $0)
(local $j i32)
(drop
(local.get $j)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (local $i i32)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $i)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(local $i i32)
(drop
(local.get $i)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (local $j i64)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (local.get $j)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(local $j i64)
(drop
(local.get $j)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase-even-locals-with-different-names
;; CHECK-NEXT: (local $i i32)
;; CHECK-NEXT: (local.set $i
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase-even-locals-with-different-names (type $0)
(local $i i32)
(local.set $i
(i32.const 0)
)
)
(func $other (type $0)
(local $j i32)
(local.set $j
(i32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (local $i i32)
;; CHECK-NEXT: (local.set $i
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(local $i i32)
(local.set $i
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (local $j i64)
;; CHECK-NEXT: (local.set $j
;; CHECK-NEXT: (i64.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(local $j i64)
(local.set $j
(i64.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (local $i i32)
;; CHECK-NEXT: (local.set $i
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(local $i i32)
(local.set $i
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (local $j i32)
;; CHECK-NEXT: (local.set $j
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(local $j i32)
(local.set $j
(i32.const 1)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(i32.load
(i32.const 0)
)
)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
(func $other (type $0)
(drop
(i32.load
(i32.const 0)
)
)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.load offset=3
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.load16_s offset=3
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3 align=1
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.load16_s offset=3 align=1
(i32.const 0)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.load16_s align=2
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.load16_s offset=3 align=2
(i32.const 1)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_u offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.load16_u offset=3 align=2
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.load16_s offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i32.load16_s offset=3 align=2
(i32.const 0)
)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $erase
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(i32.store
(i32.const 0)
(i32.const 100)
)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
(func $other (type $0)
(i32.store
(i32.const 0)
(i32.const 100)
)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (i32.store offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(i32.store offset=3
(i32.const 0)
(i32.const 100)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(i32.store16 offset=3
(i32.const 0)
(i32.const 100)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (i32.store16 offset=3 align=1
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(i32.store16 offset=3 align=1
(i32.const 0)
(i32.const 100)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (i32.store16
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(i32.store16 align=2
(i32.const 0)
(i32.const 100)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(i32.store16 offset=3 align=2
(i32.const 1)
(i32.const 100)
)
)
)
(module
(memory 10)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 10)
;; CHECK: (func $keep2
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 100)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 100)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (i32.store16 offset=3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 101)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(i32.store16 offset=3 align=2
(i32.const 0)
(i32.const 101)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i64.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i32.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f64.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f64.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(i64.const 0)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(i64.const 1)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.const 0.10000000149011612)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.const 0.10000000149011612)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.const -0.10000000149011612)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.const -0.10000000149011612)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f64.const 0.1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f64.const 0.1)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f64.const 0.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f64.const 0.2)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.abs
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(f32.abs
(f32.const 0)
)
)
)
(func $other (type $0)
(drop
(f32.abs
(f32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.abs
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.abs
(f32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.abs
;; CHECK-NEXT: (f32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.abs
(f32.const 1)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.abs
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.abs
(f32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.neg
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.neg
(f32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 0)
)
)
)
(func $other (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 1)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 1)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.add
(f32.const 1)
(f32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep2
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep2 (type $0)
(drop
(f32.add
(f32.const 0)
(f32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.sub
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: (f32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(f32.sub
(f32.const 0)
(f32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)
(func $other (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(select
(i32.const 1)
(i32.const 0)
(i32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(select
(i32.const 0)
(i32.const 2)
(i32.const 0)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (select
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 3)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(select
(i32.const 0)
(i32.const 0)
(i32.const 3)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (return)
;; CHECK-NEXT: )
(func $erase (type $0)
(return)
)
(func $other (type $0)
(return)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func (result i32)))
(type $0 (func (result i32)))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase (result i32)
;; CHECK-NEXT: (return
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0) (result i32)
(return
(i32.const 0)
)
)
(func $other (type $0) (result i32)
(return
(i32.const 0)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func (result i32)))
(type $0 (func (result i32)))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep (result i32)
;; CHECK-NEXT: (return
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0) (result i32)
(return
(i32.const 0)
)
)
;; CHECK: (func $other (result i32)
;; CHECK-NEXT: (return
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0) (result i32)
(return
(i32.const 1)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(memory.size)
)
)
(func $other (type $0)
(drop
(memory.size)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $erase
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.grow
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $erase (type $0)
(drop
(memory.grow
(i32.const 10)
)
)
)
(func $other (type $0)
(drop
(memory.grow
(i32.const 10)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.grow
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0)
(drop
(memory.grow
(i32.const 10)
)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.grow
;; CHECK-NEXT: (i32.const 11)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(memory.grow
(i32.const 11)
)
)
)
)
(module
(memory 0)
;; CHECK: (type $0 (func))
(type $0 (func))
;; CHECK: (memory $0 0)
;; CHECK: (func $keep
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $keep (type $0)
(drop
(memory.size)
)
)
;; CHECK: (func $other
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (memory.grow
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $other (type $0)
(drop
(memory.grow
(i32.const 10)
)
)
)
)