On Thu, 3 Jan 2013, Richard Biener wrote: > > My earlier patch to avoid dead code generation for vectorized > invariant loops breaks re-align load targets as the setup is > still carried out for them. > > Fixed as follows, bootstrapped and tested on x86_64-unknown-linux-gnu > and with a ppc cross.
I have reverted this and the patch that caused the issue in the first place. Richard. > Committed. > > Richard. > > 2013-01-03 Richard Biener <rguent...@suse.de> > > PR tree-optimization/55857 > * tree-vect-stmts.c (vectorizable_load): Do not setup > re-alignment for invariant loads. > > * gcc.dg/vect/pr55857-1.c: New testcase. > * gcc.dg/vect/pr55857-2.c: Likewise. > > Index: gcc/tree-vect-stmts.c > =================================================================== > *** gcc/tree-vect-stmts.c (revision 194844) > --- gcc/tree-vect-stmts.c (working copy) > *************** vectorizable_load (gimple stmt, gimple_s > *** 4927,4933 **** > > if ((alignment_support_scheme == dr_explicit_realign_optimized > || alignment_support_scheme == dr_explicit_realign) > ! && !compute_in_loop) > { > msq = vect_setup_realignment (first_stmt, gsi, &realignment_token, > alignment_support_scheme, NULL_TREE, > --- 4927,4934 ---- > > if ((alignment_support_scheme == dr_explicit_realign_optimized > || alignment_support_scheme == dr_explicit_realign) > ! && !compute_in_loop > ! && !integer_zerop (DR_STEP (dr))) > { > msq = vect_setup_realignment (first_stmt, gsi, &realignment_token, > alignment_support_scheme, NULL_TREE, > Index: gcc/testsuite/gcc.dg/vect/pr55857-1.c > =================================================================== > *** gcc/testsuite/gcc.dg/vect/pr55857-1.c (revision 0) > --- gcc/testsuite/gcc.dg/vect/pr55857-1.c (working copy) > *************** > *** 0 **** > --- 1,17 ---- > + /* { dg-do compile } */ > + > + void > + foo (int *data, unsigned len, const int qlp_coeff[], int lp, int residual[]) > + { > + int i; > + int sum; > + for(i = 0; i < (int)len; i++) > + { > + sum = 0; > + sum += qlp_coeff[1] * data[i-2]; > + sum += qlp_coeff[0] * data[i-1]; > + residual[i] = data[i] - (sum >> lp); > + } > + } > + > + /* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/pr55857-2.c > =================================================================== > *** gcc/testsuite/gcc.dg/vect/pr55857-2.c (revision 0) > --- gcc/testsuite/gcc.dg/vect/pr55857-2.c (working copy) > *************** > *** 0 **** > --- 1,21 ---- > + /* { dg-do compile } */ > + > + void foo (int *data, unsigned len, const int qlp_coeff[], > + unsigned order, int lp, int residual[]) > + { > + int i; > + int sum; > + if(order == 2) > + for(i = 0; i < (int)len; i++) > + { > + sum = 0; > + sum += qlp_coeff[1] * data[i-2]; > + sum += qlp_coeff[0] * data[i-1]; > + residual[i] = data[i] - (sum >> lp); > + } > + else > + for(i = 0; i < (int)len; i++) > + residual[i] = data[i] - ((qlp_coeff[0] * data[i-1]) >> lp); > + } > + > + /* { dg-final { cleanup-tree-dump "vect" } } */ > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend