diff options
author | Diego Novillo <dnovillo@google.com> | 2013-03-26 10:33:36 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@google.com> | 2013-03-26 10:33:36 +0000 |
commit | 2a98a4059372b93af919c05fd68f3364e56c7008 (patch) | |
tree | 61b7552b10852929b89f1cb93878fadffc1885c2 /gcc/cfgloop.c | |
parent | f13a2ceb6b815892f592d14cf87edf1c17383457 (diff) | |
parent | df552eec2bd8a867e1ce28b33d62a1aac099c4d1 (diff) |
Merged revisions 196607-196608,196611-196614,196625,196629-196634,196636,196639,196645-196647,196649-196650,196654-196659,196666,196669,196671-196675,196682-196683,196694-196695,196697-196698,196700-196701,196704-196706,196709,196721-196748,196750-196751,196753,196755-196758,196762,196764-196765,196767-196771,196773-196779,196781-196784,196788-196792,196795-196797,196799-196800,196804-196807,196810-196814,196821,196823-196825,196828-196829,196831-196832,196834,196841-196842,196847-196853,196855-196856,196858,196860-196861,196864-196866,196868,196870-196872,196874,196876,196878-196879,196882,196884-196890,196896-196897,196899-196902,196954,196956-196961,196964-196965,196970,196977-196978,196981-196983,196989,197002-197005,197007,197011-197012,197016-197019,197021,197023-197025,197029-197034,197036-197042 via svnmerge from cxx-conversion
svn+ssh://gcc.gnu.org/svn/gcc/trunk
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/cxx-conversion@197098 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgloop.c')
-rw-r--r-- | gcc/cfgloop.c | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c index 751da5a2c17..54ce2a24c21 100644 --- a/gcc/cfgloop.c +++ b/gcc/cfgloop.c @@ -1319,7 +1319,7 @@ verify_loop_structure (void) { unsigned *sizes, i, j; sbitmap irreds; - basic_block bb; + basic_block bb, *bbs; struct loop *loop; int err = 0; edge e; @@ -1335,43 +1335,51 @@ verify_loop_structure (void) else verify_dominators (CDI_DOMINATORS); - /* Check sizes. */ - sizes = XCNEWVEC (unsigned, num); - sizes[0] = 2; - - FOR_EACH_BB (bb) - for (loop = bb->loop_father; loop; loop = loop_outer (loop)) - sizes[loop->num]++; - - FOR_EACH_LOOP (li, loop, LI_INCLUDE_ROOT) - { - i = loop->num; - - if (loop->num_nodes != sizes[i]) - { - error ("size of loop %d should be %d, not %d", - i, sizes[i], loop->num_nodes); - err = 1; - } - } - /* Check the headers. */ FOR_EACH_BB (bb) - if (bb_loop_header_p (bb) - && bb->loop_father->header != bb) + if (bb_loop_header_p (bb)) { - error ("loop with header %d not in loop tree", bb->index); + if (bb->loop_father->header == NULL) + { + error ("loop with header %d marked for removal", bb->index); + err = 1; + } + else if (bb->loop_father->header != bb) + { + error ("loop with header %d not in loop tree", bb->index); + err = 1; + } + } + else if (bb->loop_father->header == bb) + { + error ("non-loop with header %d not marked for removal", bb->index); err = 1; } - /* Check get_loop_body. */ + /* Check the recorded loop father and sizes of loops. */ visited = sbitmap_alloc (last_basic_block); bitmap_clear (visited); + bbs = XNEWVEC (basic_block, n_basic_blocks); FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST) { - basic_block *bbs = get_loop_body (loop); + unsigned n; - for (j = 0; j < loop->num_nodes; j++) + if (loop->header == NULL) + { + error ("removed loop %d in loop tree", loop->num); + err = 1; + continue; + } + + n = get_loop_body_with_size (loop, bbs, n_basic_blocks); + if (loop->num_nodes != n) + { + error ("size of loop %d should be %d, not %d", + loop->num, n, loop->num_nodes); + err = 1; + } + + for (j = 0; j < n; j++) { bb = bbs[j]; @@ -1394,16 +1402,16 @@ verify_loop_structure (void) err = 1; } } - - free (bbs); } + free (bbs); sbitmap_free (visited); /* Check headers and latches. */ FOR_EACH_LOOP (li, loop, 0) { i = loop->num; - + if (loop->header == NULL) + continue; if (!bb_loop_header_p (loop->header)) { error ("loop %d%'s header is not a loop header", i); @@ -1561,6 +1569,7 @@ verify_loop_structure (void) { unsigned n_exits = 0, eloops; + sizes = XCNEWVEC (unsigned, num); memset (sizes, 0, sizeof (unsigned) * num); FOR_EACH_BB (bb) { @@ -1624,11 +1633,12 @@ verify_loop_structure (void) err = 1; } } + + free (sizes); } gcc_assert (!err); - free (sizes); if (!dom_available) free_dominance_info (CDI_DOMINATORS); } |