On 17-02-15 13:26, Richard Biener wrote:
On Tue, Feb 17, 2015 at 1:12 PM, Tom de Vries <tom_devr...@mentor.com> wrote:
Hi,
this patch adds option ftree-stdarg-opt, which switches pass_stdarg on or
off.
Pass_stdarg does an optimization on cfun->va_list_gpr/fpr_size, and since
it's an optimization, it's useful to be able to switch it off in case of a
problem with the pass.
This is not a regression or documentation fix, so it doesn't classify as a
stage 4 patch. I could imagine it still being included in stage4 because it
adds the possibility for a workaround in case of problems.
Bootstrapped and reg-tested on x86_64.
OK for stage1 (or even stage 4)?
New options need to be documented in invoke.texi. I also wonder
if 'stdarg' is a term known to programmers. I'd rather document it
as
"Optimize the prologue of variadic argument functions with respect
to usage of those arguments"
And please omit 'tree' from the flag, thus -fstdarg-opt
Otherwise generally fine for stage4.
Updated patch accordingly, re-tested and committed as attached.
Thanks,
- Tom
2015-02-18 Tom de Vries <t...@codesourcery.com>
* common.opt (fstdarg-opt): New option.
* tree-stdarg.c (pass_stdarg::gate): Use flag_stdarg_opt.
* doc/invoke.texi (@item Optimization Options): Add -fstdarg-opt.
(@item -fstdarg-opt): New item.
---
gcc/common.opt | 4 ++++
gcc/doc/invoke.texi | 7 ++++++-
gcc/tree-stdarg.c | 5 +++--
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/gcc/common.opt b/gcc/common.opt
index e0d4a1d..4fa12f5 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2069,6 +2069,10 @@ fssa-phiopt
Common Report Var(flag_ssa_phiopt) Optimization
Optimize conditional patterns using SSA PHI nodes
+fstdarg-opt
+Common Report Var(flag_stdarg_opt) Init(1) Optimization
+Optimize amount of stdarg registers saved to stack at start of function
+
fvariable-expansion-in-unroller
Common Report Var(flag_variable_expansion_in_unroller) Optimization
Apply variable expansion when loops are unrolled
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 4a79b48..ef4cc75 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -430,7 +430,7 @@ Objective-C and Objective-C++ Dialects}.
-fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol
-fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt @gol
-fstack-protector -fstack-protector-all -fstack-protector-strong @gol
--fstack-protector-explicit -fstrict-aliasing @gol
+-fstack-protector-explicit -fstdarg-opt -fstrict-aliasing @gol
-fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol
-ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
-ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
@@ -9867,6 +9867,11 @@ references to local frame addresses.
Like @option{-fstack-protector} but only protects those functions which
have the @code{stack_protect} attribute
+@item -fstdarg-opt
+@opindex fstdarg-opt
+Optimize the prologue of variadic argument functions with respect to usage of
+those arguments.
+
@item -fsection-anchors
@opindex fsection-anchors
Try to reduce the number of symbolic address calculations by using
diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c
index 2cf0ca3..17d51a2 100644
--- a/gcc/tree-stdarg.c
+++ b/gcc/tree-stdarg.c
@@ -704,8 +704,9 @@ public:
/* opt_pass methods: */
virtual bool gate (function *fun)
{
- /* This optimization is only for stdarg functions. */
- return fun->stdarg != 0;
+ return (flag_stdarg_opt
+ /* This optimization is only for stdarg functions. */
+ && fun->stdarg != 0);
}
virtual unsigned int execute (function *);
--
1.9.1