Commit 6d71672d by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/61058 (ICE: RTL check: expected elt 3 type 'B', have '0'…

re PR rtl-optimization/61058 (ICE: RTL check: expected elt 3 type 'B', have '0' (rtx barrier) in distance_agu_use_in_bb, at config/i386/i386.c:16740 with __builtin_unreachable())

	PR rtl-optimization/61058
	* jump.c (cleanup_barriers): Update basic block boundaries
	if BLOCK_FOR_INSN is non-NULL on PREV.

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

From-SVN: r220155
parent 3dd598be
2015-01-27 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/61058
* jump.c (cleanup_barriers): Update basic block boundaries
if BLOCK_FOR_INSN is non-NULL on PREV.
2015-01-27 Ilya Enkovich <ilya.enkovich@intel.com>
* tree-chkp.c (chkp_call_returns_bounds_p): Fix handling of
......
......@@ -168,7 +168,30 @@ cleanup_barriers (void)
if (BARRIER_P (prev))
delete_insn (insn);
else if (prev != PREV_INSN (insn))
reorder_insns_nobb (insn, insn, prev);
{
basic_block bb = BLOCK_FOR_INSN (prev);
rtx_insn *end = PREV_INSN (insn);
reorder_insns_nobb (insn, insn, prev);
if (bb)
{
/* If the backend called in machine reorg compute_bb_for_insn
and didn't free_bb_for_insn again, preserve basic block
boundaries. Move the end of basic block to PREV since
it is followed by a barrier now, and clear BLOCK_FOR_INSN
on the following notes.
??? Maybe the proper solution for the targets that have
cfg around after machine reorg is not to run cleanup_barriers
pass at all. */
BB_END (bb) = prev;
do
{
prev = NEXT_INSN (prev);
if (prev != insn && BLOCK_FOR_INSN (prev) == bb)
BLOCK_FOR_INSN (prev) = NULL;
}
while (prev != end);
}
}
}
}
return 0;
......
2015-01-27 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/61058
* gcc.dg/pr61058.c: New test.
2015-01-27 Ilya Enkovich <ilya.enkovich@intel.com>
* gcc.target/i386/chkp-narrow-bounds.c: New.
......
/* PR rtl-optimization/61058 */
/* { dg-do compile } */
/* { dg-options "" } */
/* { dg-additional-options "-fno-asynchronous-unwind-tables -mtune=atom" { target i?86-*-* x86_64-*-* } } */
void
foo (void)
{
__builtin_unreachable ();
}
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