diff options
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r-- | src/passes/pass.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 0d47cd78e..15e8c1f26 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -480,6 +480,9 @@ void PassRegistry::registerPasses() { registerPass("trap-mode-js", "replace trapping operations with js semantics", createTrapModeJS); + registerPass("tuple-optimization", + "optimize trivial tuples away", + createTupleOptimizationPass); registerPass("type-merging", "merge types to their supertypes where possible", createTypeMergingPass); @@ -558,6 +561,12 @@ void PassRunner::addDefaultFunctionOptimizationPasses() { if (options.optimizeLevel >= 2 || options.shrinkLevel >= 2) { addIfNoDWARFIssues("code-pushing"); } + if (wasm->features.hasMultivalue()) { + // Optimize tuples before local opts (as splitting tuples can help local + // opts), but also not too early, as we want to be after + // optimize-instructions at least (which can remove tuple-related things). + addIfNoDWARFIssues("tuple-optimization"); + } // don't create if/block return values yet, as coalesce can remove copies that // that could inhibit addIfNoDWARFIssues("simplify-locals-nostructure"); |