Richard Biener <rguent...@suse.de> writes: > This makes the call chain below vec_init_vector happy with a NULL > stmt_vec_info which is used as "context". > > 2020-05-27 Richard Biener <rguent...@suse.de> > > * tree-vect-stmts.c (vect_finish_stmt_generation_1): > Conditionalize stmt_info use, assert the new stmt cannot throw > when not specified. > (vect_finish_stmt_generation): Adjust assert.
Wasn't sure from this patch in isolation: when's it valid to pass a null stmt_info? Felt weird that we suddenly needed this now, when we already have so many callers that follow the existing interface. Or is this because you want to remove the stmt_info argument entirely at some point, and this is a step towards that? Thanks, Richard > --- > gcc/tree-vect-stmts.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c > index 35043ecd0f9..901999be058 100644 > --- a/gcc/tree-vect-stmts.c > +++ b/gcc/tree-vect-stmts.c > @@ -1668,14 +1668,19 @@ vect_finish_stmt_generation_1 (vec_info *vinfo, > if (dump_enabled_p ()) > dump_printf_loc (MSG_NOTE, vect_location, "add new stmt: %G", vec_stmt); > > - gimple_set_location (vec_stmt, gimple_location (stmt_info->stmt)); > + if (stmt_info) > + { > + gimple_set_location (vec_stmt, gimple_location (stmt_info->stmt)); > > - /* While EH edges will generally prevent vectorization, stmt might > - e.g. be in a must-not-throw region. Ensure newly created stmts > - that could throw are part of the same region. */ > - int lp_nr = lookup_stmt_eh_lp (stmt_info->stmt); > - if (lp_nr != 0 && stmt_could_throw_p (cfun, vec_stmt)) > - add_stmt_to_eh_lp (vec_stmt, lp_nr); > + /* While EH edges will generally prevent vectorization, stmt might > + e.g. be in a must-not-throw region. Ensure newly created stmts > + that could throw are part of the same region. */ > + int lp_nr = lookup_stmt_eh_lp (stmt_info->stmt); > + if (lp_nr != 0 && stmt_could_throw_p (cfun, vec_stmt)) > + add_stmt_to_eh_lp (vec_stmt, lp_nr); > + } > + else > + gcc_assert (!stmt_could_throw_p (cfun, vec_stmt)); > > return vec_stmt_info; > } > @@ -1705,7 +1710,7 @@ vect_finish_stmt_generation (vec_info *vinfo, > stmt_vec_info stmt_info, gimple *vec_stmt, > gimple_stmt_iterator *gsi) > { > - gcc_assert (gimple_code (stmt_info->stmt) != GIMPLE_LABEL); > + gcc_assert (!stmt_info || gimple_code (stmt_info->stmt) != GIMPLE_LABEL); > > if (!gsi_end_p (*gsi) > && gimple_has_mem_ops (vec_stmt))