aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-11-09 16:05:40 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-11-09 15:05:40 +0000
commit47b840eb39c3f0b3ddb01e81a359b9926b13cf44 (patch)
tree1153d06dcb763580bae79107afac2c1b0317586c /gcc
parent2e14744fcd7820033b91c9516e22eb42b02b5290 (diff)
downloadgcc-47b840eb39c3f0b3ddb01e81a359b9926b13cf44.zip
gcc-47b840eb39c3f0b3ddb01e81a359b9926b13cf44.tar.gz
gcc-47b840eb39c3f0b3ddb01e81a359b9926b13cf44.tar.bz2
Come up with the flag -fipa-stack-alignment.
2018-11-09 Martin Liska <mliska@suse.cz> * 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 <mliska@suse.cz> * gcc.target/i386/ipa-stack-alignment.c: New test. From-SVN: r265970
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/final.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/i386/ipa-stack-alignment.c13
6 files changed, 36 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6a30303..107dbcd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2018-11-09 Martin Liska <mliska@suse.cz>
+ * 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 <mliska@suse.cz>
+
* 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 cba516e..98e8eb0 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 e510fef..4ea93a7 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 6e61f1e..0c1ac62 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 6dd28ff..0e257c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2018-11-09 Martin Liska <mliska@suse.cz>
+ * gcc.target/i386/ipa-stack-alignment.c: New test.
+
+2018-11-09 Martin Liska <mliska@suse.cz>
+
* gcc.dg/tree-ssa/writeonly-2.c: New test.
2018-11-09 Jakub Jelinek <jakub@redhat.com>
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 0000000..1176b59
--- /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" } } */