Commit 422d0fb0 by Richard Henderson Committed by Jeff Law

flow.c (compute_immediate_dominators): New function.

        * flow.c (compute_immediate_dominators): New function.
        * basic-block.h (compute_immediate_dominators): Declare it.

From-SVN: r25831
parent e4175312
...@@ -23,6 +23,9 @@ Wed Mar 17 18:20:24 1999 David S. Miller <davem@redhat.com> ...@@ -23,6 +23,9 @@ Wed Mar 17 18:20:24 1999 David S. Miller <davem@redhat.com>
Wed Mar 17 14:51:19 1999 Richard Henderson <rth@cygnus.com> Wed Mar 17 14:51:19 1999 Richard Henderson <rth@cygnus.com>
* flow.c (compute_immediate_dominators): New function.
* basic-block.h (compute_immediate_dominators): Declare it.
* alpha.h (HARD_REGNO_MODE_OK): Allow only 4 and 8 byte unit modes * alpha.h (HARD_REGNO_MODE_OK): Allow only 4 and 8 byte unit modes
in FP regs. in FP regs.
(MODES_TIEABLE_P): Define asymmetricly wrt modes illegal in FP regs. (MODES_TIEABLE_P): Define asymmetricly wrt modes illegal in FP regs.
......
...@@ -249,3 +249,4 @@ extern void compute_preds_succs PROTO ((int_list_ptr *, int_list_ptr *, ...@@ -249,3 +249,4 @@ extern void compute_preds_succs PROTO ((int_list_ptr *, int_list_ptr *,
extern void compute_dominators PROTO ((sbitmap *, sbitmap *, extern void compute_dominators PROTO ((sbitmap *, sbitmap *,
int_list_ptr *, int_list_ptr *,
int_list_ptr *)); int_list_ptr *));
extern void compute_immediate_dominators PROTO ((int *, sbitmap *));
...@@ -4560,6 +4560,46 @@ compute_dominators (dominators, post_dominators, s_preds, s_succs) ...@@ -4560,6 +4560,46 @@ compute_dominators (dominators, post_dominators, s_preds, s_succs)
free (temp_bitmap); free (temp_bitmap);
} }
/* Given DOMINATORS, compute the immediate dominators into IDOM. */
void
compute_immediate_dominators (idom, dominators)
int *idom;
sbitmap *dominators;
{
sbitmap *tmp;
int b;
tmp = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
/* Begin with tmp(n) = dom(n) - { n }. */
for (b = n_basic_blocks; --b >= 0; )
{
sbitmap_copy (tmp[b], dominators[b]);
RESET_BIT (tmp[b], b);
}
/* Subtract out all of our dominator's dominators. */
for (b = n_basic_blocks; --b >= 0; )
{
sbitmap tmp_b = tmp[b];
int s;
for (s = n_basic_blocks; --s >= 0; )
if (TEST_BIT (tmp_b, s))
sbitmap_difference (tmp_b, tmp_b, tmp[s]);
}
/* Find the one bit set in the bitmap and put it in the output array. */
for (b = n_basic_blocks; --b >= 0; )
{
int t;
EXECUTE_IF_SET_IN_SBITMAP (tmp[b], 0, t, { idom[b] = t; });
}
sbitmap_vector_free (tmp);
}
/* Count for a single SET rtx, X. */ /* Count for a single SET rtx, X. */
static void static void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment