Message ID | 54E3301C.8010504@mentor.com |
---|---|
State | New |
Headers | show |
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. Thanks, Richard. > Thanks, > - Tom
2015-02-17 Tom de Vries <tom@codesourcery.com> * common.opt (ftree-stdarg-opt): New option. * tree-stdarg.c (pass_stdarg::gate): Use flag_tree_stdarg_opt. --- gcc/common.opt | 4 ++++ gcc/tree-stdarg.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index 0c60e84..ed14b40 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2065,6 +2065,10 @@ fssa-phiopt Common Report Var(flag_ssa_phiopt) Optimization Optimize conditional patterns using SSA PHI nodes +ftree-stdarg-opt +Common Report Var(flag_tree_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/tree-stdarg.c b/gcc/tree-stdarg.c index 2cf0ca3..975ff97 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_tree_stdarg_opt + /* This optimization is only for stdarg functions. */ + && fun->stdarg != 0); } virtual unsigned int execute (function *); -- 1.9.1