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:
parent
e95a3eb3c6
commit
0f09127808
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* PR rtl-optimization/78607 */
|
||||
|
||||
void
|
||||
rc (int cx)
|
||||
{
|
||||
int mq;
|
||||
|
||||
if (mq == 0 && (cx / 0) != 0)
|
||||
for (;;)
|
||||
{
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue