aarch64: Fix target alignment for SVE [PR98119]
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 31 Mar 2021 10:26:06 +0000 (11:26 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 31 Mar 2021 10:26:06 +0000 (11:26 +0100)
commit1393938e4c7dab9306cdce5a73d93b242fc246ec
tree82f448fd1b8f033b997c7895a7850486f4ac5804
parentd7145b4bb6c8729a1e782373cb6256c06ed60465
aarch64: Fix target alignment for SVE [PR98119]

The vectoriser supports peeling for alignment using predication:
we move back to the previous aligned boundary and make the skipped
elements inactive in the first loop iteration.  As it happens,
the costs for existing CPUs give an equal cost to aligned and
unaligned accesses, so this feature is rarely used.

However, the PR shows that when the feature was forced on, we were
still trying to align to a full-vector boundary even when using
partial vectors.

gcc/
PR target/98119
* config/aarch64/aarch64.c
(aarch64_vectorize_preferred_vector_alignment): Query the size
of the provided SVE vector; do not assume that all SVE vectors
have the same size.

gcc/testsuite/
PR target/98119
* gcc.target/aarch64/sve/pr98119.c: New test.
gcc/config/aarch64/aarch64.c
gcc/testsuite/gcc.target/aarch64/sve/pr98119.c [new file with mode: 0644]