summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-09-06 14:47:12 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 18:41:22 -0700
commit779c2a20af50c351fb725b785a0ed6932143280d (patch)
treebfdb69584d406b938b715b2ee1fe8dfdee966b0c /src
parent92ec03790fb9c6a5c72002eb739e017178eabf3e (diff)
downloadbinaryen-779c2a20af50c351fb725b785a0ed6932143280d.tar.gz
binaryen-779c2a20af50c351fb725b785a0ed6932143280d.tar.bz2
binaryen-779c2a20af50c351fb725b785a0ed6932143280d.zip
optimize out eqz^2
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.wast15
-rw-r--r--src/passes/OptimizeInstructions.wast.processed15
2 files changed, 30 insertions, 0 deletions
diff --git a/src/passes/OptimizeInstructions.wast b/src/passes/OptimizeInstructions.wast
index 48a4e2c9d..d5f8148ec 100644
--- a/src/passes/OptimizeInstructions.wast
+++ b/src/passes/OptimizeInstructions.wast
@@ -34,6 +34,21 @@
(call_import $any.expr (i32.const 1))
)
)
+ ;; eqz^2 is eliminatable if the output is boolean (note that for if-else, the above rule handles it in two operations)
+ (block
+ (if
+ (i32.eqz
+ (i32.eqz
+ (call_import $i32.expr (i32.const 0))
+ )
+ )
+ (call_import $any.expr (i32.const 1))
+ )
+ (if
+ (call_import $i32.expr (i32.const 0))
+ (call_import $any.expr (i32.const 1))
+ )
+ )
;; equal 0 => eqz
(block
(i32.eq
diff --git a/src/passes/OptimizeInstructions.wast.processed b/src/passes/OptimizeInstructions.wast.processed
index 13ccc8241..78e5e7476 100644
--- a/src/passes/OptimizeInstructions.wast.processed
+++ b/src/passes/OptimizeInstructions.wast.processed
@@ -34,6 +34,21 @@
"(call_import $any.expr (i32.const 1))\n"
")\n"
")\n"
+";; eqz^2 is eliminatable if the output is boolean (note that for if-else, the above rule handles it in two operations)\n"
+"(block\n"
+"(if\n"
+"(i32.eqz\n"
+"(i32.eqz\n"
+"(call_import $i32.expr (i32.const 0))\n"
+")\n"
+")\n"
+"(call_import $any.expr (i32.const 1))\n"
+")\n"
+"(if\n"
+"(call_import $i32.expr (i32.const 0))\n"
+"(call_import $any.expr (i32.const 1))\n"
+")\n"
+")\n"
";; equal 0 => eqz\n"
"(block\n"
"(i32.eq\n"