diff options
Diffstat (limited to 'test/lit/passes/merge-blocks.wast')
-rw-r--r-- | test/lit/passes/merge-blocks.wast | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/test/lit/passes/merge-blocks.wast b/test/lit/passes/merge-blocks.wast index 89eab22ae..e6136d4da 100644 --- a/test/lit/passes/merge-blocks.wast +++ b/test/lit/passes/merge-blocks.wast @@ -11,6 +11,9 @@ ;; CHECK: (type $struct (struct (field (mut i32)))) (type $struct (struct (field (mut i32)))) + ;; CHECK: (type $array (array (mut i32))) + (type $array (array (mut i32))) + ;; CHECK: (func $br_on_to_drop ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop @@ -90,4 +93,99 @@ (nop) ) ) + + ;; CHECK: (func $array.set (param $foo (ref $array)) + ;; CHECK-NEXT: (local $bar (ref null $array)) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (array.set $array + ;; CHECK-NEXT: (local.tee $bar + ;; CHECK-NEXT: (local.get $foo) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 37) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $array.set (param $foo (ref $array)) + (local $bar (ref null $array)) + (array.set $array + (block $block (result (ref null $array)) + (nop) + (nop) + (nop) + ;; Side effects in the first item on the array.set do not prevent moving + ;; the nops outside. + (local.tee $bar + (local.get $foo) + ) + ) + (i32.const 0) + (i32.const 37) + ) + ) + + ;; CHECK: (func $array.set-no-1 (param $foo (ref $array)) + ;; CHECK-NEXT: (local $bar i32) + ;; CHECK-NEXT: (array.set $array + ;; CHECK-NEXT: (local.get $foo) + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.tee $bar + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 37) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $array.set-no-1 (param $foo (ref $array)) + (local $bar i32) + (array.set $array + (local.get $foo) + (block $block (result i32) + (nop) + (nop) + (nop) + ;; Side effects in the second item do prevent optimizations, currently. + (local.tee $bar + (i32.const 0) + ) + ) + (i32.const 37) + ) + ) + + ;; CHECK: (func $array.set-no-2 (param $foo (ref $array)) + ;; CHECK-NEXT: (local $bar i32) + ;; CHECK-NEXT: (array.set $array + ;; CHECK-NEXT: (local.get $foo) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.tee $bar + ;; CHECK-NEXT: (i32.const 37) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $array.set-no-2 (param $foo (ref $array)) + (local $bar i32) + (array.set $array + (local.get $foo) + (i32.const 0) + (block $block (result i32) + (nop) + (nop) + (nop) + ;; Side effects in the third item do prevent optimizations, currently. + (local.tee $bar + (i32.const 37) + ) + ) + ) + ) ) |