summaryrefslogtreecommitdiff
path: root/test/lit/passes/optimize-casts.wast
diff options
context:
space:
mode:
authorJérôme Vouillon <jerome.vouillon@gmail.com>2024-04-18 13:05:53 -0400
committerGitHub <noreply@github.com>2024-04-18 10:05:53 -0700
commit3fd5c4f3dfc0fc2ccd1dc5ed39e4f0ffb46c10b8 (patch)
tree40d2ddfd2f5f18a6476d5f007e09c4a4b826eff2 /test/lit/passes/optimize-casts.wast
parent1eedf1e3e76b4650015cec007a9d7f8c4be3898b (diff)
downloadbinaryen-3fd5c4f3dfc0fc2ccd1dc5ed39e4f0ffb46c10b8.tar.gz
binaryen-3fd5c4f3dfc0fc2ccd1dc5ed39e4f0ffb46c10b8.tar.bz2
binaryen-3fd5c4f3dfc0fc2ccd1dc5ed39e4f0ffb46c10b8.zip
OptimizeCasts: Also handle local.tee (#6507)
Converts the following: (some.operation (ref.cast .. (local.tee $ref ..)) (local.get $ref) ) into: (some.operation (local.tee $temp (ref.cast .. (local.tee $ref ..)) ) (local.get $temp) )
Diffstat (limited to 'test/lit/passes/optimize-casts.wast')
-rw-r--r--test/lit/passes/optimize-casts.wast37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/lit/passes/optimize-casts.wast b/test/lit/passes/optimize-casts.wast
index 512a04e9d..a10540f5d 100644
--- a/test/lit/passes/optimize-casts.wast
+++ b/test/lit/passes/optimize-casts.wast
@@ -1352,6 +1352,43 @@
)
)
+ ;; CHECK: (func $local-tee (type $2) (param $x (ref struct))
+ ;; CHECK-NEXT: (local $y (ref struct))
+ ;; CHECK-NEXT: (local $2 (ref $A))
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.tee $2
+ ;; CHECK-NEXT: (ref.cast (ref $A)
+ ;; CHECK-NEXT: (local.tee $y
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $local-tee (param $x (ref struct))
+ (local $y (ref struct))
+ ;; We should use the cast value after it has been computed, in both gets.
+ (drop
+ (ref.cast (ref $A)
+ (local.tee $y
+ (local.get $x)
+ )
+ )
+ )
+ (drop
+ (local.get $x)
+ )
+ (drop
+ (local.get $y)
+ )
+ )
+
;; CHECK: (func $get (type $11) (result (ref struct))
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )