[23/46] Make LOOP_VINFO_MAY_MISALIGN_STMTS use stmt_vec_info

Message ID 876015ost0.fsf@arm.com
State New
Headers show
Series
  • Remove vinfo_for_stmt etc.
Related show

Commit Message

Richard Sandiford July 24, 2018, 10:02 a.m.
This patch changes LOOP_VINFO_MAY_MISALIGN_STMTS from an
auto_vec<gimple *> to an auto_vec<stmt_vec_info>.


2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change
	from an auto_vec<gimple *> to an auto_vec<stmt_vec_info>.
	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Update
	accordingly.
	* tree-vect-loop-manip.c (vect_create_cond_for_align_checks): Likewise.

Comments

Richard Biener July 25, 2018, 9:29 a.m. | #1
On Tue, Jul 24, 2018 at 12:02 PM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>

> This patch changes LOOP_VINFO_MAY_MISALIGN_STMTS from an

> auto_vec<gimple *> to an auto_vec<stmt_vec_info>.


OK.

>

> 2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

>

> gcc/

>         * tree-vectorizer.h (_loop_vec_info::may_misalign_stmts): Change

>         from an auto_vec<gimple *> to an auto_vec<stmt_vec_info>.

>         * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Update

>         accordingly.

>         * tree-vect-loop-manip.c (vect_create_cond_for_align_checks): Likewise.

>

> Index: gcc/tree-vectorizer.h

> ===================================================================

> --- gcc/tree-vectorizer.h       2018-07-24 10:23:15.756906285 +0100

> +++ gcc/tree-vectorizer.h       2018-07-24 10:23:18.856878757 +0100

> @@ -472,7 +472,7 @@ typedef struct _loop_vec_info : public v

>

>    /* Statements in the loop that have data references that are candidates for a

>       runtime (loop versioning) misalignment check.  */

> -  auto_vec<gimple *> may_misalign_stmts;

> +  auto_vec<stmt_vec_info> may_misalign_stmts;

>

>    /* Reduction cycles detected in the loop. Used in loop-aware SLP.  */

>    auto_vec<stmt_vec_info> reductions;

> Index: gcc/tree-vect-data-refs.c

> ===================================================================

> --- gcc/tree-vect-data-refs.c   2018-07-24 10:23:08.532970436 +0100

> +++ gcc/tree-vect-data-refs.c   2018-07-24 10:23:18.856878757 +0100

> @@ -2231,16 +2231,15 @@ vect_enhance_data_refs_alignment (loop_v

>

>    if (do_versioning)

>      {

> -      vec<gimple *> may_misalign_stmts

> +      vec<stmt_vec_info> may_misalign_stmts

>          = LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo);

> -      gimple *stmt;

> +      stmt_vec_info stmt_info;

>

>        /* It can now be assumed that the data references in the statements

>           in LOOP_VINFO_MAY_MISALIGN_STMTS will be aligned in the version

>           of the loop being vectorized.  */

> -      FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt)

> +      FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt_info)

