Commit 895548a5 by Kyrylo Tkachov

[cfgloop] PR middle-end/68375: Restructure get_loop_body_in_bfs_order to handle…

[cfgloop] PR middle-end/68375: Restructure get_loop_body_in_bfs_order to handle loops with only a header

	PR middle-end/68375
	* cfgloop.c (get_loop_body_in_bfs_order): Restructure loop to avoid
	bogus assertion.

	* gcc.dg/pr68375.c: New test.

From-SVN: r230798
parent 3788cfb5
2015-11-24 Richard Biener <rguenther@suse.de>
Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR middle-end/68375
* cfgloop.c (get_loop_body_in_bfs_order): Restructure loop to avoid
bogus assertion.
2015-11-24 Jakub Jelinek <jakub@redhat.com>
PR target/68483
......@@ -913,37 +913,32 @@ get_loop_body_in_bfs_order (const struct loop *loop)
basic_block *blocks;
basic_block bb;
bitmap visited;
unsigned int i = 0;
unsigned int vc = 1;
unsigned int i = 1;
unsigned int vc = 0;
gcc_assert (loop->num_nodes);
gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun));
blocks = XNEWVEC (basic_block, loop->num_nodes);
visited = BITMAP_ALLOC (NULL);
bb = loop->header;
blocks[0] = loop->header;
bitmap_set_bit (visited, loop->header->index);
while (i < loop->num_nodes)
{
edge e;
edge_iterator ei;
if (bitmap_set_bit (visited, bb->index))
/* This basic block is now visited */
blocks[i++] = bb;
gcc_assert (i > vc);
bb = blocks[vc++];
FOR_EACH_EDGE (e, ei, bb->succs)
{
if (flow_bb_inside_loop_p (loop, e->dest))
{
/* This bb is now visited. */
if (bitmap_set_bit (visited, e->dest->index))
blocks[i++] = e->dest;
}
}
gcc_assert (i > vc);
bb = blocks[vc++];
}
BITMAP_FREE (visited);
......
2015-11-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR middle-end/68375
* gcc.dg/pr68375.c: New test.
2015-11-24 Jakub Jelinek <jakub@redhat.com>
PR target/68483
......
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized-graph" } */
int a, c, d, e, g, h;
short f;
int
foo ()
{
}
short
fn1 (void)
{
int j[2];
for (; e; e++)
if (j[0])
for (;;)
;
if (!g)
return f;
}
int
main (void)
{
for (; a < 1; a++)
{
for (c = 0; c < 2; c++)
{
d && (f = 0);
h = fn1 ();
}
__builtin_printf ("%d\n", (char) f);
}
return 0;
}
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