graphite-scop-detection.c (create_sese_edges): Compute dominance info before trying to fix loop structure.
* graphite-scop-detection.c (create_sese_edges): Compute dominance info before trying to fix loop structure. * cfgloopmanip.c (fix_loop_structure): Require fast DOM queries. * tree-cfgcleanup.c (repair_loop_structures): Likewise. * cfgloop.c (verify_loop_structure): Verify loop fathers. From-SVN: r190390
This commit is contained in:
parent
2ba31c054f
commit
cc360b36df
@ -1,5 +1,11 @@
|
||||
2012-08-14 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
* graphite-scop-detection.c (create_sese_edges): Compute dominance
|
||||
info before trying to fix loop structure.
|
||||
* cfgloopmanip.c (fix_loop_structure): Require fast DOM queries.
|
||||
* tree-cfgcleanup.c (repair_loop_structures): Likewise.
|
||||
* cfgloop.c (verify_loop_structure): Verify loop fathers.
|
||||
|
||||
* dominance.c (init_dom_info): Use gcc_checking_assert, not gcc_assert.
|
||||
(dom_convert_dir_to_idx, compute_dom_fast_query,
|
||||
get_immediate_dominator, set_immediate_dominator, get_dominated_by,
|
||||
|
@ -1294,6 +1294,7 @@ cancel_loop_tree (struct loop *loop)
|
||||
-- loop header have just single entry edge and single latch edge
|
||||
-- loop latches have only single successor that is header of their loop
|
||||
-- irreducible loops are correctly marked
|
||||
-- the cached loop depth and loop father of each bb is correct
|
||||
*/
|
||||
DEBUG_FUNCTION void
|
||||
verify_loop_structure (void)
|
||||
@ -1308,6 +1309,7 @@ verify_loop_structure (void)
|
||||
loop_iterator li;
|
||||
struct loop_exit *exit, *mexit;
|
||||
bool dom_available = dom_info_available_p (CDI_DOMINATORS);
|
||||
sbitmap visited = sbitmap_alloc (last_basic_block);
|
||||
|
||||
/* We need up-to-date dominators, compute or verify them. */
|
||||
if (!dom_available)
|
||||
@ -1344,11 +1346,34 @@ verify_loop_structure (void)
|
||||
if (!flow_bb_inside_loop_p (loop, bbs[j]))
|
||||
{
|
||||
error ("bb %d do not belong to loop %d",
|
||||
bbs[j]->index, loop->num);
|
||||
bbs[j]->index, loop->num);
|
||||
err = 1;
|
||||
}
|
||||
free (bbs);
|
||||
}
|
||||
sbitmap_zero (visited);
|
||||
FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
|
||||
{
|
||||
bbs = get_loop_body (loop);
|
||||
|
||||
for (j = 0; j < loop->num_nodes; j++)
|
||||
{
|
||||
bb = bbs[j];
|
||||
|
||||
/* Ignore this block if it is in an inner loop. */
|
||||
if (TEST_BIT (visited, bb->index))
|
||||
continue;
|
||||
SET_BIT (visited, bb->index);
|
||||
|
||||
if (bb->loop_father != loop)
|
||||
{
|
||||
error ("bb %d has father loop %d, should be loop %d",
|
||||
bb->index, bb->loop_father->num, loop->num);
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
free (bbs);
|
||||
}
|
||||
|
||||
/* Check headers and latches. */
|
||||
FOR_EACH_LOOP (li, loop, 0)
|
||||
@ -1556,6 +1581,7 @@ verify_loop_structure (void)
|
||||
|
||||
gcc_assert (!err);
|
||||
|
||||
sbitmap_free (visited);
|
||||
free (sizes);
|
||||
if (!dom_available)
|
||||
free_dominance_info (CDI_DOMINATORS);
|
||||
|
@ -1640,6 +1640,9 @@ fix_loop_structure (bitmap changed_bbs)
|
||||
bool record_exits = false;
|
||||
struct loop **superloop = XNEWVEC (struct loop *, number_of_loops ());
|
||||
|
||||
/* We need exact and fast dominance info to be available. */
|
||||
gcc_assert (dom_info_state (CDI_DOMINATORS) == DOM_OK);
|
||||
|
||||
/* Remove the old bb -> loop mapping. Remember the depth of the blocks in
|
||||
the loop hierarchy, so that we can recognize blocks whose loop nesting
|
||||
relationship has changed. */
|
||||
|
@ -1029,6 +1029,7 @@ create_sese_edges (VEC (sd_region, heap) *regions)
|
||||
|
||||
unmark_exit_edges (regions);
|
||||
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
fix_loop_structure (NULL);
|
||||
|
||||
#ifdef ENABLE_CHECKING
|
||||
|
@ -737,6 +737,8 @@ repair_loop_structures (void)
|
||||
{
|
||||
bitmap changed_bbs;
|
||||
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
|
||||
timevar_push (TV_REPAIR_LOOPS);
|
||||
changed_bbs = BITMAP_ALLOC (NULL);
|
||||
fix_loop_structure (changed_bbs);
|
||||
|
Loading…
Reference in New Issue
Block a user