Re: [43/46] Make free_stmt_vec_info take a stmt_vec_info

2018-07-31 Thread Richard Biener
On Tue, Jul 24, 2018 at 12:10 PM Richard Sandiford
 wrote:
>
> This patch makes free_stmt_vec_info take the stmt_vec_info that
> it's supposed to free and makes it free only that stmt_vec_info.
> Callers need to update the statement mapping where necessary
> (but now there are only a couple of callers).
>
> This in turns means that we can leave ~vec_info to do the actual
> freeing, since there's no longer a need to do it before resetting
> the gimple_uids.

OK.

>
> 2018-07-24  Richard Sandiford  
>
> gcc/
> * tree-vectorizer.h (free_stmt_vec_info): Take a stmt_vec_info
> rather than a gimple stmt.
> * tree-vect-stmts.c (free_stmt_vec_info): Likewise.  Don't free
> information for pattern statements when passed the original
> statement; instead wait to be passed the pattern statement itself.
> Don't call set_vinfo_for_stmt here.
> (free_stmt_vec_infos): Update call to free_stmt_vec_info.
> * tree-vect-loop.c (_loop_vec_info::~loop_vec_info): Don't free
> stmt_vec_infos here.
> * tree-vect-slp.c (_bb_vec_info::~bb_vec_info): Likewise.
> * tree-vectorizer.c (vec_info::remove_stmt): Nullify the statement's
> stmt_vec_infos entry.
>
> Index: gcc/tree-vectorizer.h
> ===
> --- gcc/tree-vectorizer.h   2018-07-24 10:24:22.684311906 +0100
> +++ gcc/tree-vectorizer.h   2018-07-24 10:24:26.084281700 +0100
> @@ -1484,7 +1484,7 @@ extern bool supportable_narrowing_operat
>  enum tree_code *,
>  int *, vec *);
>  extern stmt_vec_info new_stmt_vec_info (gimple *stmt, vec_info *);
> -extern void free_stmt_vec_info (gimple *stmt);
> +extern void free_stmt_vec_info (stmt_vec_info);
>  extern unsigned record_stmt_cost (stmt_vector_for_cost *, int,
>   enum vect_cost_for_stmt, stmt_vec_info,
>   int, enum vect_cost_model_location);
> Index: gcc/tree-vect-stmts.c
> ===
> --- gcc/tree-vect-stmts.c   2018-07-24 10:24:22.684311906 +0100
> +++ gcc/tree-vect-stmts.c   2018-07-24 10:24:26.084281700 +0100
> @@ -9916,7 +9916,7 @@ free_stmt_vec_infos (vec
>stmt_vec_info info;
>FOR_EACH_VEC_ELT (*v, i, info)
>  if (info != NULL_STMT_VEC_INFO)
> -  free_stmt_vec_info (STMT_VINFO_STMT (info));
> +  free_stmt_vec_info (info);
>if (v == stmt_vec_info_vec)
>  stmt_vec_info_vec = NULL;
>v->release ();
> @@ -9926,44 +9926,18 @@ free_stmt_vec_infos (vec
>  /* Free stmt vectorization related info.  */
>
>  void
> -free_stmt_vec_info (gimple *stmt)
> +free_stmt_vec_info (stmt_vec_info stmt_info)
>  {
> -  stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
> -
> -  if (!stmt_info)
> -return;
> -
> -  /* Check if this statement has a related "pattern stmt"
> - (introduced by the vectorizer during the pattern recognition
> - pass).  Free pattern's stmt_vec_info and def stmt's stmt_vec_info
> - too.  */
> -  if (STMT_VINFO_IN_PATTERN_P (stmt_info))
> +  if (stmt_info->pattern_stmt_p)
>  {
> -  if (gimple_seq seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info))
> -   for (gimple_stmt_iterator si = gsi_start (seq);
> -!gsi_end_p (si); gsi_next ())
> - {
> -   gimple *seq_stmt = gsi_stmt (si);
> -   gimple_set_bb (seq_stmt, NULL);
> -   tree lhs = gimple_get_lhs (seq_stmt);
> -   if (lhs && TREE_CODE (lhs) == SSA_NAME)
> - release_ssa_name (lhs);
> -   free_stmt_vec_info (seq_stmt);
> - }
> -  stmt_vec_info patt_stmt_info = STMT_VINFO_RELATED_STMT (stmt_info);
> -  if (patt_stmt_info)
> -   {
> - gimple_set_bb (patt_stmt_info->stmt, NULL);
> - tree lhs = gimple_get_lhs (patt_stmt_info->stmt);
> - if (lhs && TREE_CODE (lhs) == SSA_NAME)
> -   release_ssa_name (lhs);
> - free_stmt_vec_info (patt_stmt_info);
> -   }
> +  gimple_set_bb (stmt_info->stmt, NULL);
> +  tree lhs = gimple_get_lhs (stmt_info->stmt);
> +  if (lhs && TREE_CODE (lhs) == SSA_NAME)
> +   release_ssa_name (lhs);
>  }
>
>STMT_VINFO_SAME_ALIGN_REFS (stmt_info).release ();
>STMT_VINFO_SIMD_CLONE_INFO (stmt_info).release ();
> -  set_vinfo_for_stmt (stmt, NULL);
>free (stmt_info);
>  }
>
> Index: gcc/tree-vect-loop.c
> ===
> --- gcc/tree-vect-loop.c2018-07-24 10:24:19.540339838 +0100
> +++ gcc/tree-vect-loop.c2018-07-24 10:24:26.080281735 +0100
> @@ -894,9 +894,6 @@ _loop_vec_info::~_loop_vec_info ()
>for (j = 0; j < nbbs; j++)
>  {
>basic_block bb = bbs[j];
> -  for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next ())
> -free_stmt_vec_info (gsi_stmt (si));
> -
>for (si = 

[43/46] Make free_stmt_vec_info take a stmt_vec_info

2018-07-24 Thread Richard Sandiford
This patch makes free_stmt_vec_info take the stmt_vec_info that
it's supposed to free and makes it free only that stmt_vec_info.
Callers need to update the statement mapping where necessary
(but now there are only a couple of callers).

This in turns means that we can leave ~vec_info to do the actual
freeing, since there's no longer a need to do it before resetting
the gimple_uids.


2018-07-24  Richard Sandiford  

gcc/
* tree-vectorizer.h (free_stmt_vec_info): Take a stmt_vec_info
rather than a gimple stmt.
* tree-vect-stmts.c (free_stmt_vec_info): Likewise.  Don't free
information for pattern statements when passed the original
statement; instead wait to be passed the pattern statement itself.
Don't call set_vinfo_for_stmt here.
(free_stmt_vec_infos): Update call to free_stmt_vec_info.
* tree-vect-loop.c (_loop_vec_info::~loop_vec_info): Don't free
stmt_vec_infos here.
* tree-vect-slp.c (_bb_vec_info::~bb_vec_info): Likewise.
* tree-vectorizer.c (vec_info::remove_stmt): Nullify the statement's
stmt_vec_infos entry.

Index: gcc/tree-vectorizer.h
===
--- gcc/tree-vectorizer.h   2018-07-24 10:24:22.684311906 +0100
+++ gcc/tree-vectorizer.h   2018-07-24 10:24:26.084281700 +0100
@@ -1484,7 +1484,7 @@ extern bool supportable_narrowing_operat
 enum tree_code *,
 int *, vec *);
 extern stmt_vec_info new_stmt_vec_info (gimple *stmt, vec_info *);
-extern void free_stmt_vec_info (gimple *stmt);
+extern void free_stmt_vec_info (stmt_vec_info);
 extern unsigned record_stmt_cost (stmt_vector_for_cost *, int,
  enum vect_cost_for_stmt, stmt_vec_info,
  int, enum vect_cost_model_location);
Index: gcc/tree-vect-stmts.c
===
--- gcc/tree-vect-stmts.c   2018-07-24 10:24:22.684311906 +0100
+++ gcc/tree-vect-stmts.c   2018-07-24 10:24:26.084281700 +0100
@@ -9916,7 +9916,7 @@ free_stmt_vec_infos (vec
   stmt_vec_info info;
   FOR_EACH_VEC_ELT (*v, i, info)
 if (info != NULL_STMT_VEC_INFO)
-  free_stmt_vec_info (STMT_VINFO_STMT (info));
+  free_stmt_vec_info (info);
   if (v == stmt_vec_info_vec)
 stmt_vec_info_vec = NULL;
   v->release ();
@@ -9926,44 +9926,18 @@ free_stmt_vec_infos (vec
 /* Free stmt vectorization related info.  */
 
 void
-free_stmt_vec_info (gimple *stmt)
+free_stmt_vec_info (stmt_vec_info stmt_info)
 {
-  stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
-
-  if (!stmt_info)
-return;
-
-  /* Check if this statement has a related "pattern stmt"
- (introduced by the vectorizer during the pattern recognition
- pass).  Free pattern's stmt_vec_info and def stmt's stmt_vec_info
- too.  */
-  if (STMT_VINFO_IN_PATTERN_P (stmt_info))
+  if (stmt_info->pattern_stmt_p)
 {
-  if (gimple_seq seq = STMT_VINFO_PATTERN_DEF_SEQ (stmt_info))
-   for (gimple_stmt_iterator si = gsi_start (seq);
-!gsi_end_p (si); gsi_next ())
- {
-   gimple *seq_stmt = gsi_stmt (si);
-   gimple_set_bb (seq_stmt, NULL);
-   tree lhs = gimple_get_lhs (seq_stmt);
-   if (lhs && TREE_CODE (lhs) == SSA_NAME)
- release_ssa_name (lhs);
-   free_stmt_vec_info (seq_stmt);
- }
-  stmt_vec_info patt_stmt_info = STMT_VINFO_RELATED_STMT (stmt_info);
-  if (patt_stmt_info)
-   {
- gimple_set_bb (patt_stmt_info->stmt, NULL);
- tree lhs = gimple_get_lhs (patt_stmt_info->stmt);
- if (lhs && TREE_CODE (lhs) == SSA_NAME)
-   release_ssa_name (lhs);
- free_stmt_vec_info (patt_stmt_info);
-   }
+  gimple_set_bb (stmt_info->stmt, NULL);
+  tree lhs = gimple_get_lhs (stmt_info->stmt);
+  if (lhs && TREE_CODE (lhs) == SSA_NAME)
+   release_ssa_name (lhs);
 }
 
   STMT_VINFO_SAME_ALIGN_REFS (stmt_info).release ();
   STMT_VINFO_SIMD_CLONE_INFO (stmt_info).release ();
-  set_vinfo_for_stmt (stmt, NULL);
   free (stmt_info);
 }
 
Index: gcc/tree-vect-loop.c
===
--- gcc/tree-vect-loop.c2018-07-24 10:24:19.540339838 +0100
+++ gcc/tree-vect-loop.c2018-07-24 10:24:26.080281735 +0100
@@ -894,9 +894,6 @@ _loop_vec_info::~_loop_vec_info ()
   for (j = 0; j < nbbs; j++)
 {
   basic_block bb = bbs[j];
-  for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next ())
-free_stmt_vec_info (gsi_stmt (si));
-
   for (si = gsi_start_bb (bb); !gsi_end_p (si); )
 {
  gimple *stmt = gsi_stmt (si);
@@ -936,9 +933,6 @@ _loop_vec_info::~_loop_vec_info ()
}
}
}
-
- /* Free stmt_vec_info.  */
- free_stmt_vec_info (stmt);