summaryrefslogtreecommitdiff
path: root/test/passes/remove-unused-nonfunction-module-elements.txt
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2018-05-04 16:35:49 -0700
committerGitHub <noreply@github.com>2018-05-04 16:35:49 -0700
commitdbe49a6238f8a8df2d1a648fe0659916aad00c35 (patch)
tree17321d0a9699f258b1ac9c073b790bb8642d928b /test/passes/remove-unused-nonfunction-module-elements.txt
parent21dc96b1852d6dbadedfec3336980be3f7bc7d45 (diff)
downloadbinaryen-dbe49a6238f8a8df2d1a648fe0659916aad00c35.tar.gz
binaryen-dbe49a6238f8a8df2d1a648fe0659916aad00c35.tar.bz2
binaryen-dbe49a6238f8a8df2d1a648fe0659916aad00c35.zip
improve remove-unused-module-elements (#1532)
Remove the entire memory/table when possible, in particular, when not imported, exported, or used. Previously we did not look at whether they were imported, so we assumed we could never remove them. Also add a variant that removes everything but functions, which can be useful when reducing a testcase that only cares about code in functions.
Diffstat (limited to 'test/passes/remove-unused-nonfunction-module-elements.txt')
-rw-r--r--test/passes/remove-unused-nonfunction-module-elements.txt331
1 files changed, 331 insertions, 0 deletions
diff --git a/test/passes/remove-unused-nonfunction-module-elements.txt b/test/passes/remove-unused-nonfunction-module-elements.txt
new file mode 100644
index 000000000..bd4a8c7d4
--- /dev/null
+++ b/test/passes/remove-unused-nonfunction-module-elements.txt
@@ -0,0 +1,331 @@
+(module
+ (type $0 (func))
+ (type $1 (func (param i32)))
+ (type $2 (func (param i32) (result i32)))
+ (table 1 1 anyfunc)
+ (elem (i32.const 0) $called_indirect)
+ (memory $0 0)
+ (export "memory" (memory $0))
+ (export "exported" (func $exported))
+ (export "other1" (func $other1))
+ (export "other2" (func $other2))
+ (start $start)
+ (func $start (; 0 ;) (type $0)
+ (call $called0)
+ )
+ (func $called0 (; 1 ;) (type $0)
+ (call $called1)
+ )
+ (func $called1 (; 2 ;) (type $0)
+ (nop)
+ )
+ (func $called_indirect (; 3 ;) (type $0)
+ (nop)
+ )
+ (func $exported (; 4 ;) (type $0)
+ (call $called2)
+ )
+ (func $called2 (; 5 ;) (type $0)
+ (call $called2)
+ (call $called3)
+ )
+ (func $called3 (; 6 ;) (type $0)
+ (call $called4)
+ )
+ (func $called4 (; 7 ;) (type $0)
+ (call $called3)
+ )
+ (func $remove0 (; 8 ;) (type $0)
+ (call $remove1)
+ )
+ (func $remove1 (; 9 ;) (type $0)
+ (nop)
+ )
+ (func $remove2 (; 10 ;) (type $0)
+ (call $remove2)
+ )
+ (func $remove3 (; 11 ;) (type $0)
+ (call $remove4)
+ )
+ (func $remove4 (; 12 ;) (type $0)
+ (call $remove3)
+ )
+ (func $other1 (; 13 ;) (type $1) (param $0 i32)
+ (call_indirect (type $0)
+ (i32.const 0)
+ )
+ (call_indirect (type $0)
+ (i32.const 0)
+ )
+ (call_indirect (type $0)
+ (i32.const 0)
+ )
+ (call_indirect (type $0)
+ (i32.const 0)
+ )
+ (call_indirect (type $1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (call_indirect (type $1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (drop
+ (call_indirect (type $2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (drop
+ (call_indirect (type $2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (drop
+ (call_indirect (type $2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (func $other2 (; 14 ;) (type $1) (param $0 i32)
+ (unreachable)
+ )
+)
+(module
+)
+(module
+)
+(module
+ (import "env" "memory" (memory $0 256))
+ (import "env" "table" (table 1 anyfunc))
+ (export "mem" (memory $0))
+ (export "tab" (table $0))
+)
+(module
+ (type $0 (func))
+ (import "env" "memory" (memory $0 256))
+ (import "env" "table" (table 1 anyfunc))
+ (elem (i32.const 0) $waka)
+ (data (i32.const 1) "hello, world!")
+ (func $waka (; 0 ;) (type $0)
+ (nop)
+ )
+)
+(module
+ (type $0 (func))
+ (import "env" "memory" (memory $0 256))
+ (import "env" "table" (table 0 anyfunc))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0)
+ (drop
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (call_indirect (type $0)
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func))
+ (memory $0 (shared 23 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0)
+ (i32.store
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (memory $0 (shared 23 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (i32.atomic.rmw.add
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (memory $0 (shared 23 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (i32.atomic.rmw8_u.cmpxchg
+ (i32.const 0)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func))
+ (memory $0 (shared 23 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0)
+ (local $0 i32)
+ (local $1 i64)
+ (drop
+ (i32.wait
+ (get_local $0)
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (memory $0 (shared 23 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (wake
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (memory $0 23 256)
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (grow_memory
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (import "env" "memory" (memory $0 256))
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (grow_memory
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (result i32)))
+ (memory $0 23 256)
+ (export "user" (func $user))
+ (func $user (; 0 ;) (type $0) (result i32)
+ (current_memory)
+ )
+)
+(module
+ (type $0 (func))
+ (import "env" "memory" (memory $0 256))
+ (import "env" "table" (table 0 anyfunc))
+ (import "env" "memoryBase" (global $memoryBase i32))
+ (import "env" "tableBase" (global $tableBase i32))
+ (elem (get_global $tableBase) $waka)
+ (data (get_global $memoryBase) "hello, world!")
+ (func $waka (; 0 ;) (type $0)
+ (nop)
+ )
+)
+(module
+ (type $FUNCSIG$ii (func (param i32) (result i32)))
+ (type $1 (func (result i32)))
+ (type $2 (func))
+ (import "env" "imported" (global $imported i32))
+ (import "env" "_puts" (func $_puts (param i32) (result i32)))
+ (global $int (mut i32) (get_global $imported))
+ (global $set (mut i32) (i32.const 100))
+ (global $exp_glob i32 (i32.const 600))
+ (export "one" (func $one))
+ (export "three" (func $three))
+ (export "exp_glob" (global $exp_glob))
+ (func $one (; 1 ;) (type $1) (result i32)
+ (call $two)
+ )
+ (func $two (; 2 ;) (type $1) (result i32)
+ (get_global $int)
+ )
+ (func $three (; 3 ;) (type $2)
+ (call $four)
+ )
+ (func $four (; 4 ;) (type $2)
+ (set_global $set
+ (i32.const 200)
+ )
+ (drop
+ (call $_puts
+ (i32.const 300)
+ )
+ )
+ )
+ (func $forget_implemented (; 5 ;) (type $2)
+ (nop)
+ )
+ (func $starter (; 6 ;) (type $2)
+ (nop)
+ )
+)
+(module
+ (type $0 (func))
+ (func $starter (; 0 ;) (type $0)
+ (nop)
+ )
+)
+(module
+ (type $0 (func))
+ (start $starter)
+ (func $starter (; 0 ;) (type $0)
+ (drop
+ (i32.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (param f64) (result f64)))
+ (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64)
+ (if (result f64)
+ (f64.eq
+ (f64.const 1)
+ (f64.const 1)
+ )
+ (f64.const 1)
+ (f64.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (param f64) (result f64)))
+ (table 6 6 anyfunc)
+ (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64)
+ (if (result f64)
+ (f64.eq
+ (f64.const 1)
+ (f64.const 1)
+ )
+ (call_indirect (type $0)
+ (f64.const 1)
+ (i32.const 0)
+ )
+ (f64.const 0)
+ )
+ )
+)
+(module
+ (type $0 (func (param f64) (result f64)))
+ (import "env" "table" (table 6 6 anyfunc))
+ (elem (i32.const 0) $0)
+ (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64)
+ (if (result f64)
+ (f64.eq
+ (f64.const 1)
+ (f64.const 1)
+ )
+ (f64.const 1)
+ (f64.const 0)
+ )
+ )
+)