Commit ea9f867b by Bernd Schmidt Committed by Jeff Law

re PR rtl-optimization/79125 (ICE in rtl_verify_bb_insns, at cfgrtl.c:2661…

re PR rtl-optimization/79125 (ICE in rtl_verify_bb_insns, at cfgrtl.c:2661 (error: flow control insn inside a basic block))

2017-01-21  Bernd Schmidt  <bschmidt@redhat.com>

	rtl-optimization/79125
	* cprop.c (local_cprop_pass): Handle cases where we make an
	unconditional trap.

	PR rtl-optimization/79125
	* gcc.dg/torture/pr79125.c: New test.

From-SVN: r244741
parent 80b40b87
2017-01-21 Bernd Schmidt <bschmidt@redhat.com>
rtl-optimization/79125
* cprop.c (local_cprop_pass): Handle cases where we make an
unconditional trap.
2017-01-20 Segher Boessenkool <segher@kernel.crashing.org>
PR target/61729
......
......@@ -1248,6 +1248,8 @@ local_cprop_pass (void)
bool changed = false;
unsigned i;
auto_vec<rtx_insn *> uncond_traps;
cselib_init (0);
FOR_EACH_BB_FN (bb, cfun)
{
......@@ -1255,6 +1257,9 @@ local_cprop_pass (void)
{
if (INSN_P (insn))
{
bool was_uncond_trap
= (GET_CODE (PATTERN (insn)) == TRAP_IF
&& XEXP (PATTERN (insn), 0) == const1_rtx);
rtx note = find_reg_equal_equiv_note (insn);
do
{
......@@ -1273,6 +1278,13 @@ local_cprop_pass (void)
break;
}
}
if (!was_uncond_trap
&& GET_CODE (PATTERN (insn)) == TRAP_IF
&& XEXP (PATTERN (insn), 0) == const1_rtx)
{
uncond_traps.safe_push (insn);
break;
}
if (insn->deleted ())
break;
}
......@@ -1287,6 +1299,14 @@ local_cprop_pass (void)
cselib_finish ();
while (!uncond_traps.is_empty ())
{
rtx_insn *insn = uncond_traps.pop ();
basic_block to_split = BLOCK_FOR_INSN (insn);
remove_edge (split_block (to_split, insn));
emit_barrier_after_bb (to_split);
}
return changed;
}
......
2017-01-21 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/79125
* gcc.dg/torture/pr79125.c: New test.
2017-01-20 Jiong Wang <jiong.wang@arm.com>
* testsuite/gcc.target/aarch64/return_address_sign_1.c: Enable on LP64
......
int za;
void
hl (void)
{
short int o8 = 0;
short int m6 = 1;
short int *ni = &m6;
for (;;)
{
int af;
short int *fd = (short int *)&ni;
if (ni != 0)
{
if (m6 != 0)
*ni = 0;
else
za = 0;
af = (o8 * o8) || o8;
if (af == 0)
m6 /= 0; /* { dg-warning "division" } */
while (za != 0)
{
}
}
*fd = &o8; /* { dg-warning "without a cast" } */
for (af = 0; af < 2; ++af)
af = za;
}
}
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