diff options
author | Richard Biener <rguenther@suse.de> | 2024-05-17 15:23:38 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-05-22 13:18:28 +0200 |
commit | 31e9bae0ea5e5413abfa3ca9050e66cc6760553e (patch) | |
tree | 7fbea146867e89980e470dc20a3f53f22b3cd361 /gcc | |
parent | 0c7792f707368d0225a9a457895b847ef660c270 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-slp.cc | 28 |
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. |