Reject versioning for alignment with different masks (PR 92526)
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 21 Nov 2019 17:45:36 +0000 (17:45 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 21 Nov 2019 17:45:36 +0000 (17:45 +0000)
commit557532d1728af193d47867dabbe26bd556fb8586
tree61e5d148c084e4903914eb83f17fc6d938f64b2d
parent91f161b03b649984991573c2f2605555da4a678c
Reject versioning for alignment with different masks (PR 92526)

Allowing mixed vector sizes broke the assumption in the following assert,
since it's now possible for different accesses to require different
levels of alignment:

              /* FORNOW: use the same mask to test all potentially unaligned
                 references in the loop.  The vectorizer currently supports
                 a single vector size, see the reference to
                 GET_MODE_NUNITS (TYPE_MODE (vectype)) where the
                 vectorization factor is computed.  */
              gcc_assert (!LOOP_VINFO_PTR_MASK (loop_vinfo)
                          || LOOP_VINFO_PTR_MASK (loop_vinfo) == mask);

I guess we could try to over-align smaller accesses so that all
of them are consistent, or try to support multiple alignment masks,
but for now the easiest fix seems to be to turn the assert into a
bail-out check.

2019-11-21  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
PR tree-optimization/92526
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Reject
versioning for alignment if the accesses do not have a consistent
mask, rather than asserting that the masks are consistent.

gcc/testsuite/
PR tree-optimization/92526
* gcc.target/aarch64/pr92526.c: New test.

From-SVN: r278592
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/pr92526.c [new file with mode: 0644]
gcc/tree-vect-data-refs.c