aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@redhat.com>2005-02-06 14:07:27 +0000
committerDiego Novillo <dnovillo@redhat.com>2005-02-06 14:07:27 +0000
commit5bc9e180aa9eacf5fa49071308ad19e8e1864de0 (patch)
treea883510d7fa92b0083832373c8ac947ff2f42109
parent591d2b38dbb4933258c79e6d16bba9b94005f37c (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.tcb5
-rw-r--r--gcc/basic-block.h2
-rw-r--r--gcc/dominance.c21
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)