summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/optimize-instructions_all-features.txt50
-rw-r--r--test/passes/optimize-instructions_all-features.wast38
-rw-r--r--test/passes/remove-unused-names_optimize-instructions_all-features.txt104
-rw-r--r--test/passes/remove-unused-names_optimize-instructions_all-features.wast78
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)))
+ )
+)