The more I look at our heuristic the more it appears due for a rewrite.
But that's really not in my plans right now.  I just sent a riscv patch
that does the necessary preparations so you can basically

s/STMT_VINFO_TYPE (stmt_info)/SLP_TREE_TYPE (node)/

once it lands.

I regtested with your patch and the following on top and things look
reasonable (modulo the general concerns above).

--
Regards
Robin

[PATCH] RISC-V: Switch from STMT_VINFO_TYPE to SLP_TREE_TYPE.

STMT_VINFO_TYPE -> SLP_TREE_TYPE
---
gcc/config/riscv/riscv-vector-costs.cc | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/gcc/config/riscv/riscv-vector-costs.cc 
b/gcc/config/riscv/riscv-vector-costs.cc
index df924fafd8e..cc23d9f6b34 100644
--- a/gcc/config/riscv/riscv-vector-costs.cc
+++ b/gcc/config/riscv/riscv-vector-costs.cc
@@ -275,13 +275,12 @@ loop_invariant_op_p (class loop *loop,
/* Return true if the variable should be counted into liveness.  */
static bool
variable_vectorized_p (class loop *loop, stmt_vec_info stmt_info,
-                      slp_tree node ATTRIBUTE_UNUSED, tree var, bool lhs_p)
+                      slp_tree node, tree var, bool lhs_p)
{
  if (!var)
    return false;
  gimple *stmt = STMT_VINFO_STMT (stmt_info);
-  stmt_info = vect_stmt_to_vectorize (stmt_info);
-  enum stmt_vec_info_type type = STMT_VINFO_TYPE (stmt_info);
+  enum stmt_vec_info_type type = SLP_TREE_TYPE (node);
  if (is_gimple_call (stmt) && gimple_call_internal_p (stmt))
    {
      if (gimple_call_internal_fn (stmt) == IFN_MASK_STORE
@@ -601,10 +600,9 @@ get_store_value (gimple *stmt)

/* Return true if additional vector vars needed.  */
bool
-costs::need_additional_vector_vars_p (stmt_vec_info stmt_info,
-                                     slp_tree node ATTRIBUTE_UNUSED)
+costs::need_additional_vector_vars_p (stmt_vec_info stmt_info, slp_tree node)
{
-  enum stmt_vec_info_type type = STMT_VINFO_TYPE (stmt_info);
+  enum stmt_vec_info_type type = SLP_TREE_TYPE (node);
  if (type == load_vec_info_type || type == store_vec_info_type)
    {
      if (STMT_VINFO_GATHER_SCATTER_P (stmt_info)
@@ -694,7 +692,7 @@ costs::update_local_live_ranges (
          if (!node)
            continue;

-         if (STMT_VINFO_TYPE (stmt_info) == undef_vec_info_type)
+         if (SLP_TREE_TYPE (*node) == undef_vec_info_type)
            continue;

          for (j = 0; j < gimple_phi_num_args (phi); j++)
@@ -773,7 +771,7 @@ costs::update_local_live_ranges (
          slp_tree *node = vinfo_slp_map.get (stmt_info);
          if (!node)
            continue;
-         enum stmt_vec_info_type type = STMT_VINFO_TYPE (stmt_info);
+         enum stmt_vec_info_type type = SLP_TREE_TYPE (*node);
          if (need_additional_vector_vars_p (stmt_info, *node))
            {
              /* For non-adjacent load/store STMT, we will potentially
--
2.50.0

Reply via email to