diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2025-08-05 06:27:15 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2025-08-05 12:12:12 -0700 |
commit | 40da83e4a770f0a05ef6ace4cdd75397609e5bde (patch) | |
tree | c18b32d6afe7a9222b0e957234a0e6bb1d798555 | |
parent | 59236d56eec6854e261dbf16963d5ee9e03bf7d5 (diff) | |
download | gcc-40da83e4a770f0a05ef6ace4cdd75397609e5bde.zip gcc-40da83e4a770f0a05ef6ace4cdd75397609e5bde.tar.gz gcc-40da83e4a770f0a05ef6ace4cdd75397609e5bde.tar.bz2 |
x86: Get the widest vector mode from STORE_MAX_PIECES for memset
commit 050b1708ea532ea4840e97d85fad4ca63d4cd631
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Thu Jun 19 05:03:48 2025 +0800
x86: Get the widest vector mode from MOVE_MAX
gets the widest vector mode from MOVE_MAX. But for memset, it should
use STORE_MAX_PIECES.
gcc/
PR target/121410
* config/i386/i386-expand.cc (ix86_expand_set_or_cpymem): Use
STORE_MAX_PIECES to get the widest vector mode in vector loop
for memset.
gcc/testsuite/
PR target/121410
* gcc.target/i386/pr121410.c: New test.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
-rw-r--r-- | gcc/config/i386/i386-expand.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr121410.c | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 09aa9b1..12cec61 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -9574,8 +9574,9 @@ ix86_expand_set_or_cpymem (rtx dst, rtx src, rtx count_exp, rtx val_exp, case vector_loop: need_zero_guard = true; unroll_factor = 4; - /* Get the vector mode to move MOVE_MAX bytes. */ - nunits = MOVE_MAX / GET_MODE_SIZE (word_mode); + /* Get the vector mode to move STORE_MAX_PIECES/MOVE_MAX bytes. */ + nunits = issetmem ? STORE_MAX_PIECES : MOVE_MAX; + nunits /= GET_MODE_SIZE (word_mode); if (nunits > 1) { move_mode = mode_for_vector (word_mode, nunits).require (); diff --git a/gcc/testsuite/gcc.target/i386/pr121410.c b/gcc/testsuite/gcc.target/i386/pr121410.c new file mode 100644 index 0000000..04bab91 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121410.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=x86-64 -mavx512f -mstore-max=128" } */ + +extern unsigned _BitInt(3719) a; +extern _BitInt(465) g; +void +foo(void) +{ + _BitInt(465) b = a >> 1860; + g = b + b; +} |