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
This commit is contained in:
Jakub Jelinek 2015-01-27 10:19:30 +01:00 committed by Jakub Jelinek
parent 3dd598be88
commit 6d71672db6
4 changed files with 45 additions and 1 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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;

View File

@ -1,3 +1,8 @@
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.

View File

@ -0,0 +1,10 @@
/* 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 ();
}