re PR tree-optimization/22348 (Execution continues past end of for loop end condition...
authorZdenek Dvorak <dvorakz@suse.cz>
Wed, 27 Jul 2005 14:04:17 +0000 (16:04 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Wed, 27 Jul 2005 14:04:17 +0000 (14:04 +0000)
PR tree-optimize/22348
* tree-ssa-loop-niter.c (number_of_iterations_cond):
Fold the partial computation.

* gcc.c-torture/execute/pr22348.c: New.

From-SVN: r102427

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr22348.c [new file with mode: 0644]
gcc/tree-ssa-loop-niter.c

index 13c7a178992a6b7b69b68b5dffe49bd8246b1ddf..c6e2ad5542214fefd84411cc23a03f6622b78215 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-27  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimize/22348
+       * tree-ssa-loop-niter.c (number_of_iterations_cond):
+       Fold the partial computation.
+
 2005-07-27  Zdenek Dvorak  <dvorakz@suse.cz>
 
        PR tree-optimization/22325
index 60889ca7a6fdbef79fdf648916f984e25a78f7b4..0e3760d3e1ae7f0b5e22f4fc4239ef0a999330f9 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-27  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimize/22348
+       * gcc.c-torture/execute/pr22348.c: New.
+
 2005-07-27  Richard Guenther  <rguenther@suse.de>
 
        * gcc.dg/tree-ssa/salias-1.c: New testcase.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr22348.c b/gcc/testsuite/gcc.c-torture/execute/pr22348.c
new file mode 100644 (file)
index 0000000..9192d51
--- /dev/null
@@ -0,0 +1,15 @@
+void abort (void);
+void f(int i)
+{
+  if (i>4 + 3 * 16)
+    abort();
+}
+
+int main()
+{
+  unsigned int buflen, i;
+  buflen = 4 + 3 * 16;
+  for (i = 4; i < buflen; i+= 3)
+    f(i);
+  return 0;
+}
index 891dc0c13d1fe34dddbc0e3a3bae707ab649ffe5..37cd4003d472f98c59606b5b060a52693a1825b7 100644 (file)
@@ -275,7 +275,7 @@ number_of_iterations_cond (tree type, tree base0, tree step0,
        step = fold_unary_to_constant (NEGATE_EXPR, type, step1);
       else
        step = step0;
-      delta = build2 (MINUS_EXPR, type, base1, base0);
+      delta = fold_build2 (MINUS_EXPR, type, base1, base0);
       delta = fold_build2 (FLOOR_MOD_EXPR, type, delta, step);
       may_xform = boolean_false_node;