[webkit-changes] [WebKit/WebKit] e0d2a1: [JSC] Loop unrolling phase should inverse the cond...

Yijia Huang noreply at github.com
Mon Jan 6 23:54:13 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e0d2a13f551fe60f4893b41479de31884fe84751
      https://github.com/WebKit/WebKit/commit/e0d2a13f551fe60f4893b41479de31884fe84751
  Author: Yijia Huang <yijia_huang at apple.com>
  Date:   2025-01-06 (Mon, 06 Jan 2025)

  Changed paths:
    A JSTests/stress/loop-unrolling-branch.js
    M Source/JavaScriptCore/dfg/DFGLoopUnrollingPhase.cpp

  Log Message:
  -----------
  [JSC] Loop unrolling phase should inverse the condition if needed before computing the iteration count
https://bugs.webkit.org/show_bug.cgi?id=285473
rdar://142439066

Reviewed by Yusuke Suzuki.

Previously, loop unrolling failed to handle cases where the loop's
"not taken" branch pointed back into the loop, requiring condition
inversion. This led to incorrect comparisons, invalid iteration
counts, and missed optimization opportunities.

This fix introduces `inverseCondition` to track whether the condition
needs inversion and updates `comparisonFunction` to apply the correct
comparison logic dynamically. It improves robustness, ensures accurate
unrolling for complex branching structures, and adds better debug information.

* JSTests/stress/loop-unrolling-branch.js: Added.
* Source/JavaScriptCore/dfg/DFGLoopUnrollingPhase.cpp:
(JSC::DFG::LoopUnrollingPhase::LoopData::condition const):
(JSC::DFG::LoopUnrollingPhase::locateTail):
(JSC::DFG::LoopUnrollingPhase::identifyInductionVariable):
(JSC::DFG::LoopUnrollingPhase::LoopData::dump const):
(JSC::DFG::LoopUnrollingPhase::comparisonFunction):

Canonical link: https://commits.webkit.org/288509@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list