Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e1b94476e4f0eb65453c34e04b9ec7f4b94530f2
      
https://github.com/WebKit/WebKit/commit/e1b94476e4f0eb65453c34e04b9ec7f4b94530f2
  Author: Yijia Huang <yijia_hu...@apple.com>
  Date:   2025-02-28 (Fri, 28 Feb 2025)

  Changed paths:
    A JSTests/microbenchmarks/atom-string-array-index-of-found.js
    A JSTests/microbenchmarks/atom-string-array-index-of-not-found.js
    A JSTests/microbenchmarks/atom-string-array-split-empty-index-of-found.js
    A 
JSTests/microbenchmarks/atom-string-array-split-empty-index-of-not-found.js
    A 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-non-rope-found.js
    A 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-non-rope-not-found.js
    A 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-rope-found.js
    A 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-rope-not-found.js
    A JSTests/stress/atom-string-array.js
    M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
    M Source/JavaScriptCore/dfg/DFGOperations.cpp
    M Source/JavaScriptCore/dfg/DFGOperations.h
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
    M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
    M Source/JavaScriptCore/runtime/ArrayPrototype.cpp
    M Source/JavaScriptCore/runtime/JSImmutableButterfly.h
    M Source/JavaScriptCore/runtime/JSString.h
    M Source/JavaScriptCore/runtime/StringPrototype.cpp
    M Source/JavaScriptCore/runtime/VM.cpp
    M Source/JavaScriptCore/runtime/VM.h

  Log Message:
  -----------
  [JSC] Optimize Array.prototype.indexOf for Dense Atom String Arrays
https://bugs.webkit.org/show_bug.cgi?id=288548
rdar://145614326

Reviewed by Yusuke Suzuki.

Inspired by Yusuke's idea and draft patch, this patch optimizes
Array.prototype.indexOf for arrays of dense atom strings by enabling
direct pointer-based comparisons, eliminating the need for expensive
string content comparisons.

                                                                without         
            with

atom-string-array-index-of-found                            1.8424+-0.0062     
^      1.4762+-0.0069        ^ definitely 1.2481x faster
atom-string-array-index-of-not-found                        1.5934+-0.0046     
^      1.1977+-0.0066        ^ definitely 1.3304x faster
atom-string-array-split-empty-index-of-found                1.8439+-0.1106     
^      1.4876+-0.0091        ^ definitely 1.2395x faster
atom-string-array-split-empty-index-of-not-found            1.9270+-0.0063     
^      1.1917+-0.0060        ^ definitely 1.6170x faster
atom-string-array-split-space-index-of-rope-found           1.5912+-0.0053     
^      1.3945+-0.0055        ^ definitely 1.1411x faster
atom-string-array-split-space-index-of-rope-not-found       1.7173+-0.0058     
^      1.2156+-0.0059        ^ definitely 1.4127x faster
atom-string-array-split-space-index-of-non-rope-found       2.2235+-0.0070     
^      1.5365+-0.0063        ^ definitely 1.4471x faster
atom-string-array-split-space-index-of-non-rope-not-found   1.7939+-0.0065     
^      1.1984+-0.0066        ^ definitely 1.4969x faster

* JSTests/microbenchmarks/atom-string-array-index-of-found.js: Added.
(test):
* JSTests/microbenchmarks/atom-string-array-index-of-not-found.js: Added.
(test):
* JSTests/microbenchmarks/atom-string-array-split-empty-index-of-found.js: 
Added.
(test):
* JSTests/microbenchmarks/atom-string-array-split-empty-index-of-not-found.js: 
Added.
(test):
* 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-non-rope-found.js:
 Added.
(test):
* 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-non-rope-not-found.js:
 Added.
(test):
* JSTests/microbenchmarks/atom-string-array-split-space-index-of-rope-found.js: 
Added.
(test):
* 
JSTests/microbenchmarks/atom-string-array-split-space-index-of-rope-not-found.js:
 Added.
(test):
* JSTests/stress/atom-string-array.js: Added.
(test):
* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::ArrayNode::emitBytecode):
* Source/JavaScriptCore/dfg/DFGOperations.cpp:
(JSC::DFG::JSC_DEFINE_JIT_OPERATION):
* Source/JavaScriptCore/dfg/DFGOperations.h:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOfOrArrayIncludes):
* Source/JavaScriptCore/runtime/ArrayPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/JSImmutableButterfly.h:
(JSC::JSImmutableButterfly::isAtomStringsStructure):
* Source/JavaScriptCore/runtime/JSString.h:
(JSC::asString):
(JSC::asAtomString):
(JSC::JSString::ensureAtomString const):
* Source/JavaScriptCore/runtime/StringPrototype.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::visitAggregateImpl):
* Source/JavaScriptCore/runtime/VM.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to