mirror of git://gcc.gnu.org/git/gcc.git
re PR middle-end/45458 (ICE: in add_labels_and_missing_jumps, at bb-reorder.c:1306 with-fnon-call-exceptions -freorder-blocks-and-partition -fprofile-use)
PR middle-end/45458 * bb-reorder.c (add_labels_and_missing_jumps): Treat bbs ending with throwing insns like blocks ending with a call. (fix_up_fall_thru_edges): Likewise. * g++.dg/tree-prof/partition2.C: New test. From-SVN: r163743
This commit is contained in:
parent
cd34bbe8b9
commit
596aa3f09d
|
|
@ -1,3 +1,10 @@
|
||||||
|
2010-09-01 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/45458
|
||||||
|
* bb-reorder.c (add_labels_and_missing_jumps): Treat
|
||||||
|
bbs ending with throwing insns like blocks ending with a call.
|
||||||
|
(fix_up_fall_thru_edges): Likewise.
|
||||||
|
|
||||||
2010-09-01 Nathan Froyd <froydnj@codesourcery.com>
|
2010-09-01 Nathan Froyd <froydnj@codesourcery.com>
|
||||||
|
|
||||||
* config/m32c/m32c-protos.h (m32c_function_arg): Delete.
|
* config/m32c/m32c-protos.h (m32c_function_arg): Delete.
|
||||||
|
|
|
||||||
|
|
@ -1299,7 +1299,9 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
|
||||||
|
|
||||||
if (src && (src != ENTRY_BLOCK_PTR))
|
if (src && (src != ENTRY_BLOCK_PTR))
|
||||||
{
|
{
|
||||||
if (!JUMP_P (BB_END (src)) && !block_ends_with_call_p (src))
|
if (!JUMP_P (BB_END (src))
|
||||||
|
&& !block_ends_with_call_p (src)
|
||||||
|
&& !can_throw_internal (BB_END (src)))
|
||||||
/* bb just falls through. */
|
/* bb just falls through. */
|
||||||
{
|
{
|
||||||
/* make sure there's only one successor */
|
/* make sure there's only one successor */
|
||||||
|
|
@ -1316,9 +1318,9 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
|
||||||
src->il.rtl->footer = unlink_insn_chain (barrier, barrier);
|
src->il.rtl->footer = unlink_insn_chain (barrier, barrier);
|
||||||
/* Mark edge as non-fallthru. */
|
/* Mark edge as non-fallthru. */
|
||||||
crossing_edges[i]->flags &= ~EDGE_FALLTHRU;
|
crossing_edges[i]->flags &= ~EDGE_FALLTHRU;
|
||||||
} /* end: 'if (GET_CODE ... ' */
|
} /* end: 'if (!JUMP_P ... ' */
|
||||||
} /* end: 'if (src && src->index...' */
|
} /* end: 'if (src && src !=...' */
|
||||||
} /* end: 'if (dest && dest->index...' */
|
} /* end: 'if (dest && dest !=...' */
|
||||||
} /* end: 'if (crossing_edges[i]...' */
|
} /* end: 'if (crossing_edges[i]...' */
|
||||||
} /* end for loop */
|
} /* end for loop */
|
||||||
}
|
}
|
||||||
|
|
@ -1375,19 +1377,21 @@ fix_up_fall_thru_edges (void)
|
||||||
fall_thru = succ2;
|
fall_thru = succ2;
|
||||||
cond_jump = succ1;
|
cond_jump = succ1;
|
||||||
}
|
}
|
||||||
else if (!fall_thru && succ1 && block_ends_with_call_p (cur_bb))
|
else if (succ1
|
||||||
{
|
&& (block_ends_with_call_p (cur_bb)
|
||||||
edge e;
|
|| can_throw_internal (BB_END (cur_bb))))
|
||||||
edge_iterator ei;
|
{
|
||||||
|
edge e;
|
||||||
|
edge_iterator ei;
|
||||||
|
|
||||||
/* Find EDGE_CAN_FALLTHRU edge. */
|
/* Find EDGE_CAN_FALLTHRU edge. */
|
||||||
FOR_EACH_EDGE (e, ei, cur_bb->succs)
|
FOR_EACH_EDGE (e, ei, cur_bb->succs)
|
||||||
if (e->flags & EDGE_CAN_FALLTHRU)
|
if (e->flags & EDGE_CAN_FALLTHRU)
|
||||||
{
|
{
|
||||||
fall_thru = e;
|
fall_thru = e;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR))
|
if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2010-09-01 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/45458
|
||||||
|
* g++.dg/tree-prof/partition2.C: New test.
|
||||||
|
|
||||||
2010-09-01 Richard Guenther <rguenther@suse.de>
|
2010-09-01 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* gcc.dg/vect/vect-outer-fir.c: Adjust.
|
* gcc.dg/vect/vect-outer-fir.c: Adjust.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
// PR middle-end/45458
|
||||||
|
// { dg-require-effective-target freorder }
|
||||||
|
// { dg-options "-fnon-call-exceptions -freorder-blocks-and-partition" }
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
throw 6;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue