[PATCH][RFC] c/94392 - only enable -ffinite-loops for C++
Richard Biener
rguenther@suse.de
Wed Apr 1 16:59:27 GMT 2020
On Wed, 1 Apr 2020, Jan Hubicka wrote:
> > 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.
OK, I'll update the patch accordingly.
Richard.
More information about the Gcc-patches
mailing list