diff options
Diffstat (limited to 'test')
4 files changed, 240 insertions, 30 deletions
diff --git a/test/passes/optimize-instructions_all-features.txt b/test/passes/optimize-instructions_all-features.txt index 53c28e896..1df99cc21 100644 --- a/test/passes/optimize-instructions_all-features.txt +++ b/test/passes/optimize-instructions_all-features.txt @@ -13,6 +13,7 @@ (type $i32_i64_f32_f64_=>_none (func (param i32 i64 f32 f64))) (type $i32_i64_f64_i32_=>_none (func (param i32 i64 f64 i32))) (type $none_=>_f64 (func (result f64))) + (type $none_=>_anyref (func (result anyref))) (memory $0 0) (export "load-off-2" (func $load-off-2)) (func $f (; 0 ;) (param $i1 i32) (param $i2 i64) @@ -216,6 +217,18 @@ (i32.const 123) (nop) ) + (if + (try (result i32) + (i32.const 123) + (catch + (drop + (exnref.pop) + ) + (i32.const 456) + ) + ) + (nop) + ) (drop (select (i32.const 102) @@ -436,7 +449,7 @@ ) (drop (i32.and - (block $block3 (result i32) + (block $block4 (result i32) (i32.const -6) ) (local.get $x) @@ -444,7 +457,7 @@ ) (drop (i32.and - (block $block4 (result i32) + (block $block5 (result i32) (i32.const 5) ) (loop $loop-in (result i32) @@ -454,20 +467,20 @@ ) (drop (i32.and - (block $block6 (result i32) + (block $block7 (result i32) (i32.const 8) ) - (loop $loop-in5 (result i32) + (loop $loop-in6 (result i32) (i32.const 7) ) ) ) (drop (i32.and - (block $block8 (result i32) + (block $block9 (result i32) (i32.const 10) ) - (loop $loop-in7 (result i32) + (loop $loop-in8 (result i32) (call $and-pos1) (i32.const 9) ) @@ -475,22 +488,22 @@ ) (drop (i32.and - (block $block10 (result i32) + (block $block11 (result i32) (call $and-pos1) (i32.const 12) ) - (loop $loop-in9 (result i32) + (loop $loop-in10 (result i32) (i32.const 11) ) ) ) (drop (i32.and - (loop $loop-in11 (result i32) + (loop $loop-in12 (result i32) (call $and-pos1) (i32.const 13) ) - (block $block12 (result i32) + (block $block13 (result i32) (call $and-pos1) (i32.const 14) ) @@ -498,11 +511,11 @@ ) (drop (i32.and - (block $block13 (result i32) + (block $block14 (result i32) (call $and-pos1) (i32.const 14) ) - (loop $loop-in14 (result i32) + (loop $loop-in15 (result i32) (call $and-pos1) (i32.const 13) ) @@ -510,7 +523,7 @@ ) (drop (i32.and - (block $block15 (result i32) + (block $block16 (result i32) (i32.const 15) ) (local.get $x) @@ -518,7 +531,7 @@ ) (drop (i32.and - (block $block16 (result i32) + (block $block17 (result i32) (i32.const 15) ) (local.get $x) @@ -3319,6 +3332,9 @@ (unreachable) ) ) + (func $if-arms-subtype (; 78 ;) (result anyref) + (ref.null) + ) ) (module (type $none_=>_none (func)) @@ -3337,9 +3353,3 @@ ) ) ) -(module - (type $none_=>_anyref (func (result anyref))) - (func $test (; 0 ;) (result anyref) - (ref.null) - ) -) diff --git a/test/passes/optimize-instructions_all-features.wast b/test/passes/optimize-instructions_all-features.wast index 75993effa..5078e74c5 100644 --- a/test/passes/optimize-instructions_all-features.wast +++ b/test/passes/optimize-instructions_all-features.wast @@ -238,6 +238,26 @@ ) (nop) ) + (if + (try (result i32) + (i32.eqz + (i32.eqz + (i32.const 123) + ) + ) + (catch + (drop + (exnref.pop) + ) + (i32.eqz + (i32.eqz + (i32.const 456) + ) + ) + ) + ) + (nop) + ) (drop (select (i32.const 101) @@ -3766,6 +3786,14 @@ (unreachable) ) ) + ;; Tests when if arms are subtype of if's type + (func $if-arms-subtype (result anyref) + (if (result anyref) + (i32.const 0) + (ref.null) + (ref.null) + ) + ) ) (module (import "env" "memory" (memory $0 (shared 256 256))) @@ -3783,13 +3811,3 @@ ) ) ) -(module - ;; Tests when if arms are subtype of if's type - (func $test (result anyref) - (if (result anyref) - (i32.const 0) - (ref.null) - (ref.null) - ) - ) -) diff --git a/test/passes/remove-unused-names_optimize-instructions_all-features.txt b/test/passes/remove-unused-names_optimize-instructions_all-features.txt new file mode 100644 index 000000000..03c30c6c3 --- /dev/null +++ b/test/passes/remove-unused-names_optimize-instructions_all-features.txt @@ -0,0 +1,104 @@ +(module + (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (event $e (attr 0) (param i32)) + (func $dummy (; 0 ;) + (nop) + ) + (func $getFallthrough (; 1 ;) + (local $x0 i32) + (local $x1 i32) + (local $x2 i32) + (local $x3 i32) + (local.set $x0 + (try (result i32) + (i32.const 1) + (catch + (drop + (exnref.pop) + ) + (i32.const 3) + ) + ) + ) + (drop + (local.get $x0) + ) + (local.set $x1 + (try (result i32) + (block (result i32) + (call $dummy) + (i32.const 1) + ) + (catch + (drop + (exnref.pop) + ) + (i32.const 3) + ) + ) + ) + (drop + (i32.and + (local.get $x1) + (i32.const 7) + ) + ) + (local.set $x2 + (try (result i32) + (block (result i32) + (try + (throw $e + (i32.const 0) + ) + (catch + (drop + (exnref.pop) + ) + ) + ) + (i32.const 1) + ) + (catch + (drop + (exnref.pop) + ) + (i32.const 3) + ) + ) + ) + (drop + (local.get $x2) + ) + (local.set $x3 + (try (result i32) + (block (result i32) + (try + (nop) + (catch + (drop + (exnref.pop) + ) + (throw $e + (i32.const 0) + ) + ) + ) + (i32.const 1) + ) + (catch + (drop + (exnref.pop) + ) + (i32.const 3) + ) + ) + ) + (drop + (i32.and + (local.get $x3) + (i32.const 7) + ) + ) + ) +) diff --git a/test/passes/remove-unused-names_optimize-instructions_all-features.wast b/test/passes/remove-unused-names_optimize-instructions_all-features.wast new file mode 100644 index 000000000..bb8f90074 --- /dev/null +++ b/test/passes/remove-unused-names_optimize-instructions_all-features.wast @@ -0,0 +1,78 @@ +(module + (func $dummy) + (event $e (attr 0) (param i32)) + + (func $getFallthrough ;; unit tests for Properties::getFallthrough + (local $x0 i32) + (local $x1 i32) + (local $x2 i32) + (local $x3 i32) + + ;; try - try body does not throw, can + (local.set $x0 + (try (result i32) + (i32.const 1) + (catch + (drop (exnref.pop)) + (i32.const 3) + ) + ) + ) + (drop (i32.and (local.get $x0) (i32.const 7))) + + ;; try - try body may throw, can't + (local.set $x1 + (try (result i32) + (block (result i32) + (call $dummy) + (i32.const 1) + ) + (catch + (drop (exnref.pop)) + (i32.const 3) + ) + ) + ) + (drop (i32.and (local.get $x1) (i32.const 7))) + + ;; nested try - inner try may throw but will be caught by inner catch, can + (local.set $x2 + (try (result i32) + (block (result i32) + (try + (throw $e (i32.const 0)) + (catch + (drop (exnref.pop)) + ) + ) + (i32.const 1) + ) + (catch + (drop (exnref.pop)) + (i32.const 3) + ) + ) + ) + (drop (i32.and (local.get $x2) (i32.const 7))) + + ;; nested try - inner catch may throw, can't + (local.set $x3 + (try (result i32) + (block (result i32) + (try + (catch + (drop (exnref.pop)) + (throw $e (i32.const 0)) + ) + ) + (i32.const 1) + ) + (catch + (drop (exnref.pop)) + (i32.const 3) + ) + ) + ) + (drop (i32.and (local.get $x3) (i32.const 7))) + ) +) |