move permutation validity check
authorRichard Biener <rguenther@suse.de>
Mon, 24 Feb 2020 14:36:40 +0000 (15:36 +0100)
committerRichard Biener <rguenther@suse.de>
Fri, 8 May 2020 17:47:30 +0000 (19:47 +0200)
commitbc484e250990393e887f7239157cc85ce6fadcce
treee57aa7d95c2998da04902d8c0144a03dd2c7e999
parentdebfaee5d51e3c07bb88a971618de2baff35d9c0
move permutation validity check

This delays the SLP permutation check to vectorizable_load and optimizes
permutations only after all SLP instances have been generated and the
vectorization factor is determined.

2020-05-08  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (vec_info::slp_loads): New.
(vect_optimize_slp): Declare.
* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts):  Do
nothing when there are no loads.
(vect_gather_slp_loads): Gather loads into a vector.
(vect_supported_load_permutation_p): Remove.
(vect_analyze_slp_instance): Do not verify permutation
validity here.
(vect_analyze_slp): Optimize permutations of reductions
after all SLP instances have been gathered and gather
all loads.
(vect_optimize_slp): New function split out from
vect_supported_load_permutation_p.  Elide some permutations.
(vect_slp_analyze_bb_1): Call vect_optimize_slp.
* tree-vect-loop.c (vect_analyze_loop_2): Likewise.
* tree-vect-stmts.c (vectorizable_load): Check whether
the load can be permuted.  When generating code assert we can.

* gcc.dg/vect/bb-slp-pr68892.c: Adjust for not supported
SLP permutations becoming builds from scalars.
* gcc.dg/vect/bb-slp-pr78205.c: Likewise.
* gcc.dg/vect/bb-slp-34.c: Likewise.
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/bb-slp-34.c
gcc/testsuite/gcc.dg/vect/bb-slp-pr68892.c
gcc/testsuite/gcc.dg/vect/bb-slp-pr78205.c
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.h