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
This commit is contained in:
parent
00a8574af2
commit
13b562c502
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
* config/aarch64/aarch64.c (cortexa53_tunings): Enable AES fusion.
|
||||
|
@ -1,3 +1,8 @@
|
||||
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>
|
||||
|
||||
PR tree-optimization/69726
|
||||
|
17
gcc/testsuite/gcc.dg/tree-ssa/pr68021.c
Normal file
17
gcc/testsuite/gcc.dg/tree-ssa/pr68021.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { 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,
|
||||
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;
|
||||
|
||||
/* In case both UBASE and CBASE are shortened to UUTYPE from some common
|
||||
|
Loading…
Reference in New Issue
Block a user