diff options
Diffstat (limited to 'test/passes')
-rw-r--r-- | test/passes/optimize-instructions.txt | 134 | ||||
-rw-r--r-- | test/passes/optimize-instructions.wast | 224 |
2 files changed, 328 insertions, 30 deletions
diff --git a/test/passes/optimize-instructions.txt b/test/passes/optimize-instructions.txt index 14f29a783..a11bd0d66 100644 --- a/test/passes/optimize-instructions.txt +++ b/test/passes/optimize-instructions.txt @@ -417,18 +417,12 @@ ) ) (func $load-off-2 (type $3) (param $0 i32) (result i32) - (i32.store offset=2 - (i32.add - (i32.const 1) - (i32.const 3) - ) + (i32.store + (i32.const 6) (get_local $0) ) - (i32.store offset=2 - (i32.add - (i32.const 3) - (i32.const 1) - ) + (i32.store + (i32.const 6) (get_local $0) ) (i32.store offset=2 @@ -459,18 +453,12 @@ ) (get_local $0) ) - (i32.store offset=2 - (i32.add - (i32.const -15) - (i32.const 17) - ) + (i32.store + (i32.const 4) (get_local $0) ) - (i32.store offset=2 - (i32.add - (i32.const -21) - (i32.const 19) - ) + (i32.store + (i32.const 0) (get_local $0) ) (i32.store @@ -482,19 +470,13 @@ (get_local $0) ) (drop - (i32.load offset=2 - (i32.add - (i32.const 2) - (i32.const 4) - ) + (i32.load + (i32.const 8) ) ) (drop - (i32.load offset=2 - (i32.add - (i32.const 4) - (i32.const 2) - ) + (i32.load + (i32.const 8) ) ) (drop @@ -944,4 +926,96 @@ ) ) ) + (func $linear-sums (type $4) (param $0 i32) (param $1 i32) + (drop + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 4) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 12) + ) + ) + (drop + (i32.const 4) + ) + (drop + (i32.const 18) + ) + (drop + (i32.const 6) + ) + (drop + (i32.const -4) + ) + (drop + (i32.const 2) + ) + (drop + (i32.const 1) + ) + (drop + (i32.const 26) + ) + (drop + (i32.const -20) + ) + (drop + (i32.const 22) + ) + (drop + (i32.add + (i32.shl + (i32.const 1) + (get_local $0) + ) + (i32.const 14) + ) + ) + (drop + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const -66) + ) + ) + (drop + (i32.const 44) + ) + (drop + (i32.add + (i32.mul + (get_local $0) + (i32.const 10) + ) + (i32.const 14) + ) + ) + (drop + (i32.add + (i32.mul + (get_local $0) + (i32.const 2) + ) + (i32.const 34) + ) + ) + (drop + (get_local $0) + ) + ) ) diff --git a/test/passes/optimize-instructions.wast b/test/passes/optimize-instructions.wast index 8eec3f3cd..b9bd420da 100644 --- a/test/passes/optimize-instructions.wast +++ b/test/passes/optimize-instructions.wast @@ -1014,4 +1014,228 @@ ) ) ) + (func $linear-sums (param $0 i32) (param $1 i32) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.add + (get_local $0) + (i32.const -1) ;; -16, so cancels out! + ) + (i32.const 4) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $1) + (i32.const 20) + ) + (i32.shl + (i32.add + (get_local $0) + (i32.const -1) ;; -8, so sum is +12 + ) + (i32.const 3) + ) + ) + ) + (drop + (i32.add ;; simple sum + (i32.const 1) + (i32.const 3) + ) + ) + (drop + (i32.add ;; nested sum + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; internal sub + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.sub ;; external sub + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.sub ;; external sub + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; and also internal sub + (i32.const 5) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 1) + (i32.const 3) + ) + (i32.sub ;; negating sub + (i32.const 0) + (i32.const 3) + ) + ) + ) + (drop + (i32.add + (i32.sub + (i32.const 0) + (i32.sub ;; two negating subs + (i32.const 0) + (i32.add + (i32.const 3) + (i32.const 20) + ) + ) + ) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.add + (i32.add + (i32.const 0) + (i32.sub ;; one negating sub + (i32.const 0) + (i32.add + (i32.const 3) + (i32.const 20) + ) + ) + ) + (i32.add + (i32.const 1) + (i32.const 2) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted value + (i32.const 1) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted value + (i32.const 1) + (get_local $0) ;; but not by const + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.shl ;; shifted nested value + (i32.sub + (get_local $1) + (i32.const 10) + ) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; multiplied + (i32.const 10) + (i32.const 3) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; multiplied by nonconstant - can't recurse + (i32.const 10) + (get_local $0) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.mul ;; nested mul + (i32.add + (i32.const 10) + (get_local $0) + ) + (i32.const 2) + ) + (i32.add + (i32.const 5) + (i32.const 9) + ) + ) + ) + (drop + (i32.add + (i32.add + (get_local $0) + (i32.const 10) ;; cancelled out with the below + ) + (i32.sub + (i32.const -5) + (i32.const 5) + ) + ) + ) + ) ) |