summaryrefslogtreecommitdiff
path: root/test/lit
diff options
context:
space:
mode:
Diffstat (limited to 'test/lit')
-rw-r--r--test/lit/passes/O4_disable-bulk-memory.wast29
-rw-r--r--test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast6
-rw-r--r--test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast6
-rw-r--r--test/lit/passes/simplify-locals-gc.wast63
4 files changed, 81 insertions, 23 deletions
diff --git a/test/lit/passes/O4_disable-bulk-memory.wast b/test/lit/passes/O4_disable-bulk-memory.wast
index 89a172661..5029f13e9 100644
--- a/test/lit/passes/O4_disable-bulk-memory.wast
+++ b/test/lit/passes/O4_disable-bulk-memory.wast
@@ -1371,7 +1371,7 @@
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
;; CHECK-NEXT: (i32.add
- ;; CHECK-NEXT: (local.tee $1
+ ;; CHECK-NEXT: (local.tee $3
;; CHECK-NEXT: (i32.and
;; CHECK-NEXT: (i32.sub
;; CHECK-NEXT: (i32.const 20)
@@ -1389,7 +1389,7 @@
;; CHECK-NEXT: (block $__inlined_func$~lib/internal/memory/memset$8
;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset$8
;; CHECK-NEXT: (i32.le_u
- ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (local.get $3)
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
@@ -1409,10 +1409,10 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.tee $3
+ ;; CHECK-NEXT: (local.tee $1
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
- ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (local.get $3)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 12)
@@ -1421,14 +1421,14 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset$8
;; CHECK-NEXT: (i32.le_u
- ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (local.get $3)
;; CHECK-NEXT: (i32.const 24)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
@@ -1462,40 +1462,35 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.tee $3
- ;; CHECK-NEXT: (i32.add
- ;; CHECK-NEXT: (local.get $0)
- ;; CHECK-NEXT: (local.get $1)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (i32.const 28)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (i32.const 24)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $0
;; CHECK-NEXT: (i32.add
- ;; CHECK-NEXT: (local.tee $3
+ ;; CHECK-NEXT: (local.tee $1
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (i32.and
;; CHECK-NEXT: (local.get $0)
@@ -1509,8 +1504,8 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $1
;; CHECK-NEXT: (i32.sub
- ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (local.get $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (loop $label$8
diff --git a/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast b/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast
index 3a4b0265c..7103c94e8 100644
--- a/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast
+++ b/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast
@@ -3487,7 +3487,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (local.set $6
@@ -3498,7 +3498,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: (unreachable)
@@ -3614,7 +3614,7 @@
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (local.set $6
;; CHECK-NEXT: (i32.clz
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
diff --git a/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast b/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast
index 05731dfe9..163785fd4 100644
--- a/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast
+++ b/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast
@@ -3555,7 +3555,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (local.set $6
@@ -3566,7 +3566,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: (unreachable)
@@ -3682,7 +3682,7 @@
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (local.set $6
;; CHECK-NEXT: (i32.clz
- ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $var$0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
diff --git a/test/lit/passes/simplify-locals-gc.wast b/test/lit/passes/simplify-locals-gc.wast
index 6b2b10462..155649dbb 100644
--- a/test/lit/passes/simplify-locals-gc.wast
+++ b/test/lit/passes/simplify-locals-gc.wast
@@ -541,4 +541,67 @@
)
)
)
+
+ ;; CHECK: (func $equivalent-set-removal-branching (type $i32_anyref_=>_none) (param $0 i32) (param $any anyref)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (block $block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $block
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_on_null $block
+ ;; CHECK-NEXT: (local.get $any)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $block)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $equivalent-set-removal-branching (param $0 i32) (param $any anyref)
+ (local $1 i32)
+ (block $block
+ (local.set $1 (local.get $0))
+ (br_if $block
+ (local.get $0)
+ )
+ (drop
+ (br_on_null $block
+ (local.get $any)
+ )
+ )
+ ;; We can optimize these to both use the same local index, as they must
+ ;; contain the same value, even past the br_if and br_on_null.
+ (drop (local.get $0))
+ (drop (local.get $1))
+ (br $block)
+ ;; But we do not optimize these as they are after an unconditional br
+ ;; (so they are unreachable code).
+ (drop (local.get $0))
+ (drop (local.get $1))
+ )
+ ;; Past the end of the block we do not optimize. The local.set actually does
+ ;; dominate these, but currently we do not realize that in this pass. TODO
+ (drop (local.get $0))
+ (drop (local.get $1))
+ )
)