diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/passes/directize.txt | 159 | ||||
-rw-r--r-- | test/passes/directize.wast | 182 | ||||
-rw-r--r-- | test/reduce/memory_table.wast.txt | 25 |
3 files changed, 349 insertions, 17 deletions
diff --git a/test/passes/directize.txt b/test/passes/directize.txt new file mode 100644 index 000000000..6e0644c01 --- /dev/null +++ b/test/passes/directize.txt @@ -0,0 +1,159 @@ +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call $foo + (local.get $x) + (local.get $y) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 4) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call $foo + (local.get $x) + (local.get $y) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 0) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call $foo + (local.get $x) + (local.get $y) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 0) $foo $foo $foo $foo $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call $foo + (local.get $x) + (local.get $y) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (import "env" "table" (table $0 5 5 funcref)) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (export "tab" (table $0)) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (global.get $g) $foo) + (global $g (mut i32) (i32.const 1)) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (type $1 (func (param i32 i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $1) (param $x i32) (param $y i32) (param $z i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (local.get $z) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (unreachable) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $ii) (param $0 i32) (param $1 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (unreachable) + ) +) +(module + (type $ii (func (param i32 i32))) + (type $1 (func (param i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (; 0 ;) (type $1) (param $0 i32) + (unreachable) + ) + (func $bar (; 1 ;) (type $ii) (param $x i32) (param $y i32) + (unreachable) + ) +) +(module + (type $0 (func (param i32))) + (func $foo (; 0 ;) (type $0) (param $0 i32) + (unreachable) + ) +) diff --git a/test/passes/directize.wast b/test/passes/directize.wast new file mode 100644 index 000000000..8e6839457 --- /dev/null +++ b/test/passes/directize.wast @@ -0,0 +1,182 @@ +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +;; at table edges +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 4) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 4) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 0) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 0) + ) + ) +) +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 0) $foo $foo $foo $foo $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 2) + ) + ) +) +;; imported table +(module + (type $ii (func (param i32 i32))) + (import "env" "table" (table $table 5 5 funcref)) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +;; exported table +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (export "tab" (table $0)) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +;; non-constant table offset +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (global $g (mut i32) (i32.const 1)) + (elem (global.get $g) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +;; non-constant call index +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) (param $z i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (local.get $z) + ) + ) +) +;; bad index +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 5) + ) + ) +) +;; missing index +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (param i32) (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 2) + ) + ) +) +;; bad type +(module + (type $ii (func (param i32 i32))) + (table $0 5 5 funcref) + (elem (i32.const 1) $foo) + (func $foo (param i32) + (unreachable) + ) + (func $bar (param $x i32) (param $y i32) + (call_indirect (type $ii) + (local.get $x) + (local.get $y) + (i32.const 1) + ) + ) +) +;; no table +(module + (func $foo (param i32) + (unreachable) + ) +) + diff --git a/test/reduce/memory_table.wast.txt b/test/reduce/memory_table.wast.txt index 3c3b80ca8..1665c7a4e 100644 --- a/test/reduce/memory_table.wast.txt +++ b/test/reduce/memory_table.wast.txt @@ -2,18 +2,13 @@ (type $0 (func (result i32))) (type $1 (func)) (memory $0 256 256) - (table $0 481 481 funcref) - (elem (i32.const 0) $0 $0 $0 $2) - (export "f1" (func $1)) - (export "f2" (func $2)) - (export "f4" (func $3)) - (func $0 (; 0 ;) (type $0) (result i32) - (i32.const 1234) - ) - (func $1 (; 1 ;) (type $1) + (export "f1" (func $0)) + (export "f2" (func $1)) + (export "f4" (func $2)) + (func $0 (; 0 ;) (type $1) (nop) ) - (func $2 (; 2 ;) (type $0) (result i32) + (func $1 (; 1 ;) (type $0) (result i32) (i32.store (i32.const 0) (i32.const 65530) @@ -22,14 +17,10 @@ (i32.const 0) ) ) - (func $3 (; 3 ;) (type $0) (result i32) + (func $2 (; 2 ;) (type $0) (result i32) (i32.add - (call_indirect (type $0) - (i32.const 3) - ) - (call_indirect (type $0) - (i32.const 0) - ) + (call $1) + (i32.const 1234) ) ) ) |