And the patch... Thanks, bin
> -----Original Message----- > From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches- > ow...@gcc.gnu.org] On Behalf Of Bin Cheng > Sent: Thursday, June 18, 2015 6:13 PM > To: gcc-patches@gcc.gnu.org > Subject: [PATCH PR66449]Fix ICE by using POINTER_PLUS_EXPR for pointers. > > Hi, > This patch fixes ICE in PR66449 by using POINTER_PLUS_EXPR for pointers. > Bootstrap and test on x86_64. Is it OK trunk? > > Thanks, > bin > > 2015-06-18 Bin Cheng <bin.ch...@arm.com> > > PR tree-optimization/66449 > * tree-ssa-loop-niter.c (loop_exits_before_overflow): Use > POINTER_PLUS_EXPR for pointers. > > gcc/testsuite/ChangeLog > 2015-06-18 Bin Cheng <bin.ch...@arm.com> > > PR tree-optimization/66449 > * gcc.dg/vect/pr66449.c: New. >
Index: gcc/testsuite/gcc.dg/tree-ssa/pr66449.c =================================================================== --- gcc/testsuite/gcc.dg/tree-ssa/pr66449.c (revision 0) +++ gcc/testsuite/gcc.dg/tree-ssa/pr66449.c (revision 0) @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +void *fn1(void *p1, void *p2, long p3) +{ + long a = (long)p1, b = (long)p2, c = p3; + + while (c) + { + int d = ((int *)b)[0]; + + c--; + ((char *)a)[0] = d; + a++; + } + return 0; +} + Index: gcc/tree-ssa-loop-niter.c =================================================================== --- gcc/tree-ssa-loop-niter.c (revision 224020) +++ gcc/tree-ssa-loop-niter.c (working copy) @@ -3902,7 +3902,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))