[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