diff mbox

Add option ftree-stdarg-opt

Message ID 54E50190.4050409@mentor.com
State New
Headers show

Commit Message

Tom de Vries Feb. 18, 2015, 9:18 p.m. UTC
On 17-02-15 13:26, Richard Biener wrote:
> On Tue, Feb 17, 2015 at 1:12 PM, Tom de Vries <Tom_deVries@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
diff mbox

Patch

2015-02-18  Tom de Vries  <tom@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