summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2022-05-31 14:45:42 -0700
committerGitHub <noreply@github.com>2022-05-31 21:45:42 +0000
commit6257a5857a42fec6b86352b03c1e92dcb7a490ea (patch)
tree26169d49d4f095e0f84d0d9d9e01a691e1173e2b /test
parentc4988562f9ed04400fc348bf99d5709cf063d96e (diff)
downloadbinaryen-6257a5857a42fec6b86352b03c1e92dcb7a490ea.tar.gz
binaryen-6257a5857a42fec6b86352b03c1e92dcb7a490ea.tar.bz2
binaryen-6257a5857a42fec6b86352b03c1e92dcb7a490ea.zip
[WasmGC] Fix try-catch and non-nullable local sets in values in SimplifyLocals (#4705)
Followup to #4703, this also handles the case where there is a non- nullable local.set in the value of a nullable one, which we also cannot optimize. Fixes #4702
Diffstat (limited to 'test')
-rw-r--r--test/lit/passes/simplify-locals-gc-nn.wast69
1 files changed, 68 insertions, 1 deletions
diff --git a/test/lit/passes/simplify-locals-gc-nn.wast b/test/lit/passes/simplify-locals-gc-nn.wast
index eec97a4d4..9d75b3d80 100644
--- a/test/lit/passes/simplify-locals-gc-nn.wast
+++ b/test/lit/passes/simplify-locals-gc-nn.wast
@@ -87,4 +87,71 @@
)
)
)
- ))
+ )
+
+ ;; CHECK: (func $test-nested-nn
+ ;; CHECK-NEXT: (local $nullable anyref)
+ ;; CHECK-NEXT: (local $nn (ref any))
+ ;; CHECK-NEXT: (local.set $nullable
+ ;; CHECK-NEXT: (block $block (result (ref any))
+ ;; CHECK-NEXT: (local.set $nn
+ ;; CHECK-NEXT: (ref.as_non_null
+ ;; CHECK-NEXT: (ref.null any)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (ref.as_non_null
+ ;; CHECK-NEXT: (ref.null any)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (try $try
+ ;; CHECK-NEXT: (do
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $nullable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (catch_all
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $nullable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $nn)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $test-nested-nn
+ ;; As above, the set we want to move is nullable, but now it has a nested
+ ;; value that is a non-nullable set. That should also prevent us from
+ ;; moving it.
+ (local $nullable (ref null any))
+ (local $nn (ref any))
+ (local.set $nullable
+ (block (result (ref any))
+ (local.set $nn
+ (ref.as_non_null
+ (ref.null any)
+ )
+ )
+ (ref.as_non_null
+ (ref.null any)
+ )
+ )
+ )
+ (try
+ (do
+ (drop
+ (local.get $nullable)
+ )
+ )
+ (catch_all
+ (drop
+ (local.get $nullable)
+ )
+ (drop
+ (local.get $nn)
+ )
+ )
+ )
+ )
+)