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

Reply via email to