>          {

> -          stmt_vec_info stmt_info = vinfo_for_stmt (stmt);

>            dr = STMT_VINFO_DATA_REF (stmt_info);

>           SET_DR_MISALIGNMENT (dr, 0);

>           if (dump_enabled_p ())

> Index: gcc/tree-vect-loop-manip.c

> ===================================================================

> --- gcc/tree-vect-loop-manip.c  2018-07-24 10:23:04.029010432 +0100

> +++ gcc/tree-vect-loop-manip.c  2018-07-24 10:23:18.856878757 +0100

> @@ -2772,9 +2772,9 @@ vect_create_cond_for_align_checks (loop_

>                                     tree *cond_expr,

>                                    gimple_seq *cond_expr_stmt_list)

>  {

> -  vec<gimple *> may_misalign_stmts

> +  vec<stmt_vec_info> may_misalign_stmts

>      = LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo);

> -  gimple *ref_stmt;

> +  stmt_vec_info stmt_info;

>    int mask = LOOP_VINFO_PTR_MASK (loop_vinfo);

>    tree mask_cst;

>    unsigned int i;

> @@ -2795,23 +2795,22 @@ vect_create_cond_for_align_checks (loop_

>    /* Create expression (mask & (dr_1 || ... || dr_n)) where dr_i is the address

>       of the first vector of the i'th data reference. */

>

> -  FOR_EACH_VEC_ELT (may_misalign_stmts, i, ref_stmt)

> +  FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt_info)

>      {

>        gimple_seq new_stmt_list = NULL;

>        tree addr_base;

>        tree addr_tmp_name;

>        tree new_or_tmp_name;

>        gimple *addr_stmt, *or_stmt;

> -      stmt_vec_info stmt_vinfo = vinfo_for_stmt (ref_stmt);

> -      tree vectype = STMT_VINFO_VECTYPE (stmt_vinfo);

> +      tree vectype = STMT_VINFO_VECTYPE (stmt_info);

>        bool negative = tree_int_cst_compare

> -       (DR_STEP (STMT_VINFO_DATA_REF (stmt_vinfo)), size_zero_node) < 0;

> +       (DR_STEP (STMT_VINFO_DATA_REF (stmt_info)), size_zero_node) < 0;

>        tree offset = negative

>         ? size_int (-TYPE_VECTOR_SUBPARTS (vectype) + 1) : size_zero_node;

>

>        /* create: addr_tmp = (int)(address_of_first_vector) */

>        addr_base =

> -       vect_create_addr_base_for_vector_ref (ref_stmt, &new_stmt_list,

> +       vect_create_addr_base_for_vector_ref (stmt_info, &new_stmt_list,

>                                               offset);

>        if (new_stmt_list != NULL)

>         gimple_seq_add_seq (cond_expr_stmt_list, new_stmt_list);

Patch

Index: gcc/tree-vectorizer.h
===================================================================
--- gcc/tree-vectorizer.h	2018-07-24 10:23:15.756906285 +0100
+++ gcc/tree-vectorizer.h	2018-07-24 10:23:18.856878757 +0100
@@ -472,7 +472,7 @@  typedef struct _loop_vec_info : public v
 
   /* Statements in the loop that have data references that are candidates for a
      runtime (loop versioning) misalignment check.  */
-  auto_vec<gimple *> may_misalign_stmts;
+  auto_vec<stmt_vec_info> may_misalign_stmts;
 
   /* Reduction cycles detected in the loop. Used in loop-aware SLP.  */
   auto_vec<stmt_vec_info> reductions;
Index: gcc/tree-vect-data-refs.c
===================================================================
--- gcc/tree-vect-data-refs.c	2018-07-24 10:23:08.532970436 +0100
+++ gcc/tree-vect-data-refs.c	2018-07-24 10:23:18.856878757 +0100
@@ -2231,16 +2231,15 @@  vect_enhance_data_refs_alignment (loop_v
 
   if (do_versioning)
     {
-      vec<gimple *> may_misalign_stmts
+      vec<stmt_vec_info> may_misalign_stmts
         = LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo);
-      gimple *stmt;
+      stmt_vec_info stmt_info;
 
       /* It can now be assumed that the data references in the statements
          in LOOP_VINFO_MAY_MISALIGN_STMTS will be aligned in the version
          of the loop being vectorized.  */
-      FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt)
+      FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt_info)
         {
-          stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
           dr = STMT_VINFO_DATA_REF (stmt_info);
 	  SET_DR_MISALIGNMENT (dr, 0);
 	  if (dump_enabled_p ())
Index: gcc/tree-vect-loop-manip.c
===================================================================
--- gcc/tree-vect-loop-manip.c	2018-07-24 10:23:04.029010432 +0100
+++ gcc/tree-vect-loop-manip.c	2018-07-24 10:23:18.856878757 +0100
@@ -2772,9 +2772,9 @@  vect_create_cond_for_align_checks (loop_
                                    tree *cond_expr,
 				   gimple_seq *cond_expr_stmt_list)
 {
-  vec<gimple *> may_misalign_stmts
+  vec<stmt_vec_info> may_misalign_stmts
     = LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo);
-  gimple *ref_stmt;
+  stmt_vec_info stmt_info;
   int mask = LOOP_VINFO_PTR_MASK (loop_vinfo);
   tree mask_cst;
   unsigned int i;
@@ -2795,23 +2795,22 @@  vect_create_cond_for_align_checks (loop_
   /* Create expression (mask & (dr_1 || ... || dr_n)) where dr_i is the address
      of the first vector of the i'th data reference. */
 
-  FOR_EACH_VEC_ELT (may_misalign_stmts, i, ref_stmt)
+  FOR_EACH_VEC_ELT (may_misalign_stmts, i, stmt_info)
     {
       gimple_seq new_stmt_list = NULL;
       tree addr_base;
       tree addr_tmp_name;
       tree new_or_tmp_name;
       gimple *addr_stmt, *or_stmt;
-      stmt_vec_info stmt_vinfo = vinfo_for_stmt (ref_stmt);
-      tree vectype = STMT_VINFO_VECTYPE (stmt_vinfo);
+      tree vectype = STMT_VINFO_VECTYPE (stmt_info);
       bool negative = tree_int_cst_compare
-	(DR_STEP (STMT_VINFO_DATA_REF (stmt_vinfo)), size_zero_node) < 0;
+	(DR_STEP (STMT_VINFO_DATA_REF (stmt_info)), size_zero_node) < 0;
       tree offset = negative
 	? size_int (-TYPE_VECTOR_SUBPARTS (vectype) + 1) : size_zero_node;
 
       /* create: addr_tmp = (int)(address_of_first_vector) */
       addr_base =
-	vect_create_addr_base_for_vector_ref (ref_stmt, &new_stmt_list,
+	vect_create_addr_base_for_vector_ref (stmt_info, &new_stmt_list,
 					      offset);
       if (new_stmt_list != NULL)
 	gimple_seq_add_seq (cond_expr_stmt_list, new_stmt_list);