middle-end: Move load/store-lanes check till late.
authorTamar Christina <tamar.christina@arm.com>
Wed, 4 Nov 2020 22:33:11 +0000 (22:33 +0000)
committerTamar Christina <tamar.christina@arm.com>
Wed, 4 Nov 2020 22:33:11 +0000 (22:33 +0000)
commit4d76079fdfa3d36ebd95ac8b489519945e8ee88f
tree137fc0337746424a1379b9b5812f1bae11208f70
parent6682ef4363b32977aeca590fced2221329c92c02
middle-end: Move load/store-lanes check till late.

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.

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.
gcc/testsuite/gcc.dg/vect/slp-11b.c
gcc/testsuite/gcc.dg/vect/slp-perm-6.c
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c