[webkit-changes] [WebKit/WebKit] df4ada: [JSC] Use RegExpObject::globalOrSticky in DFG stre...

Yusuke Suzuki noreply at github.com
Fri Jun 2 16:36:37 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: df4adabdd6a1c75ed23e6acfa9a0f3996a373a41
      https://github.com/WebKit/WebKit/commit/df4adabdd6a1c75ed23e6acfa9a0f3996a373a41
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-06-02 (Fri, 02 Jun 2023)

  Changed paths:
    M Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp

  Log Message:
  -----------
  [JSC] Use RegExpObject::globalOrSticky in DFG strength reduction
https://bugs.webkit.org/show_bug.cgi?id=257657
rdar://110179746

Reviewed by Mark Lam.

We found that RegExpTestInline is not so frequently used and the reason was that we are incorrectly giving up
RegExpTest etc.'s strength reduction when it is not RegExpExecNonGlobalOrSticky. This means that we cannot use
RegExpTestInline if RegExp is something global variable.

    var regexp = /......../;

    function test() {
        return regexp.test(input)
    }

The reason of this restriction is that we need to identify lastIndex value to perform constant folding etc.
And this global variable's lastIndex is not known. But if regexp is not global and not sticky, lastIndex value
is not used, so we can attempt to perform strength reduction actually.

However, lastIndex is used by ToIntegerOrInfinity(regexp.lastIndex) before performing RegExp operations even when
RegExp is not global and not sticky. So, to make folding right, we first need to check that this field is Int32Use.

This patch relaxes the current folding policy. If we cannot identify lastIndex and RegExp is not global and not sticky,
then we insert GetRegExpObjectLastIndex and Check(Int32Use), and continue doing strength reduction.

* Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:
(JSC::DFG::StrengthReductionPhase::handleNode):

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




More information about the webkit-changes mailing list