From 51bdb99d3164f3f9313f20bb88ce33ffdf86cf50 Mon Sep 17 00:00:00 2001 From: marxin Date: Fri, 9 Nov 2018 15:05:40 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/common.opt | 4 ++++ gcc/doc/invoke.texi | 7 ++++++- gcc/final.c | 3 ++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c | 13 +++++++++++++ 6 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a30303c99b..107dbcd9f77 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 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 to ... (ipa_discover_variable_flags): ... this. diff --git a/gcc/common.opt b/gcc/common.opt index cba516e7c6e..98e8eb03ef3 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 e510fefe64b..4ea93a7b5cb 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 6e61f1e17a8..0c1ac625f37 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 6dd28ffb7e8..0e257c3e6b0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 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. 2018-11-09 Jakub Jelinek 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 00000000000..1176b59aa5f --- /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" } } */ -- 2.11.4.GIT