Patchwork Add flag to control straight-line strength reduction

login
register
mail settings
Submitter William J. Schmidt
Date July 18, 2012, 1:59 p.m.
Message ID <1342619966.4590.11.camel@oc2474580526.ibm.com>
Download mbox | patch
Permalink /patch/171681/
State New
Headers show

Comments

William J. Schmidt - July 18, 2012, 1:59 p.m.
Here's the patch with documentation changes included.  I also cleaned up
missing work from a couple of my previous patches, so
-fhoist-adjacent-loads is documented now, and -fvect-cost-model is added
to the list of options on by default at -O3.

Ok for trunk?

Thanks,
Bill


2012-07-18  Bill Schmidt  <wschmidt@linux.ibm.com>

	* doc/invoke.texi: Add -fhoist-adjacent-loads and -ftree-slsr to list
	of flags controlling optimization; add -ftree-slsr to list of flags
	enabled by default at -O; add -fhoist-adjacent-loads to list of flags
	enabled by default at -O2; add -fvect-cost-model to list of flags
	enabled by default at -O3; document -fhoist-adjacent-loads and
	-ftree-slsr.
	* opts.c (default_option): Make -ftree-slsr default at -O1 and above.
	* gimple-ssa-strength-reduction.c (gate_strength_reduction): Use
	flag_tree_slsr.
	* common.opt: Add -ftree-slsr with flag_tree_slsr.
Richard Guenther - July 18, 2012, 2:35 p.m.
On Wed, 18 Jul 2012, William J. Schmidt wrote:

> Here's the patch with documentation changes included.  I also cleaned up
> missing work from a couple of my previous patches, so
> -fhoist-adjacent-loads is documented now, and -fvect-cost-model is added
> to the list of options on by default at -O3.
> 
> Ok for trunk?

Ok if it bootstraps / tests ok.

Thanks,
Richard.

> Thanks,
> Bill
> 
> 
> 2012-07-18  Bill Schmidt  <wschmidt@linux.ibm.com>
> 
> 	* doc/invoke.texi: Add -fhoist-adjacent-loads and -ftree-slsr to list
> 	of flags controlling optimization; add -ftree-slsr to list of flags
> 	enabled by default at -O; add -fhoist-adjacent-loads to list of flags
> 	enabled by default at -O2; add -fvect-cost-model to list of flags
> 	enabled by default at -O3; document -fhoist-adjacent-loads and
> 	-ftree-slsr.
> 	* opts.c (default_option): Make -ftree-slsr default at -O1 and above.
> 	* gimple-ssa-strength-reduction.c (gate_strength_reduction): Use
> 	flag_tree_slsr.
> 	* common.opt: Add -ftree-slsr with flag_tree_slsr.
> 
> 
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi	(revision 189574)
> +++ gcc/doc/invoke.texi	(working copy)
> @@ -364,7 +364,8 @@ Objective-C and Objective-C++ Dialects}.
>  -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
>  -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
>  -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
> --fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
> +-fgcse-sm -fhoist-adjacent-loads -fif-conversion @gol
> +-fif-conversion2 -findirect-inlining @gol
>  -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
>  -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg @gol
>  -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol
> @@ -413,8 +414,8 @@ Objective-C and Objective-C++ Dialects}.
>  -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
>  -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
>  -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
> --ftree-reassoc @gol
> --ftree-sink -ftree-sra -ftree-switch-conversion -ftree-tail-merge @gol
> +-ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
> +-ftree-switch-conversion -ftree-tail-merge @gol
>  -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
>  -funit-at-a-time -funroll-all-loops -funroll-loops @gol
>  -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
> @@ -6259,6 +6260,7 @@ compilation time.
>  -ftree-forwprop @gol
>  -ftree-fre @gol
>  -ftree-phiprop @gol
> +-ftree-slsr @gol
>  -ftree-sra @gol
>  -ftree-pta @gol
>  -ftree-ter @gol
> @@ -6286,6 +6288,7 @@ also turns on the following optimization flags:
>  -fdevirtualize @gol
>  -fexpensive-optimizations @gol
>  -fgcse  -fgcse-lm  @gol
> +-fhoist-adjacent-loads @gol
>  -finline-small-functions @gol
>  -findirect-inlining @gol
>  -fipa-sra @gol
> @@ -6311,6 +6314,7 @@ Optimize yet more.  @option{-O3} turns on all opti
>  by @option{-O2} and also turns on the @option{-finline-functions},
>  @option{-funswitch-loops}, @option{-fpredictive-commoning},
>  @option{-fgcse-after-reload}, @option{-ftree-vectorize},
> +@option{-fvect-cost-model},
>  @option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
>  
>  @item -O0
> @@ -7129,6 +7133,13 @@ This flag is enabled by default at @option{-O} and
>  Perform hoisting of loads from conditional pointers on trees.  This
>  pass is enabled by default at @option{-O} and higher.
>  
> +@item -fhoist-adjacent-loads
> +@opindex hoist-adjacent-loads
> +Speculatively hoist loads from both branches of an if-then-else if the
> +loads are from adjacent locations in the same structure and the target
> +architecture has a conditional move instruction.  This flag is enabled
> +by default at @option{-O2} and higher.
> +
>  @item -ftree-copy-prop
>  @opindex ftree-copy-prop
>  Perform copy propagation on trees.  This pass eliminates unnecessary
> @@ -7529,6 +7540,13 @@ defining expression.  This results in non-GIMPLE c
>  much more complex trees to work on resulting in better RTL generation.  This is
>  enabled by default at @option{-O} and higher.
>  
> +@item -ftree-slsr
> +@opindex ftree-slsr
> +Perform straight-line strength reduction on trees.  This recognizes related
> +expressions involving multiplications and replaces them by less expensive
> +calculations when possible.  This is enabled by default at @option{-O} and
> +higher.
> +
>  @item -ftree-vectorize
>  @opindex ftree-vectorize
>  Perform loop vectorization on trees. This flag is enabled by default at
> @@ -7550,7 +7568,8 @@ except at level @option{-Os} where it is disabled.
>  
>  @item -fvect-cost-model
>  @opindex fvect-cost-model
> -Enable cost model for vectorization.
> +Enable cost model for vectorization.  This option is enabled by default at
> +@option{-O3}.
>  
>  @item -ftree-vrp
>  @opindex ftree-vrp
> Index: gcc/opts.c
> ===================================================================
> --- gcc/opts.c	(revision 189574)
> +++ gcc/opts.c	(working copy)
> @@ -452,6 +452,7 @@ static const struct default_options default_option
>      { OPT_LEVELS_1_PLUS, OPT_ftree_ch, NULL, 1 },
>      { OPT_LEVELS_1_PLUS, OPT_fcombine_stack_adjustments, NULL, 1 },
>      { OPT_LEVELS_1_PLUS, OPT_fcompare_elim, NULL, 1 },
> +    { OPT_LEVELS_1_PLUS, OPT_ftree_slsr, NULL, 1 },
>  
>      /* -O2 optimizations.  */
>      { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 },
> Index: gcc/gimple-ssa-strength-reduction.c
> ===================================================================
> --- gcc/gimple-ssa-strength-reduction.c	(revision 189574)
> +++ gcc/gimple-ssa-strength-reduction.c	(working copy)
> @@ -1501,7 +1501,7 @@ execute_strength_reduction (void)
>  static bool
>  gate_strength_reduction (void)
>  {
> -  return optimize > 0;
> +  return flag_tree_slsr;
>  }
>  
>  struct gimple_opt_pass pass_strength_reduction =
> Index: gcc/common.opt
> ===================================================================
> --- gcc/common.opt	(revision 189574)
> +++ gcc/common.opt	(working copy)
> @@ -2080,6 +2080,10 @@ ftree-sink
>  Common Report Var(flag_tree_sink) Optimization
>  Enable SSA code sinking on trees
>  
> +ftree-slsr
> +Common Report Var(flag_tree_slsr) Optimization
> +Perform straight-line strength reduction
> +
>  ftree-sra
>  Common Report Var(flag_tree_sra) Optimization
>  Perform scalar replacement of aggregates
> 
> 
>

Patch

Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 189574)
+++ gcc/doc/invoke.texi	(working copy)
@@ -364,7 +364,8 @@  Objective-C and Objective-C++ Dialects}.
 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
 -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
--fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
+-fgcse-sm -fhoist-adjacent-loads -fif-conversion @gol
+-fif-conversion2 -findirect-inlining @gol
 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg @gol
 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol
@@ -413,8 +414,8 @@  Objective-C and Objective-C++ Dialects}.
 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
