Commit 1fc3998d by Zdenek Dvorak Committed by Zdenek Dvorak

re PR middle-end/32209 (Boot failure Comparing stages 2 and 3 with --disable-checking)

	PR middle-end/32209
	* dominance.c (debug_dominance_tree, debug_dominance_tree_1): New
	functions.
	(verify_dominators): Do not change dominance tree.

From-SVN: r125563
parent 32a7ab3d
2007-06-08 Zdenek Dvorak <dvorakz@suse.cz>
PR middle-end/32209
* dominance.c (debug_dominance_tree, debug_dominance_tree_1): New
functions.
(verify_dominators): Do not change dominance tree.
2007-06-08 Kaz Kojima <kkojima@gcc.gnu.org> 2007-06-08 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/constraints.md: New file. * config/sh/constraints.md: New file.
......
...@@ -124,6 +124,7 @@ static TBB eval (struct dom_info *, TBB); ...@@ -124,6 +124,7 @@ static TBB eval (struct dom_info *, TBB);
static void link_roots (struct dom_info *, TBB, TBB); static void link_roots (struct dom_info *, TBB, TBB);
static void calc_idoms (struct dom_info *, bool); static void calc_idoms (struct dom_info *, bool);
void debug_dominance_info (enum cdi_direction); void debug_dominance_info (enum cdi_direction);
void debug_dominance_tree (enum cdi_direction, basic_block);
/* Keeps track of the*/ /* Keeps track of the*/
static unsigned n_bbs_in_dom_tree[2]; static unsigned n_bbs_in_dom_tree[2];
...@@ -970,37 +971,35 @@ void ...@@ -970,37 +971,35 @@ void
verify_dominators (enum cdi_direction dir) verify_dominators (enum cdi_direction dir)
{ {
int err = 0; int err = 0;
basic_block *old_dom = XNEWVEC (basic_block, last_basic_block); basic_block bb, imm_bb, imm_bb_correct;
basic_block bb, imm_bb; struct dom_info di;
bool reverse = (dir == CDI_POST_DOMINATORS) ? true : false;
gcc_assert (dom_info_available_p (dir)); gcc_assert (dom_info_available_p (dir));
init_dom_info (&di, dir);
calc_dfs_tree (&di, reverse);
calc_idoms (&di, reverse);
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
old_dom[bb->index] = get_immediate_dominator (dir, bb); imm_bb = get_immediate_dominator (dir, bb);
if (!imm_bb)
if (!old_dom[bb->index])
{ {
error ("dominator of %d status unknown", bb->index); error ("dominator of %d status unknown", bb->index);
err = 1; err = 1;
} }
}
free_dominance_info (dir);
calculate_dominance_info (dir);
FOR_EACH_BB (bb) imm_bb_correct = di.dfs_to_bb[di.dom[di.dfs_order[bb->index]]];
{ if (imm_bb != imm_bb_correct)
imm_bb = get_immediate_dominator (dir, bb);
if (old_dom[bb->index] != imm_bb)
{ {
error ("dominator of %d should be %d, not %d", error ("dominator of %d should be %d, not %d",
bb->index, imm_bb->index, old_dom[bb->index]->index); bb->index, imm_bb_correct->index, imm_bb->index);
err = 1; err = 1;
} }
} }
free (old_dom); free_dom_info (&di);
gcc_assert (!err); gcc_assert (!err);
} }
...@@ -1453,3 +1452,41 @@ debug_dominance_info (enum cdi_direction dir) ...@@ -1453,3 +1452,41 @@ debug_dominance_info (enum cdi_direction dir)
if ((bb2 = get_immediate_dominator (dir, bb))) if ((bb2 = get_immediate_dominator (dir, bb)))
fprintf (stderr, "%i %i\n", bb->index, bb2->index); fprintf (stderr, "%i %i\n", bb->index, bb2->index);
} }
/* Prints to stderr representation of the dominance tree (for direction DIR)
rooted in ROOT, indented by INDENT tabelators. If INDENT_FIRST is false,
the first line of the output is not indented. */
static void
debug_dominance_tree_1 (enum cdi_direction dir, basic_block root,
unsigned indent, bool indent_first)
{
basic_block son;
unsigned i;
bool first = true;
if (indent_first)
for (i = 0; i < indent; i++)
fprintf (stderr, "\t");
fprintf (stderr, "%d\t", root->index);
for (son = first_dom_son (dir, root);
son;
son = next_dom_son (dir, son))
{
debug_dominance_tree_1 (dir, son, indent + 1, !first);
first = false;
}
if (first)
fprintf (stderr, "\n");
}
/* Prints to stderr representation of the dominance tree (for direction DIR)
rooted in ROOT. */
void
debug_dominance_tree (enum cdi_direction dir, basic_block root)
{
debug_dominance_tree_1 (dir, root, 0, false);
}
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