tree-optimization/95272 - add SLP_TREE_REPRESENTATIVE
authorRichard Biener <rguenther@suse.de>
Fri, 29 May 2020 10:00:00 +0000 (12:00 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 29 May 2020 11:00:36 +0000 (13:00 +0200)
commitc735929a2503a7d03ac4739bba5b25336bf954c3
tree32a3c744207e5a93d1b9d156a2fb1caa6d2ff10c
parentddf90b72d2a723decc487db6d3131846b9a618de
tree-optimization/95272 - add SLP_TREE_REPRESENTATIVE

This adds SLP_TREE_REPRESENTATIVE - a representative stmt-info that
is used by SLP analysis and code generation.  This avoids the need
for the hack in vect_slp_rearrange_stmts which previously avoided
to re-arrange stmts that might not have been isomorphic because
of operand swapping.  It also plays nice with future directions of SLP
and for the forseeable future is easier than replicating more and
more info in the SLP node as long as non-SLP is in-tree.

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

PR tree-optimization/95272
* tree-vectorizer.h (_slp_tree::representative): Add.
(SLP_TREE_REPRESENTATIVE): Likewise.
* tree-vect-loop.c (vectorizable_reduction): Adjust SLP
node gathering.
(vectorizable_live_operation): Use the representative to
attach the reduction info to.
* tree-vect-slp.c (_slp_tree::_slp_tree): Initialize
SLP_TREE_REPRESENTATIVE.
(vect_create_new_slp_node): Likewise.
(slp_copy_subtree): Copy it.
(vect_slp_rearrange_stmts): Re-arrange even COND_EXPR stmts.
(vect_slp_analyze_node_operations_1): Pass the representative
to vect_analyze_stmt.
(vect_schedule_slp_instance): Pass the representative to
vect_transform_stmt.

* gcc.dg/vect/pr95272.c: New testcase.
gcc/testsuite/gcc.dg/vect/pr95272.c [new file with mode: 0644]
gcc/tree-vect-loop.c
gcc/tree-vect-slp.c
gcc/tree-vectorizer.h