diff options
Diffstat (limited to 'src/passes/OptimizeInstructions.wast')
-rw-r--r-- | src/passes/OptimizeInstructions.wast | 132 |
1 files changed, 2 insertions, 130 deletions
diff --git a/src/passes/OptimizeInstructions.wast b/src/passes/OptimizeInstructions.wast index 48a4e2c9d..5142dc2c6 100644 --- a/src/passes/OptimizeInstructions.wast +++ b/src/passes/OptimizeInstructions.wast @@ -17,138 +17,10 @@ (import $f64.expr "dsl" "f64.expr" (param i32) (result f64)) (import $any.expr "dsl" "any.expr" (param i32) (result i32)) ;; ignorable return type - ;; main function. each block here is a pattern pair of input => output + ;; TODO for now wasm is not that convenient for a DSL like this. Needs rethinking. + (func $patterns - ;; flip if-else arms to get rid of an eqz - (block - (if - (i32.eqz - (call_import $i32.expr (i32.const 0)) - ) - (call_import $any.expr (i32.const 1)) - (call_import $any.expr (i32.const 2)) - ) - (if - (call_import $i32.expr (i32.const 0)) - (call_import $any.expr (i32.const 2)) - (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)))) - (i32.ne (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.ne (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.eq (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.lt_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.ge_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.lt_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.ge_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.le_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.gt_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.le_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.gt_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.gt_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.le_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.gt_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.le_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.ge_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.lt_s (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i32.ge_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1)))) - (i32.lt_u (call_import $i32.expr (i32.const 0)) (call_import $i32.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.eq (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.ne (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.ne (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.eq (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.lt_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.ge_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.lt_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.ge_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.le_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.gt_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.le_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.gt_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.gt_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.le_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.gt_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.le_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.ge_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.lt_s (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (i64.ge_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1)))) - (i64.lt_u (call_import $i64.expr (i32.const 0)) (call_import $i64.expr (i32.const 1))) - ) - (block - (i32.eqz (f32.eq (call_import $f32.expr (i32.const 0)) (call_import $f32.expr (i32.const 1)))) - (f32.ne (call_import $f32.expr (i32.const 0)) (call_import $f32.expr (i32.const 1))) - ) - (block - (i32.eqz (f32.ne (call_import $f32.expr (i32.const 0)) (call_import $f32.expr (i32.const 1)))) - (f32.eq (call_import $f32.expr (i32.const 0)) (call_import $f32.expr (i32.const 1))) - ) - (block - (i32.eqz (f64.eq (call_import $f64.expr (i32.const 0)) (call_import $f64.expr (i32.const 1)))) - (f64.ne (call_import $f64.expr (i32.const 0)) (call_import $f64.expr (i32.const 1))) - ) (block - (i32.eqz (f64.ne (call_import $f64.expr (i32.const 0)) (call_import $f64.expr (i32.const 1)))) - (f64.eq (call_import $f64.expr (i32.const 0)) (call_import $f64.expr (i32.const 1))) ) ) ) |