===================================================================
@@ -353,12 +353,15 @@
pretend that there is an edge to the exit block. In the second
case, we wind up with a forest. We need to process all noreturn
blocks before we know if we've got any infinite loops. */
-
+ int *revcfg_postorder = XNEWVEC (int, n_basic_blocks);
+ int n = inverted_post_order_compute (revcfg_postorder);
+ unsigned int i = (unsigned) n;
basic_block b;
bool saw_unconnected = false;
- FOR_EACH_BB_REVERSE (b)
+ while (i)
{
+ basic_block b = revcfg_postorder[--i];
if (EDGE_COUNT (b->succs) > 0)
{
if (di->dfs_order[b->index] == 0)
@@ -375,8 +378,10 @@
if (saw_unconnected)
{
- FOR_EACH_BB_REVERSE (b)
+ i = n;
+ while (i)
{
+ basic_block b = revcfg_postorder[--i];
if (di->dfs_order[b->index])
continue;
bitmap_set_bit (di->fake_exit_edge, b->index);