combine: Emit a barrier after unconditional trap (PR78607)
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 1 Dec 2016 02:04:10 +0000 (03:04 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 1 Dec 2016 02:04:10 +0000 (03:04 +0100)
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

gcc/ChangeLog
gcc/combine.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr78607.c [new file with mode: 0644]

index 7a46cd22253b36cc54bef90fa85f7b1bcba450b1..e2f7b25e9be3e4055b09dc67858d80fa0c508d15 100644 (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
index a8dae89d7b325de5d3f30459da92166a81f88685..faafcb741f4121ad95faf2af455b10885627d841 100644 (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;
     }
 
index f38b5863baa574f470e038649687d865993e234c..bf4bd8ac218086bcd22eddf041bd612adb2c7617 100644 (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
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr78607.c b/gcc/testsuite/gcc.c-torture/compile/pr78607.c
new file mode 100644 (file)
index 0000000..2c5420d
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR rtl-optimization/78607 */
+
+void
+rc (int cx)
+{
+  int mq;
+
+  if (mq == 0 && (cx / 0) != 0)
+    for (;;)
+      {
+      }
+}