From ccdbfe9398e4c225706599e6b291f4cf0e616df8 Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Tue, 11 Sep 2012 12:23:25 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/doc/invoke.texi | 5 +++++ gcc/gimple-ssa-strength-reduction.c | 7 ++++++- gcc/params.def | 7 +++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 77f65bd62c1..c4b237c284b 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 994e4db5fbf..1a854b06a67 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 0e770a949bf..87684b30543 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 c7f27fe9d99..a4c930b9e3c 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 -- 2.30.2