[webkit-changes] [WebKit/WebKit] 86bfe6: [JSC] Optimize VectorShr/VectorShl on ARM64

Yusuke Suzuki noreply at github.com
Sat Mar 18 12:04:28 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 86bfe631a0ac1b24545dc59c9ace20b9adb30312
      https://github.com/WebKit/WebKit/commit/86bfe631a0ac1b24545dc59c9ace20b9adb30312
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-03-18 (Sat, 18 Mar 2023)

  Changed paths:
    M Source/JavaScriptCore/b3/B3LowerMacros.cpp
    M Source/JavaScriptCore/b3/B3LowerToAir.cpp
    M Source/JavaScriptCore/b3/B3Opcode.cpp
    M Source/JavaScriptCore/b3/B3Opcode.h
    M Source/JavaScriptCore/b3/B3ReduceStrength.cpp
    M Source/JavaScriptCore/b3/B3SIMDValue.h
    M Source/JavaScriptCore/b3/B3Validate.cpp
    M Source/JavaScriptCore/b3/B3Value.cpp
    M Source/JavaScriptCore/b3/B3Value.h
    M Source/JavaScriptCore/b3/B3ValueInlines.h
    M Source/JavaScriptCore/b3/B3ValueKey.cpp

  Log Message:
  -----------
  [JSC] Optimize VectorShr/VectorShl on ARM64
https://bugs.webkit.org/show_bug.cgi?id=254108
rdar://106890334

Reviewed by Justin Michaud.

In argon2-wasm-simd, we are doing VectorShr/VectorShl with constant scalar.
In ARM64, we are lowering VectorShr/VectorShl into complicated sequence of opcodes in B3LowerToAir including VectorSplat.
And VectorSplat (dup) in ARM64 is very costly operation.

Instead, we should lower VectorShr/VectorShl as a macro in B3 layer. This patch adds VectorShiftByVector, which is ARM64
architecture specific B3 opcode. And we lower VectorShr/VectorShl into sequence of BitAnd, Neg, VectorSplat and VectorShiftByVector.
As a result, B3ReduceStrength can constant-fold VectorSplat if the shift amount is constant scalar and successfully eliminate
the costly VectorSplat.

This offers 2% improvement in argon2-wasm-simd. In Run time, it offers 5% improvement.

    Before:
        Starting JetStream3
        Running argon2-wasm-simd:
            Startup: 4.753
            Run time: 0.870
            Score: 2.034

    After:
        Starting JetStream3
        Running argon2-wasm-simd:
            Startup: 4.762
            Run time: 0.913
            Score: 2.085

* Source/JavaScriptCore/b3/B3LowerMacros.cpp:
* Source/JavaScriptCore/b3/B3LowerToAir.cpp:
* Source/JavaScriptCore/b3/B3Opcode.cpp:
(WTF::printInternal):
* Source/JavaScriptCore/b3/B3Opcode.h:
* Source/JavaScriptCore/b3/B3ReduceStrength.cpp:
* Source/JavaScriptCore/b3/B3SIMDValue.h:
* Source/JavaScriptCore/b3/B3Validate.cpp:
* Source/JavaScriptCore/b3/B3Value.cpp:
(JSC::B3::Value::effects const):
(JSC::B3::Value::key const):
* Source/JavaScriptCore/b3/B3Value.h:
* Source/JavaScriptCore/b3/B3ValueInlines.h:
* Source/JavaScriptCore/b3/B3ValueKey.cpp:
(JSC::B3::ValueKey::materialize const):

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




More information about the webkit-changes mailing list