diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-11 20:17:36 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-11 20:17:36 -0700 |
commit | 57c8e86a69e7d191e3a5698f81bc7e7627716bf0 (patch) | |
tree | 31ab2bbf4ee513adce80377e593abeb66e3424d9 | |
parent | dbfe22ed34ac3941ff14946b34f4ac4acfda3359 (diff) | |
download | binaryen-57c8e86a69e7d191e3a5698f81bc7e7627716bf0.tar.gz binaryen-57c8e86a69e7d191e3a5698f81bc7e7627716bf0.tar.bz2 binaryen-57c8e86a69e7d191e3a5698f81bc7e7627716bf0.zip |
add simplify-locals testcase
-rw-r--r-- | test/passes/simplify-locals.txt | 197 | ||||
-rw-r--r-- | test/passes/simplify-locals.wast | 197 |
2 files changed, 394 insertions, 0 deletions
diff --git a/test/passes/simplify-locals.txt b/test/passes/simplify-locals.txt index 8c8c3a7da..e77dc4780 100644 --- a/test/passes/simplify-locals.txt +++ b/test/passes/simplify-locals.txt @@ -2,8 +2,12 @@ (memory 256 256) (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (import $waka "env" "waka") (import $waka_int "env" "waka_int" (result i32)) + (import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32)) + (import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32)) (func $b0-yes (param $i1 i32) (local $x i32) (local $y i32) @@ -264,4 +268,197 @@ ) (i32.const 456) ) + (func $___remdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$1 i32) + (local $$1$0 i32) + (local $$rem i32) + (local $__stackBase__ i32) + (local $$2$1 i32) + (local $$2$0 i32) + (local $$4$1 i32) + (local $$4$0 i32) + (local $$10$1 i32) + (local $$10$0 i32) + (local $$6$0 i32) + (set_local $__stackBase__ + (i32.load + (i32.const 8) + ) + ) + (i32.store + (i32.const 8) + (i32.add + (i32.load + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call_import $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (nop) + (call_import $___udivmoddi4 + (get_local $$4$0) + (i32.load + (i32.const 168) + ) + (call_import $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + (i32.load + (i32.const 168) + ) + (get_local $$rem) + ) + (set_local $$10$0 + (call_import $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load offset=4 + (get_local $$rem) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (i32.const 8) + (get_local $__stackBase__) + ) + (return + (block $block12 + (i32.store + (i32.const 168) + (get_local $$10$1) + ) + (get_local $$10$0) + ) + ) + ) ) diff --git a/test/passes/simplify-locals.wast b/test/passes/simplify-locals.wast index 8ab2fca58..1b71c46b5 100644 --- a/test/passes/simplify-locals.wast +++ b/test/passes/simplify-locals.wast @@ -2,6 +2,8 @@ (memory 256 256) (import $waka "env" "waka") (import $waka_int "env" "waka_int" (result i32)) + (import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32)) + (import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32)) (func $b0-yes (param $i1 i32) (local $x i32) (local $y i32) @@ -190,5 +192,200 @@ ) (set_local $set_with_no_get (i32.const 456)) ) + (func $___remdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) + (local $$1$1 i32) + (local $$1$0 i32) + (local $$rem i32) + (local $__stackBase__ i32) + (local $$2$1 i32) + (local $$2$0 i32) + (local $$4$1 i32) + (local $$4$0 i32) + (local $$10$1 i32) + (local $$10$0 i32) + (local $$6$0 i32) + (set_local $__stackBase__ + (i32.load + (i32.const 8) + ) + ) + (i32.store + (i32.const 8) + (i32.add + (i32.load + (i32.const 8) + ) + (i32.const 16) + ) + ) + (set_local $$rem + (get_local $__stackBase__) + ) + (set_local $$1$0 + (i32.or + (i32.shr_s + (get_local $$a$1) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$1$1 + (i32.or + (i32.shr_s + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$a$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$0 + (i32.or + (i32.shr_s + (get_local $$b$1) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$2$1 + (i32.or + (i32.shr_s + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.shl + (if + (i32.lt_s + (get_local $$b$1) + (i32.const 0) + ) + (i32.const -1) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $$4$0 + (call_import $_i64Subtract + (i32.xor + (get_local $$1$0) + (get_local $$a$0) + ) + (i32.xor + (get_local $$1$1) + (get_local $$a$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$4$1 ;; first this moves, then $$4$0 should be able to move + (i32.load + (i32.const 168) + ) + ) + (call_import $___udivmoddi4 + (get_local $$4$0) + (get_local $$4$1) + (call_import $_i64Subtract + (i32.xor + (get_local $$2$0) + (get_local $$b$0) + ) + (i32.xor + (get_local $$2$1) + (get_local $$b$1) + ) + (get_local $$2$0) + (get_local $$2$1) + ) + (i32.load + (i32.const 168) + ) + (get_local $$rem) + ) + (set_local $$10$0 + (call_import $_i64Subtract + (i32.xor + (i32.load + (get_local $$rem) + ) + (get_local $$1$0) + ) + (i32.xor + (i32.load offset=4 + (get_local $$rem) + ) + (get_local $$1$1) + ) + (get_local $$1$0) + (get_local $$1$1) + ) + ) + (set_local $$10$1 + (i32.load + (i32.const 168) + ) + ) + (i32.store + (i32.const 8) + (get_local $__stackBase__) + ) + (return + (block + (i32.store + (i32.const 168) + (get_local $$10$1) + ) + (get_local $$10$0) + ) + ) + ) ) |