On Wed, 21 Oct 2020, Tamar Christina wrote:

> Hi All,
> 
> This moves the code that checks for load/store lanes further in the pipeline 
> and
> places it after slp_optimize.  This would allow us to perform optimizations on
> the SLP tree and only bail out if we really have a permute.
> 
> With this change it allows us to handle permutes such as {1,1,1,1} which 
> should
> be handled by a load and replicate.
> 
> This change however makes it all or nothing. Either all instances can be 
> handled
> or none at all.  This is why some of the test cases have been adjusted.

So this possibly leaves a loop unvectorized in case there's a ldN/stN
opportunity but another SLP instance with a permutation not handled
by interleaving is present.  What I was originally suggesting is to
only cancel the SLP build if _all_ instances can be handled with
ldN/stN.

Of course I'm also happy with completely removing this heuristics.

Note some of the comments look off now, also the assignment to
ok before the goto is pointless and you should probably turn
this into a dump print instead.

Thanks,
Richard.

> Bootstrapped Regtested on aarch64-none-linux-gnu, -x86_64-pc-linux-gnu
>  and no issues.
> 
> Ok for master?



> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       * tree-vect-slp.c (vect_analyze_slp_instance): Moved load/store lanes
>       check to ...
>       * tree-vect-loop.c (vect_analyze_loop_2): ..Here
> 
> gcc/testsuite/ChangeLog:
> 
>       * gcc.dg/vect/slp-11b.c: Update output scan.
>       * gcc.dg/vect/slp-perm-6.c: Likewise.
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imend

Reply via email to