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
This commit is contained in:
parent
80b40b8784
commit
ea9f867b7b
4 changed files with 63 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
20
gcc/cprop.c
20
gcc/cprop.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
32
gcc/testsuite/gcc.dg/torture/pr79125.c
Normal file
32
gcc/testsuite/gcc.dg/torture/pr79125.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
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 *)∋
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue