]> gcc.gnu.org Git - gcc.git/commit
arm: correctly handle misaligned MEMs on MVE [PR105463]
authorRichard Earnshaw <rearnsha@arm.com>
Wed, 11 May 2022 12:08:40 +0000 (13:08 +0100)
committerRichard Earnshaw <rearnsha@arm.com>
Fri, 2 Sep 2022 10:12:10 +0000 (11:12 +0100)
commitde1ba234311b935b1a38d512e57329d4b6e8354d
tree1e5a323b3cc623063ba41f38d67492636af8b2a9
parente69134e12551a4289292e3955525f84d99773d31
arm: correctly handle misaligned MEMs on MVE [PR105463]

Vector operations in MVE must be aligned to the element size, so if we
are asked for a misaligned move in a wider mode we must recast it to a
form suitable for the known alignment (larger elements have better
address offset ranges, so there is some advantage to using wider
element sizes if possible).  Whilst fixing this, also rework the
predicates used for validating operands - the Neon predicates are
not right for MVE.

gcc/ChangeLog:

PR target/105463
* config/arm/mve.md (*movmisalign<mode>_mve_store): Use
mve_memory_operand.
(*movmisalign<mode>_mve_load): Likewise.
* config/arm/vec-common.md (movmisalign<mode>): Convert to generator
form...
(@movmisalign<mode>): ... thus.  Use generic predicates and then
rework operands if they are not valid.  For MVE rework to a
narrower element size if the alignment is not high enough.

(cherry picked from commit 6a116728e27c4da65d84483c0e75561a7479d4d5)
gcc/config/arm/mve.md
gcc/config/arm/vec-common.md
This page took 0.055869 seconds and 5 git commands to generate.