]> gcc.gnu.org Git - gcc.git/commitdiff
re PR tree-optimization/17766 (cc1 hangs in with -O3, works with -O2)
authorZdenek Dvorak <dvorakz@suse.cz>
Sat, 16 Oct 2004 16:58:59 +0000 (18:58 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Sat, 16 Oct 2004 16:58:59 +0000 (16:58 +0000)
PR tree-optimization/17766
* basic-block.h (enum dom_state): DOM_CONS_OK removed.
(dom_info_available_p): Declare.
* cfghooks.c (split_block, make_forwarder_block): Use
dom_info_available_p.
* dominance.c (compute_dom_fast_query, calculate_dominance_info,
free_dominance_info, verify_dominators): Ditto.
(dom_info_available_p): New function.
* tree-cfg.c (cleanup_control_expr_graph): Free dominance information.
(thread_jumps): Use dom_info_available_p.
* tree-complex.c (expand_complex_div_wide): Ditto.
* tree-mudflap.c (mf_build_check_statement_for): Ditto.

From-SVN: r89147

gcc/ChangeLog
gcc/basic-block.h
gcc/cfghooks.c
gcc/dominance.c
gcc/tree-cfg.c
gcc/tree-complex.c
gcc/tree-mudflap.c

index 2ddfb50cad36207140d0fa32589878c61cf4b380..ae3a92a3788e3bfe534bf480abd01cb5c0758f45 100644 (file)
@@ -1,3 +1,18 @@
+2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimization/17766
+       * basic-block.h (enum dom_state): DOM_CONS_OK removed.
+       (dom_info_available_p): Declare.
+       * cfghooks.c (split_block, make_forwarder_block): Use
+       dom_info_available_p.
+       * dominance.c (compute_dom_fast_query, calculate_dominance_info,
+       free_dominance_info, verify_dominators): Ditto.
+       (dom_info_available_p): New function.
+       * tree-cfg.c (cleanup_control_expr_graph): Free dominance information.
+       (thread_jumps): Use dom_info_available_p.
+       * tree-complex.c (expand_complex_div_wide): Ditto.
+       * tree-mudflap.c (mf_build_check_statement_for): Ditto.
+
 2004-10-16  Zdenek Dvorak  <dvorakz@suse.cz>
 
        * tree-ssa-loop-ivopts.c (struct ivopts_data): New field important_candidates.
index ed03ac95cbbae081a8180d1dfd5f80ad6ba8f0d3..534fd10364e75f0b9909125baad8bec69206a19a 100644 (file)
@@ -848,14 +848,13 @@ enum cdi_direction
 enum dom_state
 {
   DOM_NONE,            /* Not computed at all.  */
-  DOM_CONS_OK,         /* The data is conservatively OK, i.e. if it says you that A dominates B,
-                          it indeed does.  */
   DOM_NO_FAST_QUERY,   /* The data is OK, but the fast query data are not usable.  */
   DOM_OK               /* Everything is ok.  */
 };
 
 extern enum dom_state dom_computed[2];
 
+extern bool dom_info_available_p (enum cdi_direction);
 extern void calculate_dominance_info (enum cdi_direction);
 extern void free_dominance_info (enum cdi_direction);
 extern basic_block nearest_common_dominator (enum cdi_direction,
index 948c2b4c13dc6e2942ec261ff8f71520562f3bff..46e0f8c67eab138547cb5f72f1628a00c768c7dc 100644 (file)
@@ -318,7 +318,7 @@ split_block (basic_block bb, void *i)
   new_bb->frequency = bb->frequency;
   new_bb->loop_depth = bb->loop_depth;
 
-  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
+  if (dom_info_available_p (CDI_DOMINATORS))
     {
       redirect_immediate_dominators (CDI_DOMINATORS, bb, new_bb);
       set_immediate_dominator (CDI_DOMINATORS, new_bb, bb);
@@ -592,7 +592,7 @@ make_forwarder_block (basic_block bb, bool (*redirect_edge_p) (edge),
        new_bb_cbk (jump);
     }
 
-  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
+  if (dom_info_available_p (CDI_DOMINATORS))
     {
       basic_block doms_to_fix[2];
 
index 680c4561c9d8c73d7d91de81abc34aa770468330..47cb4057e65a48148b1c22be025e580a6078cb62 100644 (file)
@@ -592,7 +592,7 @@ compute_dom_fast_query (enum cdi_direction dir)
   int num = 0;
   basic_block bb;
 
-  gcc_assert (dom_computed[dir] >= DOM_NO_FAST_QUERY);
+  gcc_assert (dom_info_available_p (dir));
 
   if (dom_computed[dir] == DOM_OK)
     return;
@@ -618,11 +618,8 @@ calculate_dominance_info (enum cdi_direction dir)
   if (dom_computed[dir] == DOM_OK)
     return;
 
-  if (dom_computed[dir] != DOM_NO_FAST_QUERY)
+  if (!dom_info_available_p (dir))
     {
-      if (dom_computed[dir] != DOM_NONE)
-       free_dominance_info (dir);
-
       gcc_assert (!n_bbs_in_dom_tree[dir]);
 
       FOR_ALL_BB (b)
@@ -656,7 +653,7 @@ free_dominance_info (enum cdi_direction dir)
 {
   basic_block bb;
 
-  if (!dom_computed[dir])
+  if (!dom_info_available_p (dir))
     return;
 
   FOR_ALL_BB (bb)
@@ -821,7 +818,7 @@ verify_dominators (enum cdi_direction dir)
   int err = 0;
   basic_block bb;
 
-  gcc_assert (dom_computed[dir]);
+  gcc_assert (dom_info_available_p (dir));
 
   FOR_EACH_BB (bb)
     {
@@ -841,8 +838,7 @@ verify_dominators (enum cdi_direction dir)
        }
     }
 
-  if (dir == CDI_DOMINATORS
-      && dom_computed[dir] >= DOM_NO_FAST_QUERY)
+  if (dir == CDI_DOMINATORS)
     {
       FOR_EACH_BB (bb)
        {
@@ -977,6 +973,14 @@ next_dom_son (enum cdi_direction dir, basic_block bb)
   return next->father->son == next ? NULL : next->data;
 }
 
+/* Returns true if dominance information for direction DIR is available.  */
+
+bool
+dom_info_available_p (enum cdi_direction dir)
+{
+  return dom_computed[dir] != DOM_NONE;
+}
+
 void
 debug_dominance_info (enum cdi_direction dir)
 {
index 293b24e1957c7bbb3ff9c7bfb32434a2d006eb70..7874000a1d5fb1ee50ce4d2cc1282076179f48cb 100644 (file)
@@ -1927,8 +1927,7 @@ cleanup_control_expr_graph (basic_block bb, block_stmt_iterator bsi)
   taken_edge->flags = EDGE_FALLTHRU;
 
   /* We removed some paths from the cfg.  */
-  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
-    dom_computed[CDI_DOMINATORS] = DOM_CONS_OK;
+  free_dominance_info (CDI_DOMINATORS);
 
   return retval;
 }
@@ -3908,7 +3907,7 @@ thread_jumps (void)
            }
 
          /* Update the dominators.  */
-         if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
+         if (dom_info_available_p (CDI_DOMINATORS))
            {
              /* If the dominator of the destination was in the path, set its
                 dominator to the start of the redirected edge.  */
index 5a4fdf5a66896c0fd9f8b8a8146b569b02abd6f0..1b49601d0946e72d437bee2ade8bf06f1de85384 100644 (file)
@@ -216,7 +216,7 @@ expand_complex_div_wide (block_stmt_iterator *bsi, tree inner_type,
 
       /* Update dominance info.  Note that bb_join's data was
          updated by split_block.  */
-      if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
+      if (dom_info_available_p (CDI_DOMINATORS))
         {
           set_immediate_dominator (CDI_DOMINATORS, bb_true, bb_cond);
           set_immediate_dominator (CDI_DOMINATORS, bb_false, bb_cond);
index f4d3d47bdd4aff46997c631cb5291b114aec3ba6..a65d393649b506c42749292c0ca6d65cf46d4982 100644 (file)
@@ -551,7 +551,7 @@ mf_build_check_statement_for (tree base, tree addr, tree limit,
 
   /* Update dominance info.  Note that bb_join's data was
      updated by split_block.  */
-  if (dom_computed[CDI_DOMINATORS] >= DOM_CONS_OK)
+  if (dom_info_available_p (CDI_DOMINATORS))
     {
       set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
       set_immediate_dominator (CDI_DOMINATORS, join_bb, cond_bb);
This page took 0.094455 seconds and 5 git commands to generate.