Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: aa2ac2e6fb27e0f59c36d9affbe0d2b2612f2fd5
      
https://github.com/WebKit/WebKit/commit/aa2ac2e6fb27e0f59c36d9affbe0d2b2612f2fd5
  Author: Yusuke Suzuki <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to