aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ira.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr78610.c14
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0fc87d2..97daa79 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-11-30 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR rtl-optimization/78610
+ * ira.c (combine_and_move_insns): Don't substitute into TRAP_IF
+ instructions.
+
2016-11-30 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/78574
diff --git a/gcc/ira.c b/gcc/ira.c
index 358110b..ab32288 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -3669,6 +3669,11 @@ combine_and_move_insns (void)
if (JUMP_P (use_insn))
continue;
+ /* Also don't substitute into a conditional trap insn -- it can become
+ an unconditional trap, and that is a flow control insn. */
+ if (GET_CODE (PATTERN (use_insn)) == TRAP_IF)
+ continue;
+
df_ref def = DF_REG_DEF_CHAIN (regno);
gcc_assert (DF_REG_DEF_COUNT (regno) == 1 && DF_REF_INSN_INFO (def));
rtx_insn *def_insn = DF_REF_INSN (def);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eac361b..7164611 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-11-30 Segher Boessenkool <segher@kernel.crashing.org>
+
+ PR rtl-optimization/78610
+ * gcc.c-torture/compile/pr78610.c: New testcase.
+
2016-11-30 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/78574
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr78610.c b/gcc/testsuite/gcc.c-torture/compile/pr78610.c
new file mode 100644
index 0000000..0415ae6
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr78610.c
@@ -0,0 +1,14 @@
+/* PR rtl-optimization/78610 */
+
+unsigned int ao, gl;
+
+void
+ri (void)
+{
+ for (;;)
+ {
+ if (ao != 1)
+ ao /= 0;
+ gl = 0;
+ }
+}