diff options
author | Alon Zakai <azakai@google.com> | 2022-03-25 16:33:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-25 16:33:53 -0700 |
commit | 11932cc31e88d3d368714fcca43df979f7694bd1 (patch) | |
tree | 889faa7d6c6e2e261970ea776e3183202e9d6cba /src/passes/pass.cpp | |
parent | 3a1953a1f417eb2f588eeb35bf26a3df6ea8f8e1 (diff) | |
download | binaryen-11932cc31e88d3d368714fcca43df979f7694bd1.tar.gz binaryen-11932cc31e88d3d368714fcca43df979f7694bd1.tar.bz2 binaryen-11932cc31e88d3d368714fcca43df979f7694bd1.zip |
[Wasm GC] Signature Pruning (#4545)
This adds a new signature-pruning pass that prunes parameters from
signature types where those parameters are never used in any function
that has that type. This is similar to DeadArgumentElimination but works
on a set of functions, and it can handle indirect calls.
Also move a little code from SignatureRefining into a shared place to
avoid duplication of logic to update signature types.
This pattern happens in j2wasm code, for example if all method functions
for some virtual method just return a constant and do not use the this
pointer.
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r-- | src/passes/pass.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 3ac4485e3..04947ae07 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -353,6 +353,9 @@ void PassRegistry::registerPasses() { registerPass("set-globals", "sets specified globals to specified values", createSetGlobalsPass); + registerPass("signature-pruning", + "remove params from function signature types where possible", + createSignaturePruningPass); registerPass("signature-refining", "apply more specific subtypes to signature types where possible", createSignatureRefiningPass); @@ -549,6 +552,7 @@ void PassRunner::addDefaultGlobalOptimizationPrePasses() { if (wasm->features.hasGC() && getTypeSystem() == TypeSystem::Nominal && options.optimizeLevel >= 2) { addIfNoDWARFIssues("type-refining"); + addIfNoDWARFIssues("signature-pruning"); addIfNoDWARFIssues("signature-refining"); addIfNoDWARFIssues("global-refining"); // Global type optimization can remove fields that are not needed, which can |