diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/OptimizeInstructions.wast | 15 | ||||
-rw-r--r-- | src/passes/OptimizeInstructions.wast.processed | 15 |
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" |