OSDN Git Service

2010-03-15 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Mar 2010 13:18:45 +0000 (13:18 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Mar 2010 13:18:45 +0000 (13:18 +0000)
PR tree-optimization/43367
* tree-cfg.c (gimple_can_merge_blocks_p): Simplify PHI
elimination check.

* gcc.c-torture/compile/pr43367.c: New testcase.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr43367.c [new file with mode: 0644]
gcc/tree-cfg.c

index bd07364..434288e 100644 (file)
@@ -1,5 +1,11 @@
 2010-03-15  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/43367
+       * tree-cfg.c (gimple_can_merge_blocks_p): Simplify PHI
+       elimination check.
+
+2010-03-15  Richard Guenther  <rguenther@suse.de>
+
        PR tree-optimization/43317
        * ipa-struct-reorg.c (create_new_general_access): Update stmt.
 
index 65c465f..bd2f07b 100644 (file)
@@ -1,5 +1,10 @@
 2010-03-15  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/43367
+       * gcc.c-torture/compile/pr43367.c: New testcase.
+
+2010-03-15  Richard Guenther  <rguenther@suse.de>
+
        PR tree-optimization/43317
        * gcc.dg/pr43317.c: New testcase.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr43367.c b/gcc/testsuite/gcc.c-torture/compile/pr43367.c
new file mode 100644 (file)
index 0000000..5c620c1
--- /dev/null
@@ -0,0 +1,30 @@
+unsigned char g_17;
+
+const unsigned char func_39 (unsigned char p_40, unsigned char * p_41)
+{
+  return 0;
+}
+
+void int327 (const unsigned char p_48, unsigned char p_49)
+{
+  unsigned l_52;
+  unsigned char l_58[2];
+  int i, j;
+  if (func_39 (l_52, &p_49), p_48) {
+      unsigned char *l_60;
+      unsigned char *l = &l_58[1];
+      for (j; j; j++) {
+lbl_59:
+         break;
+      }
+      for (l = 0; 1; l += 1) {
+         for (p_49 = 1; p_49; p_49 += 0) {
+             unsigned char **l_61[1][6];
+             for (j = 0; j < 1; j++)
+               l_61[i][j] = &l_60;
+             goto lbl_59;
+         }
+      }
+  }
+}
+
index e5ed9ec..6f4e416 100644 (file)
@@ -1438,27 +1438,12 @@ gimple_can_merge_blocks_p (basic_block a, basic_block b)
     return false;
 
   /* It must be possible to eliminate all phi nodes in B.  If ssa form
-     is not up-to-date, we cannot eliminate any phis; however, if only
-     some symbols as whole are marked for renaming, this is not a problem,
-     as phi nodes for those symbols are irrelevant in updating anyway.  */
+     is not up-to-date and a name-mapping is registered, we cannot eliminate
+     any phis.  Symbols marked for renaming are never a problem though.  */
   phis = phi_nodes (b);
-  if (!gimple_seq_empty_p (phis))
-    {
-      gimple_stmt_iterator i;
-
-      if (name_mappings_registered_p ())
-       return false;
-
-      for (i = gsi_start (phis); !gsi_end_p (i); gsi_next (&i))
-       {
-         gimple phi = gsi_stmt (i);
-
-         if (!is_gimple_reg (gimple_phi_result (phi))
-             && !may_propagate_copy (gimple_phi_result (phi),
-                                     gimple_phi_arg_def (phi, 0)))
-           return false;
-       }
-    }
+  if (!gimple_seq_empty_p (phis)
+      && name_mappings_registered_p ())
+    return false;
 
   return true;
 }