Commit 1b7c8d39 by Richard Biener Committed by Richard Biener

re PR middle-end/80539 (gcc ICE at -O2 and above on valid code on…

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
parent a6d25cad
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
......
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
......
/* { 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. */
......
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