• Zhi An Ng's avatar
    [x64][wasm-simd] Pattern match 32x4 rotate · 7c98abdb
    Zhi An Ng authored
    Code like:
    
      x = wasm_v32x4_shuffle(x, x, 1, 2, 3, 0);
    
    is currently matched by S8x16Concat, which lowers to two instructions:
    
      movapd xmm_dst, xmm_src
      palignr xmm_dst, xmm_src, 0x4
    
    There is a special case after a S8x16Concat is matched:.
    
    - is_swizzle, the inputs are the same
    - it is a 32x4 shuffle (offset % 4 == 0)
    
    Which can have a better codegen:
    
    - (dst == src) shufps dst, src, 0b00111001
    - (dst != src) pshufd dst, src, 0b00111001
    
    Add a new simd shuffle matcher which will match 32x4 rotate, and
    construct the appropriate indices referring to the 32x4 elements.
    
    pshufd for the given example. However, this matching happens after
    S8x16Concat, so we get the palignr first. We could move the pattern
    matching cases around, but it will lead to some cases where
    where it would have matched a S8x16Concat, but now matches a
    S32x4shuffle instead, leading to worse codegen.
    
    Note: we also pattern match on 32x4Swizzle, which correctly generates
    Change-Id: Ie3aca53bbc06826be2cf49632de4c24ec73d0a9a
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2589062Reviewed-by: 's avatarBill Budge <bbudge@chromium.org>
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#71754}
    7c98abdb
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...