Commit 17a938e8 by Segher Boessenkool Committed by Segher Boessenkool

ira: Don't substitute into TRAP_IF insns (PR78610)

In the testcase, IRA propagates a constant into a TRAP_IF insn, which
then becomes an unconditional trap.  Unconditional traps are control
flow insns so doing this requires surgery on the cfg.  We cannot do
that here, so instead refuse to do the substitution.


	PR rtl-optimization/78610
	* ira.c (combine_and_move_insns): Don't substitute into TRAP_IF
	instructions.

gcc/testsuite/
	PR rtl-optimization/78610
	* gcc.c-torture/compile/pr78610.c: New testcase.

From-SVN: r243028
parent 88811a97
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
......@@ -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);
......
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
......
/* PR rtl-optimization/78610 */
unsigned int ao, gl;
void
ri (void)
{
for (;;)
{
if (ao != 1)
ao /= 0;
gl = 0;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment