2007-08-20 Andrew Pinski <andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Aug 2007 07:42:55 +0000 (07:42 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Aug 2007 07:42:55 +0000 (07:42 +0000)
        PR middle-end/30564
        * tree-inline.c (optimize_inline_calls): Move the cgraph checking
        code in front of the compacting of basic blocks.
        Move the folding of statements inbetween the cgraph checking
        and compacting of basic blocks.

2007-08-20  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR middle-end/30564
        * gcc.c-torture/compile/pr30564-1.c: New test.
        * gcc.c-torture/compile/pr30564-2.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127638 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr30564-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr30564-2.c [new file with mode: 0644]
gcc/tree-inline.c

index 5442180..6f486f8 100644 (file)
@@ -1,3 +1,11 @@
+2007-08-20  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/30564
+       * tree-inline.c (optimize_inline_calls): Move the cgraph checking
+       code in front of the compacting of basic blocks.
+       Move the folding of statements inbetween the cgraph checking
+       and compacting of basic blocks.
+
 2007-08-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
            Serge Belyshev  <belyshev@depni.sinp.msu.ru>
 
index 34a5659..22e5df7 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-20  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/30564
+       * gcc.c-torture/compile/pr30564-1.c: New test.
+       * gcc.c-torture/compile/pr30564-2.c: New test.
+
 2007-08-19  Joseph Myers  <joseph@codesourcery.com>
 
        * gcc.dg/debug/dwarf2/aranges-fnsec-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr30564-1.c b/gcc/testsuite/gcc.c-torture/compile/pr30564-1.c
new file mode 100644 (file)
index 0000000..6c373f7
--- /dev/null
@@ -0,0 +1,15 @@
+static int spready[] = {0, 1, 2, 3};
+void explosion_map (int y)
+{
+  int i;
+  for (i = 0; i < 4; i++)
+    if (y * spready[i] < 0)
+      break;
+}
+void explosion (void)
+{
+  int i;
+  explosion_map (0);
+  for (i = 0; i < 2; i++)
+    continue;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr30564-2.c b/gcc/testsuite/gcc.c-torture/compile/pr30564-2.c
new file mode 100644 (file)
index 0000000..403f396
--- /dev/null
@@ -0,0 +1,12 @@
+
+static int RawOrEnc = 0;
+static inline void addpair(int fp, int un)
+{
+  if (RawOrEnc == 0 && fp != un)
+    RawOrEnc = 1;
+}
+int f(int un0, char *a, unsigned int __s2_len)
+{
+  addpair(un0, un0);
+  __s2_len < 4 ? __builtin_strcmp (a, "-") : 0;
+}
index 3609480..c078166 100644 (file)
@@ -2823,10 +2823,6 @@ optimize_inline_calls (tree fn)
     gimple_expand_calls_inline (bb, &id);
 
   pop_gimplify_context (NULL);
-  /* Renumber the (code) basic_blocks consecutively.  */
-  compact_blocks ();
-  /* Renumber the lexical scoping (non-code) blocks consecutively.  */
-  number_blocks (fn);
 
 #ifdef ENABLE_CHECKING
     {
@@ -2839,13 +2835,20 @@ optimize_inline_calls (tree fn)
        gcc_assert (e->inline_failed);
     }
 #endif
+  
+  /* Fold the statements before compacting/renumbering the basic blocks.  */
+  fold_marked_statements (last, id.statements_to_fold);
+  pointer_set_destroy (id.statements_to_fold);
+  
+  /* Renumber the (code) basic_blocks consecutively.  */
+  compact_blocks ();
+  /* Renumber the lexical scoping (non-code) blocks consecutively.  */
+  number_blocks (fn);
 
   /* We are not going to maintain the cgraph edges up to date.
      Kill it so it won't confuse us.  */
   cgraph_node_remove_callees (id.dst_node);
 
-  fold_marked_statements (last, id.statements_to_fold);
-  pointer_set_destroy (id.statements_to_fold);
   fold_cond_expr_cond ();
   if (current_function_has_nonlocal_label)
     make_nonlocal_label_edges ();