]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR bootstrap/66638
authoramker <amker@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Jun 2015 11:12:20 +0000 (11:12 +0000)
committeramker <amker@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Jun 2015 11:12:20 +0000 (11:12 +0000)
* tree-ssa-loop-niter.c (loop_exits_before_overflow): Skip if
assertion failed.  Remove assertion itself.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225008 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4398ee744f55a2fc22e3da34e9e8c33e5664fed5..862bfe2fdc7103d88bd506073171c990d3bdb506 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-26  Bin Cheng  <bin.cheng@arm.com>
+
+       PR bootstrap/66638
+       * tree-ssa-loop-niter.c (loop_exits_before_overflow): Skip if
+       assertion failed.  Remove assertion itself.
+
 2015-06-26  Richard Biener  <rguenther@suse.de>
 
        * fold-const.c (fold_binary_loc): Remove -A CMP -B -> A CMP B
index 855d32ceeb01dab8278ca37f55f67dcf92ec1451..c5adb1c2d823d8e16583c8b30ce29bbf45513f08 100644 (file)
@@ -3955,7 +3955,21 @@ loop_exits_before_overflow (tree base, tree step,
        if (!CONVERT_EXPR_P (e) || !operand_equal_p (e, unsigned_base, 0))
          continue;
        e = TREE_OPERAND (e, 0);
-       gcc_assert (operand_equal_p (e, base, 0));
+       /* It may still be possible to prove no overflow even if condition
+          "operand_equal_p (e, base, 0)" isn't satisfied here, like below
+          example:
+
+            e             : ssa_var                 ; unsigned long type
+            base          : (int) ssa_var
+            unsigned_base : (unsigned int) ssa_var
+
+          Unfortunately this is a rare case observed during GCC profiled
+          bootstrap.  See PR66638 for more information.
+
+          For now, we just skip the possibility.  */
+       if (!operand_equal_p (e, base, 0))
+         continue;
+
        if (tree_int_cst_sign_bit (step))
          {
            code = LT_EXPR;