aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-niter.c
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2015-06-23 02:27:49 +0000
committerBin Cheng <amker@gcc.gnu.org>2015-06-23 02:27:49 +0000
commit109bd2e61facc408505321c37473c8033d7ab0c8 (patch)
treeffd2829402bdcf622586bb911cac06f9cc617479 /gcc/tree-ssa-loop-niter.c
parent350911e65183b142018003691fd8d2eee479e175 (diff)
downloadgcc-109bd2e61facc408505321c37473c8033d7ab0c8.zip
gcc-109bd2e61facc408505321c37473c8033d7ab0c8.tar.gz
gcc-109bd2e61facc408505321c37473c8033d7ab0c8.tar.bz2
re PR tree-optimization/66449 (ICE: in build2_stat, at tree.c:4376 with -O3)
PR tree-optimization/66449 * tree-ssa-loop-niter.c (loop_exits_before_overflow): Use POINTER_PLUS_EXPR for pointers. gcc/testsuite PR tree-optimization/66449 * gcc.dg/vect/pr66449.c: New test. From-SVN: r224769
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r--gcc/tree-ssa-loop-niter.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 213d72e..855d32c 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -3888,7 +3888,12 @@ loop_exits_before_overflow (tree base, tree step,
by proving the reverse conditions are false using loop's initial
condition. */
- stepped = fold_build2 (PLUS_EXPR, TREE_TYPE (base), base, step);
+ if (POINTER_TYPE_P (TREE_TYPE (base)))
+ code = POINTER_PLUS_EXPR;
+ else
+ code = PLUS_EXPR;
+
+ stepped = fold_build2 (code, TREE_TYPE (base), base, step);
if (operand_equal_p (stepped, civ->base, 0))
{
if (tree_int_cst_sign_bit (step))