+2005-05-13 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR rtl-optimization/27335
+ * loop-unroll.c (peel_loops_completely): Use loops->parray to walk the
+ loops.
+
2005-05-13 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/27003
static void
peel_loops_completely (struct loops *loops, int flags)
{
- struct loop *loop, *next;
-
- loop = loops->tree_root;
- while (loop->inner)
- loop = loop->inner;
+ struct loop *loop;
+ unsigned i;
- while (loop != loops->tree_root)
+ /* Scan the loops, the inner ones first. */
+ for (i = loops->num - 1; i > 0; i--)
{
- if (loop->next)
- {
- next = loop->next;
- while (next->inner)
- next = next->inner;
- }
- else
- next = loop->outer;
+ loop = loops->parray[i];
+ if (!loop)
+ continue;
loop->lpt_decision.decision = LPT_NONE;
verify_loop_structure (loops);
#endif
}
- loop = next;
}
}
+2005-05-13 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR rtl-optimization/27335
+ * gcc.dg/pr27335.c: New test.
+
2005-05-13 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/27003
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -funroll-loops" } */
+
+extern void bar () __attribute__ ((noreturn));
+
+inline double
+baz (double *x, unsigned int y)
+{
+ if (y >= 6)
+ bar ();
+ return x[y];
+}
+
+double *a, *b;
+
+void
+foo ()
+{
+ unsigned int r, s, t;
+
+ for (r = 0; r < 2; r++)
+ for (t = 0; t < 2; t++)
+ {
+ for (s = 0; s < 3; s++)
+ b[r * 2 + t] += baz (a, 3 * s + t);
+ }
+}