diff options
author | Jérôme Vouillon <jerome.vouillon@gmail.com> | 2024-04-18 13:05:53 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-18 10:05:53 -0700 |
commit | 3fd5c4f3dfc0fc2ccd1dc5ed39e4f0ffb46c10b8 (patch) | |
tree | 40d2ddfd2f5f18a6476d5f007e09c4a4b826eff2 /test/lit/passes/optimize-casts.wast | |
parent | 1eedf1e3e76b4650015cec007a9d7f8c4be3898b (diff) | |
download | binaryen-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.wast | 37 |
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: ) |