From: marxin Date: Fri, 9 Nov 2018 15:05:40 +0000 (+0000) Subject: Come up with the flag -fipa-stack-alignment. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=51bdb99d3164f3f9313f20bb88ce33ffdf86cf50;p=thirdparty%2Fgcc.git Come up with the flag -fipa-stack-alignment. 2018-11-09 Martin Liska * common.opt: Add -fipa-stack-alignment flag. * doc/invoke.texi: Document it. * final.c (rest_of_clean_state): Guard stack shrinking with flag. 2018-11-09 Martin Liska * gcc.target/i386/ipa-stack-alignment.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265970 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a30303c99bf..107dbcd9f77f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-11-09 Martin Liska + + * common.opt: Add -fipa-stack-alignment flag. + * doc/invoke.texi: Document it. + * final.c (rest_of_clean_state): Guard stack + shrinking with flag. + 2018-11-09 Martin Liska * cgraph.h (ipa_discover_readonly_nonaddressable_vars): Rename diff --git a/gcc/common.opt b/gcc/common.opt index cba516e7c6e8..98e8eb03ef35 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1728,6 +1728,10 @@ fipa-reference-addressable Common Report Var(flag_ipa_reference_addressable) Init(0) Optimization Discover read-only, write-only and non-addressable static variables. +fipa-stack-alignment +Common Report Var(flag_ipa_stack_alignment) Init(1) Optimization +Reduce stack alignment on call sites if possible. + fipa-matrix-reorg Common Ignore Does nothing. Preserved for backward compatibility. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e510fefe64b1..4ea93a7b5cb5 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -414,7 +414,7 @@ Objective-C and Objective-C++ Dialects}. -finline-small-functions -fipa-cp -fipa-cp-clone @gol -fipa-bit-cp -fipa-vrp @gol -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-reference-addressable @gol --fipa-icf -fira-algorithm=@var{algorithm} @gol +-fipa-stack-alignment -fipa-icf -fira-algorithm=@var{algorithm} @gol -fira-region=@var{region} -fira-hoist-pressure @gol -fira-loop-pressure -fno-ira-share-save-slots @gol -fno-ira-share-spill-slots @gol @@ -8917,6 +8917,11 @@ Enabled by default at @option{-O} and higher. Discover read-only, write-only and non-addressable static variables. Enabled by default at @option{-O} and higher. +@item -fipa-stack-alignment +@opindex fipa-stack-alignment +Reduce stack alignment on call sites if possible. +Enabled by default. + @item -fipa-pta @opindex fipa-pta Perform interprocedural pointer analysis and interprocedural modification diff --git a/gcc/final.c b/gcc/final.c index 6e61f1e17a8e..0c1ac625f37a 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -4890,7 +4890,8 @@ rest_of_clean_state (void) /* We can reduce stack alignment on call site only when we are sure that the function body just produced will be actually used in the final executable. */ - if (decl_binds_to_current_def_p (current_function_decl)) + if (flag_ipa_stack_alignment + && decl_binds_to_current_def_p (current_function_decl)) { unsigned int pref = crtl->preferred_stack_boundary; if (crtl->stack_alignment_needed > crtl->preferred_stack_boundary) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6dd28ffb7e8d..0e257c3e6b0f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-11-09 Martin Liska + + * gcc.target/i386/ipa-stack-alignment.c: New test. + 2018-11-09 Martin Liska * gcc.dg/tree-ssa/writeonly-2.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c b/gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c new file mode 100644 index 000000000000..1176b59aa5f9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fno-ipa-stack-alignment -O" } */ + +typedef struct { + long a; + long b[]; +} c; + +c *d; +void e() { d->b[0] = 5; } +void f() { e(); } + +/* { dg-final { scan-assembler "sub.*%.sp" } } */