re PR middle-end/80539 (gcc ICE at -O2 and above on valid code on x86_64-linux-gnu in "chrec_fold_plus_poly_poly")
2017-04-27 Richard Biener <rguenther@suse.de> PR middle-end/80539 * tree-chrec.c (chrec_fold_plus_poly_poly): Deal with not being in loop-closed SSA form conservatively. (chrec_fold_multiply_poly_poly): Likewise. * gcc.dg/torture/pr80539.c: New testcase. From-SVN: r247322
This commit is contained in:
parent
a6d25cadec
commit
1b7c8d39fb
4 changed files with 46 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
2017-04-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/80539
|
||||
* tree-chrec.c (chrec_fold_plus_poly_poly): Deal with not
|
||||
being in loop-closed SSA form conservatively.
|
||||
(chrec_fold_multiply_poly_poly): Likewise.
|
||||
|
||||
2017-04-27 Tamar Christina <tamar.christina@arm.com>
|
||||
|
||||
PR middle-end/79665
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-04-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/80539
|
||||
* gcc.dg/torture/pr80539.c: New testcase.
|
||||
|
||||
2017-04-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/77728
|
||||
|
|
22
gcc/testsuite/gcc.dg/torture/pr80539.c
Normal file
22
gcc/testsuite/gcc.dg/torture/pr80539.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
signed char a, b;
|
||||
void fn1()
|
||||
{
|
||||
signed char c, e;
|
||||
short d;
|
||||
if (0) {
|
||||
for (; d;) {
|
||||
l1:
|
||||
for (c = 7; a; c++)
|
||||
;
|
||||
e = 6;
|
||||
for (; b; e++)
|
||||
;
|
||||
}
|
||||
c -= e;
|
||||
}
|
||||
if (d == 7)
|
||||
goto l1;
|
||||
a = c;
|
||||
}
|
|
@ -149,7 +149,12 @@ chrec_fold_plus_poly_poly (enum tree_code code,
|
|||
|
||||
/* This function should never be called for chrecs of loops that
|
||||
do not belong to the same loop nest. */
|
||||
gcc_assert (loop0 == loop1);
|
||||
if (loop0 != loop1)
|
||||
{
|
||||
/* It still can happen if we are not in loop-closed SSA form. */
|
||||
gcc_assert (! loops_state_satisfies_p (LOOP_CLOSED_SSA));
|
||||
return chrec_dont_know;
|
||||
}
|
||||
|
||||
if (code == PLUS_EXPR || code == POINTER_PLUS_EXPR)
|
||||
{
|
||||
|
@ -211,7 +216,12 @@ chrec_fold_multiply_poly_poly (tree type,
|
|||
chrec_fold_multiply (type, CHREC_LEFT (poly0), poly1),
|
||||
CHREC_RIGHT (poly0));
|
||||
|
||||
gcc_assert (loop0 == loop1);
|
||||
if (loop0 != loop1)
|
||||
{
|
||||
/* It still can happen if we are not in loop-closed SSA form. */
|
||||
gcc_assert (! loops_state_satisfies_p (LOOP_CLOSED_SSA));
|
||||
return chrec_dont_know;
|
||||
}
|
||||
|
||||
/* poly0 and poly1 are two polynomials in the same variable,
|
||||
{a, +, b}_x * {c, +, d}_x -> {a*c, +, a*d + b*c + b*d, +, 2*b*d}_x. */
|
||||
|
|
Loading…
Add table
Reference in a new issue