summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/combine-stack-adj.c2
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi10
-rw-r--r--gcc/opts.c1
5 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bb7a98bcba1..d17bdd376ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
2010-10-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45854
diff --git a/gcc/combine-stack-adj.c b/gcc/combine-stack-adj.c
index 96bfb3a633e..0a7b53e250b 100644
--- a/gcc/combine-stack-adj.c
+++ b/gcc/combine-stack-adj.c
@@ -546,7 +546,7 @@ combine_stack_adjustments_for_block (basic_block bb)
static bool
gate_handle_stack_adjustments (void)
{
- return (optimize > 0);
+ return flag_combine_stack_adjustments;
}
static unsigned int
diff --git a/gcc/common.opt b/gcc/common.opt
index 938b76e0c15..44a3de85c6a 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -640,6 +640,10 @@ fcheck-data-deps
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
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index df39e167938..057ae7d3be8 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -334,7 +334,8 @@ Objective-C and Objective-C++ Dialects}.
-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 @@ those which have no call-preserved registers to use instead.
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
diff --git a/gcc/opts.c b/gcc/opts.c
index 2b2071ef594..88321b55a25 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -801,6 +801,7 @@ decode_options (unsigned int argc, const char **argv,
flag_tree_copy_prop = opt1;
flag_tree_sink = opt1;
flag_tree_ch = opt1;
+ flag_combine_stack_adjustments = opt1;
/* -O2 optimizations. */
opt2 = (optimize >= 2);