aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2025-08-05 06:27:15 -0700
committerH.J. Lu <hjl.tools@gmail.com>2025-08-05 12:12:12 -0700
commit40da83e4a770f0a05ef6ace4cdd75397609e5bde (patch)
treec18b32d6afe7a9222b0e957234a0e6bb1d798555
parent59236d56eec6854e261dbf16963d5ee9e03bf7d5 (diff)
downloadgcc-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.cc5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr121410.c11
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;
+}