On Fri, Feb 22, 2019 at 10:57 AM Aldy Hernandez <al...@redhat.com> wrote:
>
> On 1/31/19 9:56 AM, Richard Biener wrote:
> > On Thu, Jan 31, 2019 at 3:45 PM Jakub Jelinek <ja...@redhat.com> wrote:
> >>
> >> On Thu, Jan 31, 2019 at 09:30:13AM -0500, Aldy Hernandez wrote:
> >>>>> (LOOPS_HAVE_PREHEADERS).  This avoids unnecessary changes to the CFG.
> >>>>> But really, I'm just guessing here.  LOOPS_NORMAL would also work,
> >>>>> albeit creating forwarder blocks.
> >>>>>
> >>>>> Tested on x86-64 Linux.
> >>>>>
> >>>>> What do you think?
> >>>>
> >>>> As far as I understand fold_return_value is true/false independent
> >>>> of -W* flags (but dependent on -fprintf-return-value or so).  This means
> >>>> that your patch avoids the risk of CFG changes dependent on
> >>>> -W* flags.  This means you could safely use LOOPS_NORMAL
> >>>
> >>> But isn't my code inside of ::execute, which is still gated by
> >>> fold_return_value AND all the -W* flags:?
> >>>
> >>> bool
> >>> pass_sprintf_length::gate (function *)
> >>> {
> >>>    return ((warn_format_overflow > 0
> >>>           || warn_format_trunc > 0
> >>>           || flag_printf_return_value)
> >>>          && (optimize > 0) == fold_return_value);
> >>> }
> >>>
> >>> Thus, I think we need to move the loop initialization somewhere else ??.
> >>
> >> Then perhaps turn the gate into just return (optimize > 0) == 
> >> fold_return_value;
> >> and in execute do what you're adding and guard the rest with the above
> >> condition?  As -fprintf-return-value is on by default for C-family, it 
> >> shouldn't
> >> change much.
> >> + adjust comment on the gate of course.
> >
> > Don't you alreday have
> >
> > @@ -4200,10 +4202,34 @@ pass_sprintf_length::execute (function *fun)
> >     init_target_to_host_charmap ();
> >
> >     calculate_dominance_info (CDI_DOMINATORS);
> > +  bool optimizing_late = optimize > 0 && fold_return_value;
> > +  if (optimizing_late)
> > +    {
> > +      /* ?? We should avoid changing the CFG as much as possible.
> > ...
> > +      loop_optimizer_init (LOOPS_HAVE_PREHEADERS);
> > +      scev_initialize ();
> > +    }
> >
> > so loops are only initialized if fold_return_value is true?  Ah - but that's
> > the pass parameter from params.def rather than the flag to enable
> > the folding...  So indeed, change it to include && flag_printf_return_value
>
> I believe the flag_printf_return_value change was the final agreed upon
> solution.
>
> Tested on x86-64 Linux.
>
> OK for trunk?

OK.

Richard.

Reply via email to