Allow the number of iterations to be smaller than VF
commit2ea449b337238e4716f34ad9a413715fa3090d47
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2018 17:59:23 +0000 (13 17:59 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2018 17:59:23 +0000 (13 17:59 +0000)
tree50556d047879e76735dd263eb9a0712f9066545e
parent33db1a0cb65d961ab2ae1de72150f01898d66293
Allow the number of iterations to be smaller than VF

Fully-masked loops can be profitable even if the iteration
count is smaller than the vectorisation factor.  In this case
we're effectively doing a complete unroll followed by SLP.

The documentation for min-vect-loop-bound says that the
default value was 0, but actually the default and minimum
were 1.  We need it to be 0 for this case since the parameter
counts a whole number of vector iterations.

2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_fully_masked): Document.
* params.def (PARAM_MIN_VECT_LOOP_BOUND): Change minimum and
default value to 0.
* tree-vect-loop.c (vect_analyze_loop_costing): New function,
split out from...
(vect_analyze_loop_2): ...here. Don't check the vectorization
factor against the number of loop iterations if the loop is
fully-masked.

gcc/testsuite/
* lib/target-supports.exp (check_effective_target_vect_fully_masked):
New proc.
* gcc.dg/vect/slp-3.c: Expect all loops to be vectorized if
vect_fully_masked.
* gcc.target/aarch64/sve/loop_add_4.c: New test.
* gcc.target/aarch64/sve/loop_add_4_run.c: Likewise.
* gcc.target/aarch64/sve/loop_add_5.c: Likewise.
* gcc.target/aarch64/sve/loop_add_5_run.c: Likewise.
* gcc.target/aarch64/sve/miniloop_1.c: Likewise.
* gcc.target/aarch64/sve/miniloop_2.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256629 138bc75d-0d04-0410-961f-82ee72b054a4
13 files changed:
gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/params.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/slp-3.c
gcc/testsuite/gcc.target/aarch64/sve/loop_add_4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/loop_add_4_run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/loop_add_5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/loop_add_5_run.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/miniloop_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/miniloop_2.c [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp
gcc/tree-vect-loop.c