diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2004-10-16 18:58:59 +0200 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2004-10-16 16:58:59 +0000 |
commit | fce22de5d29dc5fb01375560db3d4d1bfc11f889 (patch) | |
tree | 0af8e2a4f49682307883dde1cf867f72847cd300 /gcc/dominance.c | |
parent | 80cad5faeb98e96f52597f2e8817c742a1ddacd0 (diff) | |
download | gcc-fce22de5d29dc5fb01375560db3d4d1bfc11f889.zip gcc-fce22de5d29dc5fb01375560db3d4d1bfc11f889.tar.gz gcc-fce22de5d29dc5fb01375560db3d4d1bfc11f889.tar.bz2 |
re PR tree-optimization/17766 (cc1 hangs in with -O3, works with -O2)
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
Diffstat (limited to 'gcc/dominance.c')
-rw-r--r-- | gcc/dominance.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/gcc/dominance.c b/gcc/dominance.c index 680c456..47cb405 100644 --- a/gcc/dominance.c +++ b/gcc/dominance.c @@ -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) { |