On Tue, Jul 24, 2018 at 12:02 PM Richard Sandiford
<richard.sandif...@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.sandif...@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);

Reply via email to