re PR rtl-optimization/10679 ([3.3/3.4] --param min-inline-insns not honoured)

PR optimization/10679
	* tree-inline.c (inlinable_function_p): Honor MIN_INLINE_INSNS.

	PR optimization/10679
	* g++.dg/opt/inline4.C: New test.

From-SVN: r69710
This commit is contained in:
Mark Mitchell 2003-07-23 16:45:15 +00:00 committed by Mark Mitchell
parent 1f9d625626
commit 11b8e71cec
4 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2003-07-23 Mark Mitchell <mark@codesourcery.com>
PR optimization/10679
* tree-inline.c (inlinable_function_p): Honor MIN_INLINE_INSNS.
2003-07-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/11607 and PR target/11516

View File

@ -1,3 +1,8 @@
2003-07-23 Mark Mitchell <mark@codesourcery.com>
PR optimization/10679
* g++.dg/opt/inline4.C: New test.
2003-07-23 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/parse/crash10: New test.

View File

@ -0,0 +1,13 @@
// { dg-options "-O2 -ftemplate-depth-20000 --param min-inline-insns=100 --param max-inline-insns=3" }
template <int I>
inline void g() { g<I-1>(); return; }
template <>
inline void g<0>() { int i; return; }
void h() {
g<250>();
}
// { dg-final { scan-assembler-not "_Z1g" } }

View File

@ -1005,7 +1005,8 @@ inlinable_function_p (tree fn, inline_data *id, int nolimit)
/* In case we don't disregard the inlining limits and we basically
can inline this function, investigate further. */
if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn)
&& inlinable && !nolimit)
&& inlinable && !nolimit
&& currfn_insns > MIN_INLINE_INSNS)
{
int sum_insns = (id ? id->inlined_insns : 0) + currfn_insns;
/* In the extreme case that we have exceeded the recursive inlining
@ -1017,8 +1018,7 @@ inlinable_function_p (tree fn, inline_data *id, int nolimit)
with slope -1/MAX_INLINE_SLOPE to exceedingly decrease the
allowable size. We always allow a size of MIN_INLINE_INSNS
though. */
else if ((sum_insns > MAX_INLINE_INSNS)
&& (currfn_insns > MIN_INLINE_INSNS))
else if (sum_insns > MAX_INLINE_INSNS)
{
int max_curr = MAX_INLINE_INSNS_SINGLE
- (sum_insns - MAX_INLINE_INSNS) / MAX_INLINE_SLOPE;