re PR middle-end/23410 (FAIL: gcc.c-torture/execute/950612-1.c execution, at -Os...
authorSebastian Pop <pop@cri.ensmp.fr>
Thu, 1 Sep 2005 15:09:41 +0000 (17:09 +0200)
committerSebastian Pop <spop@gcc.gnu.org>
Thu, 1 Sep 2005 15:09:41 +0000 (15:09 +0000)
PR tree-optimization/23410
* tree-ssa-loop-niter.c (scev_probably_wraps_p): Check that the
sequence is not wrapping during the first step.

From-SVN: r103733

gcc/ChangeLog
gcc/tree-ssa-loop-niter.c

index 65e2a67b01e05b8f94b586c37f4852aaf5de50d1..4f7c45e3d2d1ca7fc1d81c16fde0b7aa9e5d7fd4 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-01  Sebastian Pop  <pop@cri.ensmp.fr>
+
+       PR tree-optimization/23410
+       * tree-ssa-loop-niter.c (scev_probably_wraps_p): Check that the
+       sequence is not wrapping during the first step.
+
 2005-09-01  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/7241
index 5ecdaebd08e3119491fcaefe1c4cb507cb65ffcd..3ee27f4d5cc4840574ad49f696e5b1ec2d390d85 100644 (file)
@@ -1823,7 +1823,8 @@ scev_probably_wraps_p (tree type, tree base, tree step,
   struct nb_iter_bound *bound;
   tree delta, step_abs;
   tree unsigned_type, valid_niter;
-  tree base_plus_step;
+  tree base_plus_step, bpsps;
+  int cps, cpsps;
 
   /* FIXME: The following code will not be used anymore once
      http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02025.html is
@@ -1865,7 +1866,17 @@ scev_probably_wraps_p (tree type, tree base, tree step,
 
   *unknown_max = false;
   base_plus_step = fold_build2 (PLUS_EXPR, type, base, step);
-  switch (compare_trees (base_plus_step, base))
+  bpsps = fold_build2 (PLUS_EXPR, type, base_plus_step, step);
+  cps = compare_trees (base_plus_step, base);
+  cpsps = compare_trees (bpsps, base_plus_step);
+
+  /* Check that the sequence is not wrapping in the first step: it
+     should have the same monotonicity for the first two steps.  See
+     PR23410.  */
+  if (cps != cpsps)
+    return true;
+
+  switch (cps)
     {
     case -1:
       {