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
This commit is contained in:
parent
32a7ab3d80
commit
1fc3998daa
2 changed files with 62 additions and 18 deletions
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* config/sh/constraints.md: New file.
|
||||
|
|
|
@ -124,6 +124,7 @@ static TBB eval (struct dom_info *, TBB);
|
|||
static void link_roots (struct dom_info *, TBB, TBB);
|
||||
static void calc_idoms (struct dom_info *, bool);
|
||||
void debug_dominance_info (enum cdi_direction);
|
||||
void debug_dominance_tree (enum cdi_direction, basic_block);
|
||||
|
||||
/* Keeps track of the*/
|
||||
static unsigned n_bbs_in_dom_tree[2];
|
||||
|
@ -970,37 +971,35 @@ void
|
|||
verify_dominators (enum cdi_direction dir)
|
||||
{
|
||||
int err = 0;
|
||||
basic_block *old_dom = XNEWVEC (basic_block, last_basic_block);
|
||||
basic_block bb, imm_bb;
|
||||
basic_block bb, imm_bb, imm_bb_correct;
|
||||
struct dom_info di;
|
||||
bool reverse = (dir == CDI_POST_DOMINATORS) ? true : false;
|
||||
|
||||
gcc_assert (dom_info_available_p (dir));
|
||||
|
||||
FOR_EACH_BB (bb)
|
||||
{
|
||||
old_dom[bb->index] = get_immediate_dominator (dir, bb);
|
||||
|
||||
if (!old_dom[bb->index])
|
||||
{
|
||||
error ("dominator of %d status unknown", bb->index);
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
free_dominance_info (dir);
|
||||
calculate_dominance_info (dir);
|
||||
init_dom_info (&di, dir);
|
||||
calc_dfs_tree (&di, reverse);
|
||||
calc_idoms (&di, reverse);
|
||||
|
||||
FOR_EACH_BB (bb)
|
||||
{
|
||||
imm_bb = get_immediate_dominator (dir, bb);
|
||||
if (old_dom[bb->index] != imm_bb)
|
||||
if (!imm_bb)
|
||||
{
|
||||
error ("dominator of %d status unknown", bb->index);
|
||||
err = 1;
|
||||
}
|
||||
|
||||
imm_bb_correct = di.dfs_to_bb[di.dom[di.dfs_order[bb->index]]];
|
||||
if (imm_bb != imm_bb_correct)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
free (old_dom);
|
||||
free_dom_info (&di);
|
||||
gcc_assert (!err);
|
||||
}
|
||||
|
||||
|
@ -1453,3 +1452,41 @@ debug_dominance_info (enum cdi_direction dir)
|
|||
if ((bb2 = get_immediate_dominator (dir, bb)))
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue