> On Mon, 2020-01-06 at 01:03 -0600, Xiong Hu Luo wrote:
> > Inline should return failure either (newsize > param_large_function_insns)
> > OR (newsize > limit). Sometimes newsize is larger than
> > param_large_function_insns, but smaller than limit, inline doesn't return
> > failure even if the new function is a large function.
> > Therefore, param_large_function_insns and param_large_function_growth
> > should be
> > OR instead of AND, otherwise --param large-function-growth won't
> > work correctly with --param large-function-insns.
> >
> > gcc/ChangeLog:
> >
> > 2020-01-06 Luo Xiong Hu <[email protected]>
> >
> > ipa-inline-analysis.c (estimate_growth): Fix typo.
> > ipa-inline.c (caller_growth_limits): Use OR instead of AND.
> OK
This patch also seems wrong. Inliner should return failure when
newsize > param_large_function_insns && newsize > limit
The reason is same as with large_unit_insns. We used to have only
growth limits but it has turned out that this gets too
restrictive/random for very small units/growths.
So the logic is meant to be that inlining is OK either
- if function is reasonably small (large_function_insns limit is not
met)
- or it does not grow too much (large-function-growth isnot met)
@item large-function-insns
The limit specifying really large functions. For functions larger than
this limit after inlining, inlining is constrained by @option{--param
large-function-growth}. This parameter is useful primarily to avoid
extreme compilation time caused by non-linear algorithms used by the
back end.
Honza
> jeff
>