re PR middle-end/47664 (early inliner now needs iteration for multiple calls)
authorRichard Guenther <rguenther@suse.de>
Wed, 9 Feb 2011 20:04:56 +0000 (20:04 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 9 Feb 2011 20:04:56 +0000 (20:04 +0000)
2011-02-09  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/47664
* ipa-inline.c (cgraph_decide_inlining_incrementally): Visit
all edges again.

* gcc.dg/tree-ssa/inline-7.c: New testcase.

From-SVN: r169983

gcc/ChangeLog
gcc/ipa-inline.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/inline-7.c [new file with mode: 0644]

index 3c8de805c01b703ce4a41d9bf7ce3526bee8a1e1..0b46ae8dc8bfc4dcaa4a282ce761718b06cc3ba6 100644 (file)
@@ -1,3 +1,9 @@
+2011-02-09  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/47664
+       * ipa-inline.c (cgraph_decide_inlining_incrementally): Visit
+       all edges again.
+
 2011-02-09  David Edelsohn  <dje.gcc@gmail.com>
 
        * config/rs6000/aix61.h (PROCESSOR_DEFAULT): Change to
index 8087c81896e3670746c3ca2ca667860f3b8e544e..1d5b001233a0b92fa3249cc6dc8ff46c096e1d5a 100644 (file)
@@ -1643,7 +1643,6 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node,
         during incremental inlining.  */
       && !node->local.disregard_inline_limits)
     {
-      bitmap visited = BITMAP_ALLOC (NULL);
       for (e = node->callees; e; e = e->next_callee)
        {
          int allowed_growth = 0;
@@ -1651,10 +1650,6 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node,
              || !e->inline_failed
              || e->callee->local.disregard_inline_limits)
            continue;
-         /* We are inlining a function to all call-sites in node
-            or to none.  So visit each candidate only once.  */
-         if (!bitmap_set_bit (visited, e->callee->uid))
-           continue;
          if (dump_file)
            fprintf (dump_file, "Considering inline candidate %s.\n",
                     cgraph_node_name (e->callee));
@@ -1727,7 +1722,6 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node,
              inlined = true;
            }
        }
-      BITMAP_FREE (visited);
     }
   return inlined;
 }
index b5e1cb943eeeaa588972ad128169f90270d130b0..8f26a770c1ee92d862370df1e36f245acf56d879 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-09  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/47664
+       * gcc.dg/tree-ssa/inline-7.c: New testcase.
+
 2011-02-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR middle-end/47646
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/inline-7.c b/gcc/testsuite/gcc.dg/tree-ssa/inline-7.c
new file mode 100644 (file)
index 0000000..16c3c86
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-einline" } */
+
+void foo0();
+inline void bar0() { foo0(); }
+void foobar() { bar0(); bar0(); bar0(); }
+
+/* { dg-final { scan-tree-dump "Iterations: 1" "einline" } } */
+/* { dg-final { cleanup-tree-dump "einline" } } */