Commit 13b562c5 by Bin Cheng Committed by Bin Cheng

re PR tree-optimization/68021 (ice in rewrite_use_nonlinear_expr with -O3)


	PR tree-optimization/68021
	* tree-ssa-loop-ivopts.c (get_computation_aff): Set ratio to 1 if
	when computing the value of biv cand by itself.

	gcc/testsuite/ChangeLog
	PR tree-optimization/68021
	* gcc.dg/tree-ssa/pr68021.c: New test.

From-SVN: r233269
parent 00a8574a
2016-02-10 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/68021
* tree-ssa-loop-ivopts.c (get_computation_aff): Set ratio to 1 if
when computing the value of biv cand by itself.
2016-02-10 Wilco Dijkstra <wdijkstr@arm.com> 2016-02-10 Wilco Dijkstra <wdijkstr@arm.com>
* config/aarch64/aarch64.c (cortexa53_tunings): Enable AES fusion. * config/aarch64/aarch64.c (cortexa53_tunings): Enable AES fusion.
......
2016-02-10 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/68021
* gcc.dg/tree-ssa/pr68021.c: New test.
2016-02-10 Richard Biener <rguenther@suse.de> 2016-02-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/69726 PR tree-optimization/69726
......
/* { dg-do compile } */
/* { dg-options "-O3" } */
char a;
void fn1 (char *p1, int p2, int p3)
{
int i, x;
for (i = 0; i < 10; i++)
{
for (x = 0; x < p3; x++)
{
*p1 = a;
p1--;
}
p1 += p2;
}
}
...@@ -3741,7 +3741,19 @@ get_computation_aff (struct loop *loop, ...@@ -3741,7 +3741,19 @@ get_computation_aff (struct loop *loop,
var = fold_convert (uutype, var); var = fold_convert (uutype, var);
} }
if (!constant_multiple_of (ustep, cstep, &rat)) /* Ratio is 1 when computing the value of biv cand by itself.
We can't rely on constant_multiple_of in this case because the
use is created after the original biv is selected. The call
could fail because of inconsistent fold behavior. See PR68021
for more information. */
if (cand->pos == IP_ORIGINAL && cand->incremented_at == use->stmt)
{
gcc_assert (is_gimple_assign (use->stmt));
gcc_assert (use->iv->ssa_name == cand->var_after);
gcc_assert (gimple_assign_lhs (use->stmt) == cand->var_after);
rat = 1;
}
else if (!constant_multiple_of (ustep, cstep, &rat))
return false; return false;
/* In case both UBASE and CBASE are shortened to UUTYPE from some common /* In case both UBASE and CBASE are shortened to UUTYPE from some common
......
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