This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RFA; Add option to control combine-stack-adjustments pass


Hi Guys,

  I recently ran into a problem with GCC's combine stack adjustment
  pass.  (It is breaking the relationship between CC0-setter and
  CC0-user).  I have not tracked down the exact cause of this problem
  yet, but I did find it odd that there was no way to control the use of
  the optimization from the command line.  So I have created the patch
  below.

  This patch adds a new command line option:

    -fcombine-stack-adjustments

  which is enabled by default at -O1 and greater and which controls the
  operation of the combine stack adjustments pass.

  Tested without regressions on an i686-pc-linux-gnu target.

  OK to apply ?

Cheers
  Nick

gcc/ChangeLog
2010-10-01  Nick Clifton  <nickc@redhat.com>

	* common.opt: Add -fcombine-stack-adjustments.
	* opts.c (decode_options): Enable -fcombine-stack-adjustments at
	-O1.
        * combine-stack-adj.c (gate_handle_stack_adjustments): Check
	* flag_combine_stack_adjustments.
	* doc.invoke.texi: Document the new option.

Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 164830)
+++ gcc/doc/invoke.texi	(working copy)
@@ -334,7 +334,8 @@
 -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
--fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol
+-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol
+-fcprop-registers -fcrossjumping @gol
 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
 -fcx-limited-range @gol
 -fdata-sections -fdce -fdce @gol
@@ -6618,6 +6619,13 @@
 
 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
 
+@item -fcombine-stack-adjustments
+@opindex fcombine-stack-adjustments
+Tracks stack adjustments (pushes and pops) and stack memory references
+and then tries to find ways to combine them.
+
+Enabled by default at @option{-O1} and higher.
+
 @item -fconserve-stack
 @opindex fconserve-stack
 Attempt to minimize stack usage.  The compiler will attempt to use less
Index: gcc/opts.c
===================================================================
--- gcc/opts.c	(revision 164830)
+++ gcc/opts.c	(working copy)
@@ -801,6 +801,7 @@
   flag_tree_copy_prop = opt1;
   flag_tree_sink = opt1;
   flag_tree_ch = opt1;
+  flag_combine_stack_adjustments = opt1;
 
   /* -O2 optimizations.  */
   opt2 = (optimize >= 2);
Index: gcc/common.opt
===================================================================
--- gcc/common.opt	(revision 164830)
+++ gcc/common.opt	(working copy)
@@ -640,6 +640,10 @@
 Common Report Var(flag_check_data_deps)
 Compare the results of several data dependence analyzers.
 
+fcombine-stack-adjustments
+Common Report Var(flag_combine_stack_adjustments) Optimization
+Looks for opportunities to reduce stack adjustments and stack references.
+
 fcommon
 Common Report Var(flag_no_common,0) Optimization
 Do not put uninitialized globals in the common section
Index: gcc/combine-stack-adj.c
===================================================================
--- gcc/combine-stack-adj.c	(revision 164830)
+++ gcc/combine-stack-adj.c	(working copy)
@@ -546,7 +546,7 @@
 static bool
 gate_handle_stack_adjustments (void)
 {
-  return (optimize > 0);
+  return flag_combine_stack_adjustments;
 }
 
 static unsigned int


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]