cfgcleanup.c (try_optimize_cfg): Avoid removing ENTRY_BLOCK_PTR.
authorZdenek Dvorak <rakdver@gcc.gnu.org>
Sun, 4 Feb 2007 23:51:28 +0000 (23:51 +0000)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Sun, 4 Feb 2007 23:51:28 +0000 (23:51 +0000)
* cfgcleanup.c (try_optimize_cfg): Avoid removing ENTRY_BLOCK_PTR.

From-SVN: r121584

gcc/ChangeLog
gcc/cfgcleanup.c

index acb109e29ede526bf93a53a3b05d3f3345d5a2b0..f458ac7b176f6487c43c29357efafe7c3fafbbf4 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-04  Zdenek Dvorak <dvorakz@suse.cz>
+
+       * cfgcleanup.c (try_optimize_cfg): Avoid removing ENTRY_BLOCK_PTR.
+
 2007-02-04  Zdenek Dvorak <dvorakz@suse.cz>
 
        * cfgloopmanip.c (loop_delete_branch_edge): Removed.
@@ -43,7 +47,7 @@
        * passes.c (init_optimization_passes): Reindent.
 
 2007-02-04  Jan Hubicka  <jh@suse.cz>
-            Eric Botcazou  <ebotcazou@adacore.com>
+           Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree-optimize.c (has_abnormal_outgoing_edge_p): Move to...
        (execute_fixup_cfg): Break out the abnormal goto code.
index 7c5b745a65067aa795050be7f7706fd5acd4260f..ee5c69bd2e6a3ec601e2b354cbb2d000e38086b5 100644 (file)
@@ -1992,7 +1992,7 @@ try_optimize_cfg (int mode)
              bool changed_here = false;
 
              /* Delete trivially dead basic blocks.  */
-             while (EDGE_COUNT (b->preds) == 0)
+             if (EDGE_COUNT (b->preds) == 0)
                {
                  c = b->prev_bb;
                  if (dump_file)
@@ -2002,7 +2002,9 @@ try_optimize_cfg (int mode)
                  delete_basic_block (b);
                  if (!(mode & CLEANUP_CFGLAYOUT))
                    changed = true;
-                 b = c;
+                 /* Avoid trying to remove ENTRY_BLOCK_PTR.  */
+                 b = (c == ENTRY_BLOCK_PTR ? c->next_bb : c);
+                 continue;
                }
 
              /* Remove code labels no longer used.  */