public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/111857] RISC-V: Failed to vectorize small GNU vector if zvl4096b with fixed-vlmax
Date: Sat, 21 Oct 2023 01:25:05 +0000	[thread overview]
Message-ID: <bug-111857-4-Y04RkbC5mS@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-111857-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111857

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pan Li <panli@gcc.gnu.org>:

https://gcc.gnu.org/g:66c26e5cfdf65ae024fcb658629dc5a9a10f3f85

commit r14-4812-g66c26e5cfdf65ae024fcb658629dc5a9a10f3f85
Author: Pan Li <pan2.li@intel.com>
Date:   Fri Oct 20 16:20:45 2023 +0800

    RISC-V: Support partial VLS mode when preference fixed-vlmax [PR111857]

    Given we have code like below:

    typedef char vnx16i __attribute__ ((vector_size (16)));

    vnx16i __attribute__ ((noinline, noclone))
    test (vnx16i x, vnx16i y)
    {
      return __builtin_shufflevector (x, y, 11, 12, 13, 14, 11, 12, 13, 14,
                                            11, 12, 13, 14, 11, 12, 13, 14);
    }

    It can perform the auto vectorization when

    -march=rv64gcv_zvl1024b --param=riscv-autovec-preference=fixed-vlmax

    but cannot when

    -march=rv64gcv_zvl2048b --param=riscv-autovec-preference=fixed-vlmax

    The reason comes from the miniaml machine mode of QI is RVVMF8QI, which
    is 1024 / 8 = 128 bits, aka the size of VNx16QI. When we set zvl2048b,
    the bit size of RVVMFQI is 2048 / 8 = 256, which is not matching the
    bit size of VNx16QI (128 bits).

    Thus, this patch would like to enable the VLS mode for such case, aka
    VNx16QI vls mode for zvl2048b.

    Before this patch:
    test:
      srli    a4,a1,40
      andi    a4,a4,0xff
      srli    a3,a1,32
      srli    a5,a1,48
      slli    a0,a4,8
      andi    a3,a3,0xff
      andi    a5,a5,0xff
      slli    a2,a5,16
      or      a0,a3,a0
      srli    a1,a1,56
      or      a0,a0,a2
      slli    a2,a1,24
      slli    a3,a3,32
      or      a0,a0,a2
      slli    a4,a4,40
      or      a0,a0,a3
      slli    a5,a5,48
      or      a0,a0,a4
      or      a0,a0,a5
      slli    a1,a1,56
      or      a0,a0,a1
      mv      a1,a0
      ret

    After this patch:
    test:
      vsetivli        zero,16,e8,mf8,ta,ma
      vle8.v  v2,0(a1)
      vsetivli        zero,4,e32,mf2,ta,ma
      vrgather.vi     v1,v2,3
      vsetivli        zero,16,e8,mf8,ta,ma
      vse8.v  v1,0(a0)
      ret

            PR target/111857

    gcc/ChangeLog:

            * config/riscv/riscv-opts.h (TARGET_VECTOR_VLS): Remove.
            * config/riscv/riscv-protos.h (vls_mode_valid_p): New func decl.
            * config/riscv/riscv-v.cc (autovectorize_vector_modes): Replace
            macro reference to func.
            (vls_mode_valid_p): New func impl for vls mode valid or not.
            * config/riscv/riscv-vector-switch.def (VLS_ENTRY): Replace
            macro reference to func.
            * config/riscv/vector-iterators.md: Ditto.

    gcc/testsuite/ChangeLog:

            * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c: Adjust checker.
            * gcc.target/riscv/rvv/autovec/vls/def.h: Add help define.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-0.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-1.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-2.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-3.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-4.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-5.c: New test.
            * gcc.target/riscv/rvv/autovec/vls-vlmax/pr111857-6.c: New test.

    Signed-off-by: Pan Li <pan2.li@intel.com>

  parent reply	other threads:[~2023-10-21  1:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18  6:19 [Bug c/111857] New: " juzhe.zhong at rivai dot ai
2023-10-18  6:21 ` [Bug c/111857] " juzhe.zhong at rivai dot ai
2023-10-18 20:11 ` [Bug target/111857] " pinskia at gcc dot gnu.org
2023-10-21  1:25 ` cvs-commit at gcc dot gnu.org [this message]
2023-10-21  3:29 ` juzhe.zhong at rivai dot ai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-111857-4-Y04RkbC5mS@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).