--ftree-reassoc @gol
--ftree-sink -ftree-sra -ftree-switch-conversion -ftree-tail-merge @gol
+-ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol
+-ftree-switch-conversion -ftree-tail-merge @gol
 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
@@ -6259,6 +6260,7 @@  compilation time.
 -ftree-forwprop @gol
 -ftree-fre @gol
 -ftree-phiprop @gol
+-ftree-slsr @gol
 -ftree-sra @gol
 -ftree-pta @gol
 -ftree-ter @gol
@@ -6286,6 +6288,7 @@  also turns on the following optimization flags:
 -fdevirtualize @gol
 -fexpensive-optimizations @gol
 -fgcse  -fgcse-lm  @gol
+-fhoist-adjacent-loads @gol
 -finline-small-functions @gol
 -findirect-inlining @gol
 -fipa-sra @gol
@@ -6311,6 +6314,7 @@  Optimize yet more.  @option{-O3} turns on all opti
 by @option{-O2} and also turns on the @option{-finline-functions},
 @option{-funswitch-loops}, @option{-fpredictive-commoning},
 @option{-fgcse-after-reload}, @option{-ftree-vectorize},
+@option{-fvect-cost-model},
 @option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
 
 @item -O0
@@ -7129,6 +7133,13 @@  This flag is enabled by default at @option{-O} and
 Perform hoisting of loads from conditional pointers on trees.  This
 pass is enabled by default at @option{-O} and higher.
 
+@item -fhoist-adjacent-loads
+@opindex hoist-adjacent-loads
+Speculatively hoist loads from both branches of an if-then-else if the
+loads are from adjacent locations in the same structure and the target
+architecture has a conditional move instruction.  This flag is enabled
+by default at @option{-O2} and higher.
+
 @item -ftree-copy-prop
 @opindex ftree-copy-prop
 Perform copy propagation on trees.  This pass eliminates unnecessary
@@ -7529,6 +7540,13 @@  defining expression.  This results in non-GIMPLE c
 much more complex trees to work on resulting in better RTL generation.  This is
 enabled by default at @option{-O} and higher.
 
+@item -ftree-slsr
+@opindex ftree-slsr
+Perform straight-line strength reduction on trees.  This recognizes related
+expressions involving multiplications and replaces them by less expensive
+calculations when possible.  This is enabled by default at @option{-O} and
+higher.
+
 @item -ftree-vectorize
 @opindex ftree-vectorize
 Perform loop vectorization on trees. This flag is enabled by default at
@@ -7550,7 +7568,8 @@  except at level @option{-Os} where it is disabled.
 
 @item -fvect-cost-model
 @opindex fvect-cost-model
-Enable cost model for vectorization.
+Enable cost model for vectorization.  This option is enabled by default at
+@option{-O3}.
 
 @item -ftree-vrp
 @opindex ftree-vrp
Index: gcc/opts.c
===================================================================
--- gcc/opts.c	(revision 189574)
+++ gcc/opts.c	(working copy)
@@ -452,6 +452,7 @@  static const struct default_options default_option
     { OPT_LEVELS_1_PLUS, OPT_ftree_ch, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fcombine_stack_adjustments, NULL, 1 },
     { OPT_LEVELS_1_PLUS, OPT_fcompare_elim, NULL, 1 },
+    { OPT_LEVELS_1_PLUS, OPT_ftree_slsr, NULL, 1 },
 
     /* -O2 optimizations.  */
     { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 },
Index: gcc/gimple-ssa-strength-reduction.c
===================================================================
--- gcc/gimple-ssa-strength-reduction.c	(revision 189574)
+++ gcc/gimple-ssa-strength-reduction.c	(working copy)
@@ -1501,7 +1501,7 @@  execute_strength_reduction (void)
 static bool
 gate_strength_reduction (void)
 {
-  return optimize > 0;
+  return flag_tree_slsr;
 }
 
 struct gimple_opt_pass pass_strength_reduction =
Index: gcc/common.opt
===================================================================
--- gcc/common.opt	(revision 189574)
+++ gcc/common.opt	(working copy)
@@ -2080,6 +2080,10 @@  ftree-sink
 Common Report Var(flag_tree_sink) Optimization
 Enable SSA code sinking on trees
 
+ftree-slsr
+Common Report Var(flag_tree_slsr) Optimization
+Perform straight-line strength reduction
+
 ftree-sra
 Common Report Var(flag_tree_sra) Optimization
 Perform scalar replacement of aggregates