Current vectoriser doesn't support masked loads for SLP.
authorAlejandro Martinez <alejandro.martinezvicente@arm.com>
Tue, 28 May 2019 13:48:44 +0000 (13:48 +0000)
committerAlejandro Martinez <alejandro@gcc.gnu.org>
Tue, 28 May 2019 13:48:44 +0000 (13:48 +0000)
commit997636716c5dde7d59d026726a6f58918069f122
treed18d1d7f5388bc0bb743583ce506e284c8eb60d3
parent8b4e7143550cd1f3f4b1dca005a5e656506979d9
Current vectoriser doesn't support masked loads for SLP.

Current vectoriser doesn't support masked loads for SLP. We should add that, to
allow things like:

void
f (int *restrict x, int *restrict y, int *restrict z, int n)
{
  for (int i = 0; i < n; i += 2)
    {
      x[i] = y[i] ? z[i] : 1;
      x[i + 1] = y[i + 1] ? z[i + 1] : 2;
    }
}

to be vectorized using contiguous loads rather than LD2 and ST2.

This patch was motivated by SVE, but it is completely generic and should apply
to any architecture with masked loads.

From-SVN: r271704
gcc/ChangeLog
gcc/internal-fn.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/sve/mask_load_slp_1.c [new file with mode: 0644]
gcc/tree-data-ref.c
gcc/tree-vect-data-refs.c
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.c
gcc/tree-vectorizer.h