OSDN Git Service

* cfgrtl.c (purge_dead_edges): Set BB_DRITY flags if edge has been
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Mar 2002 20:32:15 +0000 (20:32 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Mar 2002 20:32:15 +0000 (20:32 +0000)
removed; fix return value.
* combine.c (combine_instructions): Dirtify blocks where we failed to
update liveness; purge dead edges; use update_life_info_in_dirty_blocks.
* toplev.c (rest_of_compilation): Do not purge_dead_edges after combine.

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

gcc/ChangeLog
gcc/cfgrtl.c
gcc/combine.c
gcc/toplev.c

index 6d290dd..535d095 100644 (file)
@@ -1,3 +1,11 @@
+Fri Mar  8 21:27:49 CET 2002  Jan Hubicka  <jh@suse.cz>
+
+       * cfgrtl.c (purge_dead_edges): Set BB_DRITY flags if edge has been
+       removed; fix return value.
+       * combine.c (combine_instructions): Dirtify blocks where we failed to
+       update liveness; purge dead edges; use update_life_info_in_dirty_blocks.
+       * toplev.c (rest_of_compilation): Do not purge_dead_edges after combine.
+
 2002-03-08  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * gcse.c (insert_insn_end_bb): Fix typo in last change.
index 7e3ebad..6e929eb 100644 (file)
@@ -2108,6 +2108,7 @@ purge_dead_edges (bb)
        if (e->flags & EDGE_EH)
          {
            remove_edge (e);
+           bb->flags |= BB_DIRTY;
            purged = true;
          }
       }
@@ -2121,7 +2122,7 @@ purge_dead_edges (bb)
       if (!any_condjump_p (insn)
          && !returnjump_p (insn)
          && !simplejump_p (insn))
-       return false;
+       return purged;
 
       /* Branch probability/prediction notes are defined only for
         condjumps.  We've possibly turned condjump into simplejump.  */
@@ -2154,12 +2155,13 @@ purge_dead_edges (bb)
                   && returnjump_p (insn))
            continue;
 
+         bb->flags |= BB_DIRTY;
          purged = true;
          remove_edge (e);
        }
 
       if (!bb->succ || !purged)
-       return false;
+       return purged;
 
       if (rtl_dump_file)
        fprintf (rtl_dump_file, "Purged edges from bb %i\n", bb->index);
@@ -2206,7 +2208,11 @@ purge_dead_edges (bb)
     {
       next = e->succ_next;
       if (!(e->flags & EDGE_FALLTHRU))
-       remove_edge (e), purged = true;
+       {
+         bb->flags |= BB_DIRTY;
+         remove_edge (e);
+         purged = true;
+       }
     }
 
   if (!bb->succ || bb->succ->succ_next)
index c9a6703..b734231 100644 (file)
@@ -739,14 +739,16 @@ combine_instructions (f, nregs)
          ;
        }
     }
+  clear_bb_flags ();
 
+  EXECUTE_IF_SET_IN_SBITMAP (refresh_blocks, 0, this_basic_block,
+                            BASIC_BLOCK (this_basic_block)->flags |= BB_DIRTY);
+  new_direct_jump_p |= purge_all_dead_edges (0);
   delete_noop_moves (f);
 
-  if (need_refresh)
-    {
-      update_life_info (refresh_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES,
-                       PROP_DEATH_NOTES);
-    }
+  update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
+                                   PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE
+                                   | PROP_KILL_DEAD_CODE);
 
   /* Clean up.  */
   sbitmap_free (refresh_blocks);
index bd25b41..740bf89 100644 (file)
@@ -3058,10 +3058,6 @@ rest_of_compilation (decl)
       rebuild_jump_labels_after_combine
        = combine_instructions (insns, max_reg_num ());
 
-      /* Always purge dead edges, as we may eliminate an insn throwing
-         exception.  */
-      rebuild_jump_labels_after_combine |= purge_all_dead_edges (true);
-
       /* Combining insns may have turned an indirect jump into a
         direct jump.  Rebuid the JUMP_LABEL fields of jumping
         instructions.  */