On Mon, 10 Sep 2012, William J. Schmidt wrote: > Here's the revised patch with a param. Bootstrapped and tested in the > same manner. Ok for trunk?
Ok. Thanks, Richard. > Thanks, > Bill > > > 2012-08-10 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > * doc/invoke.texi (max-slsr-cand-scan): New description. > * gimple-ssa-strength-reduction.c (find_basis_for_candidate): Limit > the time spent searching for a basis. > * params.def (PARAM_MAX_SLSR_CANDIDATE_SCAN): New param. > > > Index: gcc/doc/invoke.texi > =================================================================== > --- gcc/doc/invoke.texi (revision 191135) > +++ gcc/doc/invoke.texi (working copy) > @@ -9407,6 +9407,11 @@ having a regular register file and accurate regist > See @file{haifa-sched.c} in the GCC sources for more details. > > The default choice depends on the target. > + > +@item max-slsr-cand-scan > +Set the maximum number of existing candidates that will be considered when > +seeking a basis for a new straight-line strength reduction candidate. > + > @end table > @end table > > Index: gcc/gimple-ssa-strength-reduction.c > =================================================================== > --- gcc/gimple-ssa-strength-reduction.c (revision 191135) > +++ gcc/gimple-ssa-strength-reduction.c (working copy) > @@ -54,6 +54,7 @@ along with GCC; see the file COPYING3. If not see > #include "domwalk.h" > #include "pointer-set.h" > #include "expmed.h" > +#include "params.h" > > /* Information about a strength reduction candidate. Each statement > in the candidate table represents an expression of one of the > @@ -353,10 +354,14 @@ find_basis_for_candidate (slsr_cand_t c) > cand_chain_t chain; > slsr_cand_t basis = NULL; > > + // Limit potential of N^2 behavior for long candidate chains. > + int iters = 0; > + int max_iters = PARAM_VALUE (PARAM_MAX_SLSR_CANDIDATE_SCAN); > + > mapping_key.base_expr = c->base_expr; > chain = (cand_chain_t) htab_find (base_cand_map, &mapping_key); > > - for (; chain; chain = chain->next) > + for (; chain && iters < max_iters; chain = chain->next, ++iters) > { > slsr_cand_t one_basis = chain->cand; > > Index: gcc/params.def > =================================================================== > --- gcc/params.def (revision 191135) > +++ gcc/params.def (working copy) > @@ -973,6 +973,13 @@ DEFPARAM (PARAM_SCHED_PRESSURE_ALGORITHM, > "Which -fsched-pressure algorithm to apply", > 1, 1, 2) > > +/* Maximum length of candidate scans in straight-line strength reduction. */ > +DEFPARAM (PARAM_MAX_SLSR_CANDIDATE_SCAN, > + "max-slsr-cand-scan", > + "Maximum length of candidate scans for straight-line " > + "strength reduction", > + 50, 1, 999999) > + > /* > Local variables: > mode:c > > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend