+2017-04-11 Bin Cheng <bin.cheng@arm.com>
+
+ Backport from mainline
+ 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.
+
2017-04-08 Andreas Tobler <andreast@gcc.gnu.org>
Backport from mainline
2017-04-07 Andreas Tobler <andreast@gcc.gnu.org>
Backport from mainline
- 2017-04-07 Andreas Tobler <andreast@gcc.gnu.org>
+ 2017-04-07 Andreas Tobler <andreast@gcc.gnu.org>
* config/aarch64/aarch64-freebsd.h: Define WCHAR_T.
+2017-04-11 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/80345
+ * gcc.c-torture/compile/pr80345.c
+
+ Backport from mainline
+ 2016-02-10 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/68021
+ * gcc.dg/tree-ssa/pr68021.c: New test.
+
2017-04-07 Uros Bizjak <ubizjak@gmail.com>
Backport from mainline
--- /dev/null
+/* PR tree-optimization/80345 */
+
+typedef long mp_limb_signed_t;
+void fn1(mp_limb_signed_t p1) {
+ int *a = (int *)1;
+ mp_limb_signed_t i, j;
+ i = 0;
+ for (; i < p1; i++) {
+ j = 0;
+ for (; j <= i; j++)
+ *a++ = 0;
+ j = i + 1;
+ for (; j < p1; j++)
+ a++;
+ }
+}
+void fn2() { fn1((mp_limb_signed_t)fn2); }
--- /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 (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