diff options
author | Alon Zakai <azakai@google.com> | 2024-10-14 16:07:57 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-14 16:07:57 -0700 |
commit | 93883fde36ac158fd415dcd6dbd387dcfd928d3c (patch) | |
tree | 1284161055319916352d520645b12f412283dd48 /src/passes/OptimizeInstructions.cpp | |
parent | e201819761bd8ae21bd03b2656a15544f9e44c32 (diff) | |
download | binaryen-93883fde36ac158fd415dcd6dbd387dcfd928d3c.tar.gz binaryen-93883fde36ac158fd415dcd6dbd387dcfd928d3c.tar.bz2 binaryen-93883fde36ac158fd415dcd6dbd387dcfd928d3c.zip |
[WasmGC] OptimizeInstructions: Cancel out internalize+externalize pairs (#7005)
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index 64d59ca1d..e1478b54f 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -2266,9 +2266,19 @@ struct OptimizeInstructions refAsChild->value = curr; refAsChild->finalize(); replaceCurrent(refAsChild); + return; + } + + // We can optimize away externalizations of internalizations and vice + // versa. + if ((curr->op == ExternConvertAny && + refAsChild->op == AnyConvertExtern) || + (curr->op == AnyConvertExtern && + refAsChild->op == ExternConvertAny)) { + replaceCurrent(refAsChild->value); + return; } } - // TODO: optimize away ExternConvertAny of AnyConvertExtern, etc. return; } |