[webkit-changes] [WebKit/WebKit] aa2ac2: [JSC] VectorSwizzle should be optimized to DupElem...
Yusuke Suzuki
noreply at github.com
Thu Jan 26 20:19:28 PST 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: aa2ac2e6fb27e0f59c36d9affbe0d2b2612f2fd5
https://github.com/WebKit/WebKit/commit/aa2ac2e6fb27e0f59c36d9affbe0d2b2612f2fd5
Author: Yusuke Suzuki <ysuzuki at apple.com>
Date: 2023-01-26 (Thu, 26 Jan 2023)
Changed paths:
A JSTests/wasm/stress/simd-shuffle.js
M Source/JavaScriptCore/CMakeLists.txt
M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
M Source/JavaScriptCore/assembler/ARM64Assembler.h
M Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
M Source/JavaScriptCore/assembler/MacroAssemblerRISCV64.h
M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
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/air/AirOpcode.opcodes
A Source/JavaScriptCore/jit/SIMDShuffle.h
Log Message:
-----------
[JSC] VectorSwizzle should be optimized to DupElement when possible
https://bugs.webkit.org/show_bug.cgi?id=251241
rdar://104722782
Reviewed by Justin Michaud.
This patch adds optimization for SIMD VectorSwizzle on ARM64.
1. If pattern only includes indexes for one side, we can convert 3-children VectorSwizzle to 2-children VectorSwizzle.
This is better since we can freely use tbl v1 without register number constraints. And we can purge use of one side,
potentially this can be removed if nobody is using it.
2. If pattern matches against DupElement, we convert it to VectorDupElement on ARM64. This can remove Const128 load for
pattern, and use cheaper operation (dup element) instead of VectorSwizzle (tbl).
* JSTests/wasm/stress/simd-shuffle.js: Added.
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/assembler/ARM64Assembler.h:
(JSC::ARM64Assembler::dupElement):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::vectorDupElement):
* Source/JavaScriptCore/assembler/MacroAssemblerRISCV64.h:
* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::vectorDupElement):
* 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):
* Source/JavaScriptCore/b3/B3Value.h:
* Source/JavaScriptCore/b3/B3ValueInlines.h:
* Source/JavaScriptCore/b3/air/AirOpcode.opcodes:
* Source/JavaScriptCore/jit/SIMDShuffle.h: Added.
(JSC::SIMDShuffle::isOnlyOneSideMask):
(JSC::SIMDShuffle::isI8x16DupElement):
(JSC::SIMDShuffle::isI16x8DupElement):
(JSC::SIMDShuffle::isI32x4DupElement):
(JSC::SIMDShuffle::isI64x2DupElement):
(JSC::SIMDShuffle::isI16x8Shuffle):
(JSC::SIMDShuffle::isI32x4Shuffle):
(JSC::SIMDShuffle::isI64x2Shuffle):
(JSC::SIMDShuffle::isIdentity):
(JSC::SIMDShuffle::isLargerElementShuffle):
Canonical link: https://commits.webkit.org/259464@main
More information about the webkit-changes
mailing list