diff options
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r-- | src/passes/pass.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 137a89703..fa706dd10 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -102,6 +102,9 @@ void PassRegistry::registerPasses() { registerPass("const-hoisting", "hoist repeated constants to a local", createConstHoistingPass); + registerPass("cfp", + "propagate constant struct field values", + createConstantFieldPropagationPass); registerPass( "dce", "removes unreachable code", createDeadCodeEliminationPass); registerPass("dealign", @@ -499,6 +502,10 @@ void PassRunner::addDefaultFunctionOptimizationPasses() { void PassRunner::addDefaultGlobalOptimizationPrePasses() { addIfNoDWARFIssues("duplicate-function-elimination"); addIfNoDWARFIssues("memory-packing"); + if (wasm->features.hasGC() && getTypeSystem() == TypeSystem::Nominal && + options.optimizeLevel >= 2) { + addIfNoDWARFIssues("cfp"); + } } void PassRunner::addDefaultGlobalOptimizationPostPasses() { |