[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