From: Bill Schmidt Date: Tue, 11 Sep 2012 12:23:25 +0000 (+0000) Subject: re PR middle-end/55492 (__atomic_load doesn't match ACQUIRE memory model) X-Git-Tag: misc/gccgo-go1_1_2~940 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ccdbfe9398e4c225706599e6b291f4cf0e616df8;p=thirdparty%2Fgcc.git re PR middle-end/55492 (__atomic_load doesn't match ACQUIRE memory model) 2012-09-11 Bill Schmidt PR tree-optimization/55492 * 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. From-SVN: r191178 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 77f65bd62c18..c4b237c284b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-09-11 Bill Schmidt + + PR tree-optimization/55492 + * 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. + 2012-09-11 Richard Guenther * gimple.h (gimple_register_type): Remove. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 994e4db5fbfb..1a854b06a676 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -9407,6 +9407,11 @@ having a regular register file and accurate register pressure classes. 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 diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index 0e770a949bf4..87684b305436 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -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; diff --git a/gcc/params.def b/gcc/params.def index c7f27fe9d996..a4c930b9e3cc 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -979,6 +979,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