]> git.ipfire.org Git - thirdparty/gcc.git/commit
x86: Get the widest vector mode from MOVE_MAX
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 18 Jun 2025 21:03:48 +0000 (05:03 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Jun 2025 07:59:35 +0000 (15:59 +0800)
commit050b1708ea532ea4840e97d85fad4ca63d4cd631
treeeaca69909b2d3061108c061bb37b51e2046d7dfc
parentbecb0be25211ce13ca6764094052a38f14b954dd
x86: Get the widest vector mode from MOVE_MAX

Since MOVE_MAX defines the maximum number of bytes that an instruction
can move quickly between memory and registers, use it to get the widest
vector mode in vector loop when inlining memcpy and memset.

gcc/

PR target/120708
* config/i386/i386-expand.cc (ix86_expand_set_or_cpymem): Use
MOVE_MAX to get the widest vector mode in vector loop.

gcc/testsuite/

PR target/120708
* gcc.target/i386/memcpy-pr120708-1.c: New test.
* gcc.target/i386/memcpy-pr120708-2.c: Likewise.
* gcc.target/i386/memcpy-pr120708-3.c: Likewise.
* gcc.target/i386/memcpy-pr120708-4.c: Likewise.
* gcc.target/i386/memcpy-pr120708-5.c: Likewise.
* gcc.target/i386/memcpy-pr120708-6.c: Likewise.
* gcc.target/i386/memset-pr120708-1.c: Likewise.
* gcc.target/i386/memset-pr120708-2.c: Likewise.
* gcc.target/i386/memcpy-strategy-1.c: Drop dg-skip-if.  Replace
-march=atom with -mno-avx -msse2 -mtune=generic
-mtune-ctrl=^sse_typeless_stores.
* gcc.target/i386/memcpy-strategy-2.c: Likewise.
* gcc.target/i386/memcpy-vector_loop-1.c: Likewise.
* gcc.target/i386/memcpy-vector_loop-2.c: Likewise.
* gcc.target/i386/memset-vector_loop-1.c: Likewise.
* gcc.target/i386/memset-vector_loop-2.c: Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
15 files changed:
gcc/config/i386/i386-expand.cc
gcc/testsuite/gcc.target/i386/memcpy-pr120708-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-pr120708-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-pr120708-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-pr120708-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-pr120708-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-pr120708-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c
gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c
gcc/testsuite/gcc.target/i386/memset-pr120708-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memset-pr120708-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c