aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/inline4.C13
-rw-r--r--gcc/tree-inline.c6
4 files changed, 26 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5c393a8..f1d1356 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1667dea..a87abef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/g++.dg/opt/inline4.C b/gcc/testsuite/g++.dg/opt/inline4.C
new file mode 100644
index 0000000..2d3eb37
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/inline4.C
@@ -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" } }
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 3cfe702..4a468a6 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -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;