summaryrefslogtreecommitdiff
path: root/src/passes/OptimizeInstructions.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2024-10-14 16:07:57 -0700
committerGitHub <noreply@github.com>2024-10-14 16:07:57 -0700
commit93883fde36ac158fd415dcd6dbd387dcfd928d3c (patch)
tree1284161055319916352d520645b12f412283dd48 /src/passes/OptimizeInstructions.cpp
parente201819761bd8ae21bd03b2656a15544f9e44c32 (diff)
downloadbinaryen-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.cpp12
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;
}