+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.
+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
--- /dev/null
+/* { 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;
+ }
+}
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