diff options
author | Diego Novillo <dnovillo@redhat.com> | 2005-02-06 14:07:27 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@redhat.com> | 2005-02-06 14:07:27 +0000 |
commit | 5bc9e180aa9eacf5fa49071308ad19e8e1864de0 (patch) | |
tree | a883510d7fa92b0083832373c8ac947ff2f42109 | |
parent | 591d2b38dbb4933258c79e6d16bba9b94005f37c (diff) |
* basic-block.h (nearest_common_dominator): Declare.
* dominance.c (nearest_common_dominator): New.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-cleanup-branch@94674 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.tcb | 5 | ||||
-rw-r--r-- | gcc/basic-block.h | 2 | ||||
-rw-r--r-- | gcc/dominance.c | 21 |
3 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog.tcb b/gcc/ChangeLog.tcb index eb150878564..e2f40981e1c 100644 --- a/gcc/ChangeLog.tcb +++ b/gcc/ChangeLog.tcb @@ -1,5 +1,10 @@ 2005-02-02 Diego Novillo <dnovillo@redhat.com> + * basic-block.h (nearest_common_dominator): Declare. + * dominance.c (nearest_common_dominator): New. + +2005-02-02 Diego Novillo <dnovillo@redhat.com> + * tree.h (ASSERT_EXPR_VAR): Define. (ASSERT_EXPR_COND): Define. * tree-cfg.c (verify_expr): Use diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 47cd99d22c4..44b0f213524 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -842,6 +842,8 @@ 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, basic_block, basic_block); +extern basic_block nearest_common_dominator_for_set (enum cdi_direction, + bitmap); extern void set_immediate_dominator (enum cdi_direction, basic_block, basic_block); extern basic_block get_immediate_dominator (enum cdi_direction, basic_block); diff --git a/gcc/dominance.c b/gcc/dominance.c index 7970e242526..4b6bedfab64 100644 --- a/gcc/dominance.c +++ b/gcc/dominance.c @@ -797,6 +797,27 @@ nearest_common_dominator (enum cdi_direction dir, basic_block bb1, basic_block b return et_nca (bb1->dom[dir], bb2->dom[dir])->data; } + +/* Find the nearest common dominator for the basic blocks in BLOCKS, + using dominance direction DIR. */ + +basic_block +nearest_common_dominator_for_set (enum cdi_direction dir, bitmap blocks) +{ + unsigned i, first; + bitmap_iterator bi; + basic_block dom; + + first = bitmap_first_set_bit (blocks); + dom = BASIC_BLOCK (first); + EXECUTE_IF_SET_IN_BITMAP (blocks, 0, i, bi) + if (dom != BASIC_BLOCK (i)) + dom = nearest_common_dominator (dir, dom, BASIC_BLOCK (i)); + + return dom; +} + + /* Return TRUE in case BB1 is dominated by BB2. */ bool dominated_by_p (enum cdi_direction dir, basic_block bb1, basic_block bb2) |