This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On Tue, Jul 24, 2018 at 12:10 PM Richard Sandiford
<richard.sandiford@arm.com> 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  <richard.sandiford@arm.com>
>
> 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<tree> *);
>  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>
>    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<stmt_vec_info>
>  /* 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 (&si))
> -         {
> -           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.c        2018-07-24 10:24:19.540339838 +0100
> +++ gcc/tree-vect-loop.c        2018-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 (&si))
> -        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);
>            gsi_next (&si);
>          }
>      }
> Index: gcc/tree-vect-slp.c
> ===================================================================
> --- gcc/tree-vect-slp.c 2018-07-24 10:24:22.680311942 +0100
> +++ gcc/tree-vect-slp.c 2018-07-24 10:24:26.080281735 +0100
> @@ -2490,17 +2490,8 @@ _bb_vec_info::~_bb_vec_info ()
>  {
>    for (gimple_stmt_iterator si = region_begin;
>         gsi_stmt (si) != gsi_stmt (region_end); gsi_next (&si))
> -    {
> -      gimple *stmt = gsi_stmt (si);
> -      stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
> -
> -      if (stmt_info)
> -        /* Free stmt_vec_info.  */
> -        free_stmt_vec_info (stmt);
> -
> -      /* Reset region marker.  */
> -      gimple_set_uid (stmt, -1);
> -    }
> +    /* Reset region marker.  */
> +    gimple_set_uid (gsi_stmt (si), -1);
>
>    bb->aux = NULL;
>  }
> Index: gcc/tree-vectorizer.c
> ===================================================================
> --- gcc/tree-vectorizer.c       2018-07-24 10:24:22.684311906 +0100
> +++ gcc/tree-vectorizer.c       2018-07-24 10:24:26.084281700 +0100
> @@ -584,6 +584,7 @@ vec_info::lookup_dr (data_reference *dr)
>  vec_info::remove_stmt (stmt_vec_info stmt_info)
>  {
>    gcc_assert (!stmt_info->pattern_stmt_p);
> +  set_vinfo_for_stmt (stmt_info->stmt, NULL);
>    gimple_stmt_iterator si = gsi_for_stmt (stmt_info->stmt);
>    unlink_stmt_vdef (stmt_info->stmt);
>    gsi_remove (&si, true);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]