summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/passes/simplify-locals.txt197
-rw-r--r--test/passes/simplify-locals.wast197
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)
+ )
+ )
+ )
)