On Thu, 3 Sep 2020, Jakub Jelinek wrote:

> On Thu, Sep 03, 2020 at 12:07:36PM +0200, Richard Biener wrote:
> > LGTM.
> 
> Thanks.
> 
> > Can we now remove stream_input_location_now?
> 
> There are a few remaining users, one is:
>       case LTO_ert_must_not_throw:
>         {
>           r->type = ERT_MUST_NOT_THROW;
>           r->u.must_not_throw.failure_decl = stream_read_tree (ib, data_in);
>           bitpack_d bp = streamer_read_bitpack (ib);
>           r->u.must_not_throw.failure_loc
>            = stream_input_location_now (&bp, data_in);
>         }
> and the other two:
>   /* Input the function start and end loci.  */
>   fn->function_start_locus = stream_input_location_now (&bp, data_in);
>   fn->function_end_locus = stream_input_location_now (&bp, data_in);
> I know nothing about those, so have kept them as is.

I think it's safe to share locations with the rest of the IL and the EH
tree so just replacing them should be fine.

>  I don't know if
> failure_loc can or can't include blocks, what is the reason why it uses
> *_now (can r be reallocated?) and similarly about the function start/end.
> Will defer these to Honza or anybody else who knows LTO better.
> 
> Ok, looking some more, seems r isn't really reallocated and failure_loc
> shouldn't really include blocks, judging from
>     case ERT_MUST_NOT_THROW:
>       new_r->u.must_not_throw.failure_loc =
>         LOCATION_LOCUS (old_r->u.must_not_throw.failure_loc);
> and
>       this_region->u.must_not_throw.failure_loc
>         = LOCATION_LOCUS (gimple_location (tp));
> as the only setters of failure_loc outside of lto-streamer-in.c.
> Dunno if it would be sufficient to just use normal stream_input_location
> and let the apply cache after all EH regions and later all bbs are input
> apply it.

I think so.

> > > all these != checks to non-zero?  Either by oring something into those
> > > tests, or perhaps:
> > >   if (ob->current_reset)
> > >     {
> > >       if (xloc.file == NULL)
> > >   ob->current_file = "";
> > >       if (xloc.line == 0)
> > >   ob->current_line = 1;
> > >       if (xloc.column == 0)
> > >   ob->current_column = 1;
> > >       ob->current_reset = false;
> > >     }
> > > before doing those bp_pack_value calls with a comment, effectively forcing
> > > all 6 != comparisons to be true?
> > 
> > Yeah, guess that would be cleanest.  How does UNKNOWN_LOCATION
> > expand btw?  Using that as "reset" value also might work?
> 
> On the lto-streamer-out.c, for UNKNOWN_LOCATION/BUILTINS_LOCATION we just
> do:
>   bp_pack_int_in_range (bp, 0, RESERVED_LOCATION_COUNT,
>                         loc < RESERVED_LOCATION_COUNT
>                         ? loc : RESERVED_LOCATION_COUNT);
> and that is it (well, for locs with blocks I do more now, but
> ob->current_{file,line,column,sysp} aren't touched).
> 
> I'll test a patch.

Thanks,
Richard.

Reply via email to