On May 27, 2020 5:40:30 PM GMT+02:00, Richard Sandiford 
<richard.sandif...@arm.com> wrote:
>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.

It should always, but there's this weird EH thing there for which I need to 
find a testcase. 

>Or is this because you want to remove the stmt_info argument entirely
>at some point, and this is a step towards that?

Yes. I don't have a stmt for each SLP node anymore... 

Richard. 

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

Reply via email to