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);