combine: Emit a barrier after unconditional trap (PR78607)

After an unconditional trap there should be a barrier.  In most cases
one is automatically inserted, but not if the trap is the final insn in
the instruction stream.  We need to emit one explicitly.


	PR rtl-optimization/78607
	* combine.c (try_combine): Emit a barrier after a unconditional trap.

gcc/testsuite/
	PR rtl-optimization/78607
	* gcc.c-torture/compile/pr78607.c: New testcase.

From-SVN: r243092
This commit is contained in:
Segher Boessenkool 2016-12-01 03:04:10 +01:00 committed by Segher Boessenkool
parent e95a3eb3c6
commit 0f09127808
4 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2016-12-01 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/78607
* combine.c (try_combine): Emit a barrier after a unconditional trap.
2016-11-30 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/78602

View File

@ -4627,6 +4627,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
basic_block bb = BLOCK_FOR_INSN (i3);
gcc_assert (bb);
remove_edge (split_block (bb, i3));
emit_barrier_after_bb (bb);
*new_direct_jump_p = 1;
}
@ -4637,6 +4638,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
basic_block bb = BLOCK_FOR_INSN (undobuf.other_insn);
gcc_assert (bb);
remove_edge (split_block (bb, undobuf.other_insn));
emit_barrier_after_bb (bb);
*new_direct_jump_p = 1;
}

View File

@ -1,3 +1,8 @@
2016-12-01 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/78607
* gcc.c-torture/compile/pr78607.c: New testcase.
2016-11-30 Martin Sebor <msebor@redhat.com>
PR tree-optimization/78586

View File

@ -0,0 +1,12 @@
/* PR rtl-optimization/78607 */
void
rc (int cx)
{
int mq;
if (mq == 0 && (cx / 0) != 0)
for (;;)
{
}
}