On Mon, 24 Sep 2012, William J. Schmidt wrote: > In cases where pointers and ints are cast back and forth, SLSR can be > tricked into introducing a multiply where one of the operands is of > pointer type. Don't do that! > > Verified that the reduced test case in the PR is fixed with a > cross-compile to sh4-unknown-linux-gnu with -Os, which is the only known > situation where the replacement looks profitable. (It appears multiply > costs are underestimated.) > > Bootstrapped and tested on powerpc64-unknown-linux-gnu with no new > regressions. Ok for trunk?
Ok. Btw, a multiply by/of a pointer in GIMPLE is done by casting to an appropriate unsigned type, doing the multiply, and then casting back to the pointer type. Just in case it _is_ profitable to do the transform (the patch seems to try to avoid the situation only?) Thanks, Richard. > Thanks, > Bill > > > 2012-09-24 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > * gimple-ssa-strength-reduction.c (analyze_increments): Don't > introduce a multiplication with a pointer operand. > > > Index: gcc/gimple-ssa-strength-reduction.c > =================================================================== > --- gcc/gimple-ssa-strength-reduction.c (revision 191665) > +++ gcc/gimple-ssa-strength-reduction.c (working copy) > @@ -2028,6 +2028,15 @@ analyze_increments (slsr_cand_t first_dep, enum ma > > incr_vec[i].cost = COST_INFINITE; > > + /* If we need to add an initializer, make sure we don't introduce > + a multiply by a pointer type, which can happen in certain cast > + scenarios. */ > + else if (!incr_vec[i].initializer > + && TREE_CODE (first_dep->stride) != INTEGER_CST > + && POINTER_TYPE_P (TREE_TYPE (first_dep->stride))) > + > + incr_vec[i].cost = COST_INFINITE; > + > /* For any other increment, if this is a multiply candidate, we > must introduce a temporary T and initialize it with > T_0 = stride * increment. When optimizing for speed, walk the > > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend