diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2024-04-04 14:15:49 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-04-04 14:15:49 +0100 |
commit | 86dce005a1d440154dbf585dde5a2dd4cfac7a05 (patch) | |
tree | 405372387329259e2c9303abb8f58e72c0f00120 /libgcc | |
parent | 85621f98d245004a6c9787dde21e0acc17ab2c50 (diff) | |
download | gcc-86dce005a1d440154dbf585dde5a2dd4cfac7a05.zip gcc-86dce005a1d440154dbf585dde5a2dd4cfac7a05.tar.gz gcc-86dce005a1d440154dbf585dde5a2dd4cfac7a05.tar.bz2 |
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.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions