]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Recognise svundef idiom [PR114577]
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 4 Apr 2024 13:15:49 +0000 (14:15 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 4 Apr 2024 13:15:49 +0000 (14:15 +0100)
commit86dce005a1d440154dbf585dde5a2dd4cfac7a05
tree405372387329259e2c9303abb8f58e72c0f00120
parent85621f98d245004a6c9787dde21e0acc17ab2c50
aarch64: Recognise svundef idiom [PR114577]

GCC 14 adds the header file arm_neon_sve_bridge.h to help interface
SVE and Advanced SIMD code.  One of the defined idioms is:

  svset_neonq (svundef_TYPE (), advsimd_vector)

which simply reinterprets advsimd_vector as an SVE vector without
regard for what's in the upper bits.

GCC was failing to recognise this idiom, which was likely to
significantly hamper adoption.

There is (AFAIK) no good way of representing an extension with
undefined bits in gimple.  We could add an internal-only builtin
to represent it, but the current framework makes that somewhat
awkward.  It also doesn't seem very forward-looking.

This patch instead goes for the simpler approach of recognising
undefined arguments at expansion time.

gcc/
PR target/114577
* config/aarch64/aarch64-sve-builtins.h (aarch64_sve::lookup_fndecl):
Declare.
* config/aarch64/aarch64-sve-builtins.cc (aarch64_sve::lookup_fndecl):
New function.
* config/aarch64/aarch64-sve-builtins-base.cc (is_undef): Likewise.
(svset_neonq_impl::expand): Optimise expansions whose first argument
is undefined.

gcc/testsuite/
PR target/114577
* gcc.target/aarch64/sve/acle/general/pr114577_1.c: New test.
* gcc.target/aarch64/sve/acle/general/pr114577_2.c: Likewise.
gcc/config/aarch64/aarch64-sve-builtins-base.cc
gcc/config/aarch64/aarch64-sve-builtins.cc
gcc/config/aarch64/aarch64-sve-builtins.h
gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c [new file with mode: 0644]