public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/autopar_devel] Use SLP_TREE_VECTYPE consistently
@ 2020-08-22 22:45 Giuliano Belinassi
0 siblings, 0 replies; only message in thread
From: Giuliano Belinassi @ 2020-08-22 22:45 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:2052c8a04934ac7f45b486bea864c1f24f199609
commit 2052c8a04934ac7f45b486bea864c1f24f199609
Author: Richard Biener <rguenther@suse.de>
Date: Wed Jun 17 15:22:10 2020 +0200
Use SLP_TREE_VECTYPE consistently
This assigns SLP_TREE_VECTYPE to all SLP nodes and uses it when
analyzing def operands. It does not deal with mismatches between
SLP_TREE_VECTYPE and STMT_VINFO_VECTYPE yet - those cases are
still rejected until I get to clean up the interaction with data
reference groups.
2020-06-17 Richard Biener <rguenther@suse.de>
* tree-vect-slp.c (vect_build_slp_tree_1): Set the passed
in *vectype parameter.
(vect_build_slp_tree_2): Set SLP_TREE_VECTYPE from what
vect_build_slp_tree_1 computed.
(vect_analyze_slp_instance): Set SLP_TREE_VECTYPE.
(vect_slp_analyze_node_operations_1): Use the SLP node vector type.
(vect_schedule_slp_instance): Likewise.
* tree-vect-stmts.c (vect_is_simple_use): Take the vector type
from SLP_TREE_VECTYPE.
Diff:
---
gcc/tree-vect-slp.c | 15 +++++++++++----
gcc/tree-vect-stmts.c | 12 ++++++------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 303410c2fc4..fe946738a97 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -744,7 +744,7 @@ static bool
vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
vec<stmt_vec_info> stmts, unsigned int group_size,
poly_uint64 *max_nunits, bool *matches,
- bool *two_operators)
+ bool *two_operators, tree *node_vectype)
{
unsigned int i;
stmt_vec_info first_stmt_info = stmts[0];
@@ -848,6 +848,7 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
/* Check the operation. */
if (i == 0)
{
+ *node_vectype = vectype;
first_stmt_code = rhs_code;
/* Shift arguments should be equal in all the packed stmts for a
@@ -1259,14 +1260,17 @@ vect_build_slp_tree_2 (vec_info *vinfo,
return NULL;
(*tree_size)++;
node = vect_create_new_slp_node (stmts, 0);
+ SLP_TREE_VECTYPE (node) = vectype;
return node;
}
bool two_operators = false;
unsigned char *swap = XALLOCAVEC (unsigned char, group_size);
+ tree vectype = NULL_TREE;
if (!vect_build_slp_tree_1 (vinfo, swap, stmts, group_size,
- &this_max_nunits, matches, &two_operators))
+ &this_max_nunits, matches, &two_operators,
+ &vectype))
return NULL;
/* If the SLP node is a load, terminate the recursion unless masked. */
@@ -1284,6 +1288,7 @@ vect_build_slp_tree_2 (vec_info *vinfo,
*max_nunits = this_max_nunits;
(*tree_size)++;
node = vect_create_new_slp_node (stmts, 0);
+ SLP_TREE_VECTYPE (node) = vectype;
/* And compute the load permutation. Whether it is actually
a permutation depends on the unrolling factor which is
decided later. */
@@ -1509,6 +1514,7 @@ fail:
node = vect_create_new_slp_node (stmts, nops);
SLP_TREE_TWO_OPERATORS (node) = two_operators;
+ SLP_TREE_VECTYPE (node) = vectype;
SLP_TREE_CHILDREN (node).splice (children);
return node;
}
@@ -2169,6 +2175,7 @@ vect_analyze_slp_instance (vec_info *vinfo,
for (unsigned i = 0; i < group_size; ++i)
scalar_stmts.quick_push (next_info);
slp_tree conv = vect_create_new_slp_node (scalar_stmts, 1);
+ SLP_TREE_VECTYPE (conv) = STMT_VINFO_VECTYPE (next_info);
SLP_TREE_CHILDREN (conv).quick_push (node);
SLP_INSTANCE_TREE (new_instance) = conv;
/* We also have to fake this conversion stmt as SLP reduction
@@ -2620,7 +2627,7 @@ vect_slp_analyze_node_operations_1 (vec_info *vinfo, slp_tree node,
else
vf = 1;
unsigned int group_size = SLP_TREE_LANES (node);
- tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+ tree vectype = SLP_TREE_VECTYPE (node);
SLP_TREE_NUMBER_OF_VEC_STMTS (node)
= vect_get_num_vectors (vf * group_size, vectype);
}
@@ -3963,7 +3970,7 @@ vect_schedule_slp_instance (vec_info *vinfo,
stmt_vec_info stmt_info = SLP_TREE_REPRESENTATIVE (node);
/* VECTYPE is the type of the destination. */
- tree vectype = STMT_VINFO_VECTYPE (stmt_info);
+ tree vectype = SLP_TREE_VECTYPE (node);
poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
unsigned group_size = SLP_TREE_SCALAR_STMTS (node).length ();
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index a3d070bc28c..4a0a907fcb4 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -11230,15 +11230,18 @@ vect_is_simple_use (vec_info *vinfo, stmt_vec_info stmt, slp_tree slp_node,
{
slp_tree child = SLP_TREE_CHILDREN (slp_node)[operand];
*slp_def = child;
+ *vectype = SLP_TREE_VECTYPE (child);
if (SLP_TREE_DEF_TYPE (child) == vect_internal_def)
- *op = gimple_get_lhs (SLP_TREE_REPRESENTATIVE (child)->stmt);
+ {
+ *op = gimple_get_lhs (SLP_TREE_REPRESENTATIVE (child)->stmt);
+ return vect_is_simple_use (*op, vinfo, dt, def_stmt_info_out);
+ }
else
{
if (def_stmt_info_out)
*def_stmt_info_out = NULL;
*op = SLP_TREE_SCALAR_OPS (child)[0];
*dt = SLP_TREE_DEF_TYPE (child);
- *vectype = SLP_TREE_VECTYPE (child);
return true;
}
}
@@ -11269,11 +11272,8 @@ vect_is_simple_use (vec_info *vinfo, stmt_vec_info stmt, slp_tree slp_node,
}
else
gcc_unreachable ();
+ return vect_is_simple_use (*op, vinfo, dt, vectype, def_stmt_info_out);
}
-
- /* ??? We might want to update *vectype from *slp_def here though
- when sharing nodes this would prevent unsharing in the caller. */
- return vect_is_simple_use (*op, vinfo, dt, vectype, def_stmt_info_out);
}
/* If OP is not NULL and is external or constant update its vector
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-08-22 22:45 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-22 22:45 [gcc/devel/autopar_devel] Use SLP_TREE_VECTYPE consistently Giuliano Belinassi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).