> On Wed, 1 Apr 2020, Jakub Jelinek wrote:
> 
> > On Wed, Apr 01, 2020 at 03:36:30PM +0200, Richard Biener wrote:
> > > @@ -512,7 +512,10 @@ can_inline_edge_by_limits_p (struct cgraph_edge *e, 
> > > bool report,
> > >         /* When devirtualization is disabled for callee, it is not safe
> > >            to inline it as we possibly mangled the type info.
> > >            Allow early inlining of always inlines.  */
> > > -       || (!early && check_maybe_down (flag_devirtualize)))
> > > +       || (!early && check_maybe_down (flag_devirtualize))
> > > +       /* It's not safe to inline a function where loops maybe
> > > +          infinite into a function where we assume the reverse.  */
> > > +       || check_maybe_down (flag_finite_loops))
> > >   {
> > >     e->inline_failed = CIF_OPTIMIZATION_MISMATCH;
> > >     inlinable = false;
> > 
> > Couldn't the above care only if the function has any loops?
> > Otherwise, won't it prevent cross-language LTO inlining too much?
> > Or instead of disabling inlining arrange for a safe flag_finite_loops value
> > for the resulting function (set some flag in cfun of the function that would
> > be considered together with flag_finite_loops (so that we don't have to
> > create further OPTIMIZATION_NODEs) and disable finite loops opts if we've
> > inlined !flag_finite_loops function into flag_finite_loops one)?
> 
> I guess I can split out this hunk from the patch - it's a separate
> issue affecting also C++ with mixed option CUs.  Yes, ideally we'd
> simply initialize loop->finite_p from flag_finite_loops at CFG
> construction time and then only ever check the flag on the loop
> structure.  That would leave us with infinite loops for loops
> we only discover later though.  It also opens up the possibility
> of a per-loop #pragma.

We do want to preserve cross-module inlining between C and C++, so we
really should go with marking the loops pre-inline about finiteness and
try to preserve the info, otherwise we are going to lose quite some
optimizations.

Honza
> 
> Richard.

Reply via email to