summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-09-06 10:32:02 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 18:41:22 -0700
commit8f0726cc87494f6721baab55ec035fa3facae0e3 (patch)
tree18ab09d83788f2121cd4117cdb373698f4286c1b /src
parent87f65f1623983bfc516ff4b222a3bb2537971837 (diff)
downloadbinaryen-8f0726cc87494f6721baab55ec035fa3facae0e3.tar.gz
binaryen-8f0726cc87494f6721baab55ec035fa3facae0e3.tar.bz2
binaryen-8f0726cc87494f6721baab55ec035fa3facae0e3.zip
use eqz as an optimization
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.wast21
-rw-r--r--src/passes/OptimizeInstructions.wast.processed21
2 files changed, 40 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.wast b/src/passes/OptimizeInstructions.wast
index 7d5c56881..48a4e2c9d 100644
--- a/src/passes/OptimizeInstructions.wast
+++ b/src/passes/OptimizeInstructions.wast
@@ -19,8 +19,8 @@
;; main function. each block here is a pattern pair of input => output
(func $patterns
+ ;; flip if-else arms to get rid of an eqz
(block
- ;; flip if-else arms to get rid of an eqz
(if
(i32.eqz
(call_import $i32.expr (i32.const 0))
@@ -34,6 +34,25 @@
(call_import $any.expr (i32.const 1))
)
)
+ ;; equal 0 => eqz
+ (block
+ (i32.eq
+ (call_import $any.expr (i32.const 0))
+ (i32.const 0)
+ )
+ (i32.eqz
+ (call_import $any.expr (i32.const 0))
+ )
+ )
+ (block
+ (i32.eq
+ (i32.const 0)
+ (call_import $any.expr (i32.const 0))
+ )
+ (i32.eqz
+ (call_import $any.expr (i32.const 0))
+ )
+ )
;; De Morgans Laws
(block
(i32.eqz (i32.eq (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))))
diff --git a/src/passes/OptimizeInstructions.wast.processed b/src/passes/OptimizeInstructions.wast.processed
index 61fde86c6..13ccc8241 100644
--- a/src/passes/OptimizeInstructions.wast.processed
+++ b/src/passes/OptimizeInstructions.wast.processed
@@ -19,8 +19,8 @@
"\n"
";; main function. each block here is a pattern pair of input => output\n"
"(func $patterns\n"
-"(block\n"
";; flip if-else arms to get rid of an eqz\n"
+"(block\n"
"(if\n"
"(i32.eqz\n"
"(call_import $i32.expr (i32.const 0))\n"
@@ -34,6 +34,25 @@
"(call_import $any.expr (i32.const 1))\n"
")\n"
")\n"
+";; equal 0 => eqz\n"
+"(block\n"
+"(i32.eq\n"
+"(call_import $any.expr (i32.const 0))\n"
+"(i32.const 0)\n"
+")\n"
+"(i32.eqz\n"
+"(call_import $any.expr (i32.const 0))\n"
+")\n"
+")\n"
+"(block\n"
+"(i32.eq\n"
+"(i32.const 0)\n"
+"(call_import $any.expr (i32.const 0))\n"
+")\n"
+"(i32.eqz\n"
+"(call_import $any.expr (i32.const 0))\n"
+")\n"
+")\n"
";; De Morgans Laws\n"
"(block\n"
"(i32.eqz (i32.eq (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))))\n"