The following changes the record_stmt_cost calls in vectorizable_load/store to only pass the SLP node when costing vector stmts. For now we'll still pass the stmt_vec_info, determined from SLP_TREE_REPRESENTATIVE, so this merely cleans up the API.
Bootstrap and regtest running on x86_64-unknown-linux-gnu. * tree-vectorizer.h (record_stmt_cost): Remove mixed stmt_vec_info/SLP node inline overload. * tree-vect-stmts.cc (vectorizable_store): For costing vector stmts only pass SLP node to record_stmt_cost. (vectorizable_load): Likewise. --- gcc/tree-vect-stmts.cc | 41 ++++++++++++++++------------------------- gcc/tree-vectorizer.h | 13 ------------- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 7075948a19a..b190473c258 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -8680,7 +8680,7 @@ vectorizable_store (vec_info *vinfo, } else if (vls_type != VLS_STORE_INVARIANT) return; - *prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, stmt_info, + *prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, slp_node, 0, vect_prologue); }; @@ -8989,8 +8989,7 @@ vectorizable_store (vec_info *vinfo, if (nstores > 1) inside_cost += record_stmt_cost (cost_vec, n_adjacent_stores, - vec_to_scalar, stmt_info, slp_node, - 0, vect_body); + vec_to_scalar, slp_node, 0, vect_body); } if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, @@ -9327,8 +9326,7 @@ vectorizable_store (vec_info *vinfo, { if (costing_p && vls_type == VLS_STORE_INVARIANT) prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, - stmt_info, slp_node, 0, - vect_prologue); + slp_node, 0, vect_prologue); else if (!costing_p) { /* Since the store is not grouped, DR_GROUP_SIZE is 1, and @@ -9578,11 +9576,11 @@ vectorizable_store (vec_info *vinfo, consumed by the load). */ inside_cost += record_stmt_cost (cost_vec, cnunits, vec_to_scalar, - stmt_info, slp_node, 0, vect_body); + slp_node, 0, vect_body); /* N scalar stores plus extracting the elements. */ inside_cost += record_stmt_cost (cost_vec, cnunits, vec_to_scalar, - stmt_info, slp_node, 0, vect_body); + slp_node, 0, vect_body); inside_cost += record_stmt_cost (cost_vec, cnunits, scalar_store, stmt_info, 0, vect_body); @@ -9779,8 +9777,7 @@ vectorizable_store (vec_info *vinfo, int group_size = DR_GROUP_SIZE (first_stmt_info); int nstmts = ceil_log2 (group_size) * group_size; inside_cost += record_stmt_cost (cost_vec, nstmts, vec_perm, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "vect_model_store_cost: " @@ -9809,8 +9806,7 @@ vectorizable_store (vec_info *vinfo, { if (costing_p) inside_cost += record_stmt_cost (cost_vec, 1, vec_perm, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); else { tree perm_mask = perm_mask_for_reverse (vectype); @@ -10029,7 +10025,7 @@ vectorizable_store (vec_info *vinfo, /* Spill. */ prologue_cost += record_stmt_cost (cost_vec, ncopies, vector_store, - stmt_info, slp_node, 0, vect_epilogue); + slp_node, 0, vect_epilogue); /* Loads. */ prologue_cost += record_stmt_cost (cost_vec, ncopies * nregs, scalar_load, @@ -10607,7 +10603,7 @@ vectorizable_load (vec_info *vinfo, = hoist_p ? vect_prologue : vect_body; unsigned int cost = record_stmt_cost (cost_vec, 1, scalar_load, stmt_info, 0, cost_loc); - cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, stmt_info, + cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, slp_node, 0, cost_loc); unsigned int prologue_cost = hoist_p ? cost : 0; unsigned int inside_cost = hoist_p ? 0 : cost; @@ -10911,8 +10907,7 @@ vectorizable_load (vec_info *vinfo, { if (costing_p) inside_cost += record_stmt_cost (cost_vec, 1, vec_construct, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); else { tree vec_inv = build_constructor (lvectype, v); @@ -10967,8 +10962,7 @@ vectorizable_load (vec_info *vinfo, vect_transform_slp_perm_load (vinfo, slp_node, vNULL, NULL, vf, true, &n_perms, &n_loads); inside_cost += record_stmt_cost (cost_vec, n_perms, vec_perm, - first_stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); } else vect_transform_slp_perm_load (vinfo, slp_node, dr_chain, gsi, vf, @@ -11743,7 +11737,7 @@ vectorizable_load (vec_info *vinfo, /* For emulated gathers N offset vector element offset add is consumed by the load). */ inside_cost = record_stmt_cost (cost_vec, const_nunits, - vec_to_scalar, stmt_info, + vec_to_scalar, slp_node, 0, vect_body); /* N scalar loads plus gathering them into a vector. */ @@ -11752,7 +11746,7 @@ vectorizable_load (vec_info *vinfo, stmt_info, 0, vect_body); inside_cost = record_stmt_cost (cost_vec, 1, vec_construct, - stmt_info, slp_node, 0, vect_body); + slp_node, 0, vect_body); continue; } unsigned HOST_WIDE_INT const_offset_nunits @@ -12413,8 +12407,7 @@ vectorizable_load (vec_info *vinfo, { if (costing_p) inside_cost = record_stmt_cost (cost_vec, 1, vec_perm, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); else { tree perm_mask = perm_mask_for_reverse (vectype); @@ -12483,8 +12476,7 @@ vectorizable_load (vec_info *vinfo, vect_transform_slp_perm_load (vinfo, slp_node, vNULL, nullptr, vf, true, &n_perms, nullptr); inside_cost = record_stmt_cost (cost_vec, n_perms, vec_perm, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); } else { @@ -12511,8 +12503,7 @@ vectorizable_load (vec_info *vinfo, int group_size = DR_GROUP_SIZE (first_stmt_info); int nstmts = ceil_log2 (group_size) * group_size; inside_cost += record_stmt_cost (cost_vec, nstmts, vec_perm, - stmt_info, slp_node, 0, - vect_body); + slp_node, 0, vect_body); if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 118200ff4a8..7aa2b02b63c 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2441,19 +2441,6 @@ record_stmt_cost (stmt_vector_for_cost *body_cost_vec, int count, STMT_VINFO_VECTYPE (stmt_info), misalign, where); } -/* Overload of record_stmt_cost with VECTYPE derived from STMT_INFO and - SLP node specified. */ - -inline unsigned -record_stmt_cost (stmt_vector_for_cost *body_cost_vec, int count, - enum vect_cost_for_stmt kind, stmt_vec_info stmt_info, - slp_tree node, - int misalign, enum vect_cost_model_location where) -{ - return record_stmt_cost (body_cost_vec, count, kind, stmt_info, node, - STMT_VINFO_VECTYPE (stmt_info), misalign, where); -} - /* Overload of record_stmt_cost with VECTYPE derived from SLP node. */ inline unsigned -- 2.43.0