Check the VF is small enough for an epilogue loop
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 6 Nov 2019 12:29:47 +0000 (12:29 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 6 Nov 2019 12:29:47 +0000 (12:29 +0000)
commit8ec5b16a9a3dbd6d825596c22f1bc32646de28fe
treebe1152f63c2f69541e90e1c894d5b1089a6adbac
parent72d6aeecd95ec49fff1d258e4631167a03351cbb
Check the VF is small enough for an epilogue loop

The number of iterations of an epilogue loop is always smaller than the
VF of the main loop.  vect_analyze_loop_costing was taking this into
account when deciding whether the loop is cheap enough to vectorise,
but that has no effect with the unlimited cost model.  We need to use
a separate check for correctness as well.

This can happen if the sizes returned by autovectorize_vector_sizes
happen to be out of order, e.g. because the target prefers smaller
vectors.  It can also happen with later patches if two vectorisation
attempts happen to end up with the same VF.

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

gcc/
* tree-vect-loop.c (vect_analyze_loop_2): When vectorizing an
epilogue loop, make sure that the VF is small enough or that
the epilogue loop can be fully-masked.

From-SVN: r277880
gcc/ChangeLog
gcc/tree-vect-loop.c