Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0dcb36857ab239cbb6a44066ada6b2ed972be306
https://github.com/WebKit/WebKit/commit/0dcb36857ab239cbb6a44066ada6b2ed972be306
Author: Yijia Huang <[email protected]>
Date: 2025-05-02 (Fri, 02 May 2025)
Changed paths:
M Source/JavaScriptCore/dfg/DFGBasicBlock.h
M Source/JavaScriptCore/dfg/DFGCloneHelper.h
M Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp
M Source/JavaScriptCore/dfg/DFGLoopUnrollingPhase.cpp
M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
M Source/JavaScriptCore/runtime/Options.cpp
M Source/JavaScriptCore/runtime/OptionsList.h
Log Message:
-----------
[JSC] Enable partial loop unrolling with inlining-aware code size exclusion
https://bugs.webkit.org/show_bug.cgi?id=292302
rdar://150321349
Reviewed by Yusuke Suzuki.
This patch enables partial loop unrolling by default and lowers the threshold
(maxPartialLoopUnrollingBodyNodeSize) from 200 to 70. However, unrolling may
inflate the callee’s JITed code size and negatively impact FTL inlining
heuristics.
To mitigate this, we introduce
`BasicBlock::isExcludedFromFTLCodeSizeEstimation`.
Blocks generated during loop unrolling and jump pad insertion are flagged as
excluded.
These are skipped in FTL’s code size estimation to avoid penalizing inlining.
Additionally:
- Skips unrolling loops that only contain PutByVal operations without
corresponding GetByVal,
since they tend to be memory-bound and unprofitable for unrolling
(rdar://150524264).
- Applies a more conservative partial unrolling threshold (50) on iOS to
mitigate a known regression (rdar://150522186).
- Disables loop unrolling for `StringFromCharCode` due to a specific
performance regression (rdar://150526635).
This allows loop unrolling optimizations to proceed without degrading
inlining-based performance.
* Source/JavaScriptCore/dfg/DFGBasicBlock.h:
* Source/JavaScriptCore/dfg/DFGCloneHelper.h:
(JSC::DFG::CloneHelper::cloneBlock):
* Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp:
(JSC::DFG::CriticalEdgeBreakingPhase::performFixJumpPadAvailability):
* Source/JavaScriptCore/dfg/DFGLoopUnrollingPhase.cpp:
(JSC::DFG::LoopUnrollingPhase::isLoopBodyUnrollable):
(JSC::DFG::LoopUnrollingPhase::LoopData::isProfitableToUnroll):
(JSC::DFG::LoopUnrollingPhase::LoopData::analyzeLoopNode):
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileBlock):
* Source/JavaScriptCore/runtime/Options.cpp:
(JSC::overrideDefaults):
* Source/JavaScriptCore/runtime/OptionsList.h:
Canonical link: https://commits.webkit.org/294467@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes