aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-05-17 15:23:38 +0200
committerRichard Biener <rguenther@suse.de>2024-05-22 13:18:28 +0200
commit31e9bae0ea5e5413abfa3ca9050e66cc6760553e (patch)
tree7fbea146867e89980e470dc20a3f53f22b3cd361
parent0c7792f707368d0225a9a457895b847ef660c270 (diff)
downloadgcc-31e9bae0ea5e5413abfa3ca9050e66cc6760553e.zip
gcc-31e9bae0ea5e5413abfa3ca9050e66cc6760553e.tar.gz
gcc-31e9bae0ea5e5413abfa3ca9050e66cc6760553e.tar.bz2
Avoid SLP_REPRESENTATIVE access for VEC_PERM in SLP scheduling
SLP permute nodes can end up without a SLP_REPRESENTATIVE now, the following avoids touching it in this case in vect_schedule_slp_node. * tree-vect-slp.cc (vect_schedule_slp_node): Avoid looking at SLP_REPRESENTATIVE for VEC_PERM nodes.
-rw-r--r--gcc/tree-vect-slp.cc28
1 files changed, 16 insertions, 12 deletions
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index f34ed54..43f2c15 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -9301,13 +9301,8 @@ vect_schedule_slp_node (vec_info *vinfo,
gcc_assert (SLP_TREE_NUMBER_OF_VEC_STMTS (node) != 0);
SLP_TREE_VEC_DEFS (node).create (SLP_TREE_NUMBER_OF_VEC_STMTS (node));
- if (dump_enabled_p ())
- dump_printf_loc (MSG_NOTE, vect_location,
- "------>vectorizing SLP node starting from: %G",
- stmt_info->stmt);
-
- if (STMT_VINFO_DATA_REF (stmt_info)
- && SLP_TREE_CODE (node) != VEC_PERM_EXPR)
+ if (SLP_TREE_CODE (node) != VEC_PERM_EXPR
+ && STMT_VINFO_DATA_REF (stmt_info))
{
/* Vectorized loads go before the first scalar load to make it
ready early, vectorized stores go before the last scalar
@@ -9319,10 +9314,10 @@ vect_schedule_slp_node (vec_info *vinfo,
last_stmt_info = vect_find_last_scalar_stmt_in_slp (node);
si = gsi_for_stmt (last_stmt_info->stmt);
}
- else if ((STMT_VINFO_TYPE (stmt_info) == cycle_phi_info_type
- || STMT_VINFO_TYPE (stmt_info) == induc_vec_info_type
- || STMT_VINFO_TYPE (stmt_info) == phi_info_type)
- && SLP_TREE_CODE (node) != VEC_PERM_EXPR)
+ else if (SLP_TREE_CODE (node) != VEC_PERM_EXPR
+ && (STMT_VINFO_TYPE (stmt_info) == cycle_phi_info_type
+ || STMT_VINFO_TYPE (stmt_info) == induc_vec_info_type
+ || STMT_VINFO_TYPE (stmt_info) == phi_info_type))
{
/* For PHI node vectorization we do not use the insertion iterator. */
si = gsi_none ();
@@ -9456,6 +9451,9 @@ vect_schedule_slp_node (vec_info *vinfo,
/* Handle purely internal nodes. */
if (SLP_TREE_CODE (node) == VEC_PERM_EXPR)
{
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "------>vectorizing SLP permutation node\n");
/* ??? the transform kind is stored to STMT_VINFO_TYPE which might
be shared with different SLP nodes (but usually it's the same
operation apart from the case the stmt is only there for denoting
@@ -9474,7 +9472,13 @@ vect_schedule_slp_node (vec_info *vinfo,
}
}
else
- vect_transform_stmt (vinfo, stmt_info, &si, node, instance);
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "------>vectorizing SLP node starting from: %G",
+ stmt_info->stmt);
+ vect_transform_stmt (vinfo, stmt_info, &si, node, instance);
+ }
}
/* Replace scalar calls from SLP node NODE with setting of their lhs to zero.