diff mbox

Fix PR54492

Message ID 1347298585.4740.13.camel@oc2474580526.ibm.com
State New
Headers show

Commit Message

Bill Schmidt Sept. 10, 2012, 5:36 p.m. UTC
Here's the revised patch with a param.  Bootstrapped and tested in the
same manner.  Ok for trunk?

Thanks,
Bill


2012-08-10  Bill Schmidt  <wschmidt@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.

Comments

Richard Biener Sept. 11, 2012, 8:19 a.m. UTC | #1
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  <wschmidt@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
> 
> 
>
diff mbox

Patch

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