"Kewen.Lin" <li...@linux.ibm.com> writes:
> Hi,
>
> As Lyon pointed out, the newly introduced test case
> gcc.dg/tree-ssa/pr96789.c fails on arm-none-linux-gnueabihf.
> Loop vectorizer is able to vectorize the two loops which
> operate on array tmp with load_lanes feature support.  It
> makes dse3 get unexpected inputs and do nothing.
>
> This patch is to teach the case to respect vect_load_lanes,
> meanwhile to guard the check only under vect_int.

I'm not sure this is the right check.  The test passes on aarch64,
which also has load lanes, but apparently doesn't use them for this
test.  I think the way the loop vectoriser handles the loops will
depend a lot on target costs, which can vary in unpredictable ways.

Does it work if you instead change -ftree-vectorize to -ftree-slp-vectorize?
Or does that defeat the purpose of the test?

Thanks,
Richard

>
> Is it ok for trunk?
>
> BR,
> Kewen
> -----
> gcc/testsuite/ChangeLog:
>
>       * gcc.dg/tree-ssa/pr96789.c: Adjusted by excluding vect_load_lanes.
>
>
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr96789.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/pr96789.c
> index d6139a014d8..1b89f8b7a6a 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/pr96789.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr96789.c
> @@ -55,4 +55,7 @@ bar (int16_t res[16], uint8_t *val1, uint8_t *val2)
>      }
>  }
>
> -/* { dg-final { scan-tree-dump {Deleted dead store:.*tmp} "dse3" } } */
> +/* Exclude targets which support load_lanes since loop vectorizer
> +   can vectorize those two loops that operate tmp array so that
> +   subsequent dse3 will not eliminate tmp stores.  */
> +/* { dg-final { scan-tree-dump {Deleted dead store:.*tmp} "dse3" { target { 
> vect_int && { ! vect_load_lanes } } } } } */

Reply via email to