diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-12-10 16:42:05 +0000 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2015-12-10 16:42:05 +0000 |
commit | 6b55c738d4cfefca92cc1aa7f193b894f357a395 (patch) | |
tree | 634a665536323ee71b5bd049165866b892e1bffa | |
parent | 8efc0733ca316249a5e6a4bb12ec52f543ca8a8d (diff) |
Backport from mainline
2015-12-08 Uros Bizjak <ubizjak@gmail.com>
PR target/68701
* config/i386/i386.c (ix86_option_override_internal): Enable
-maccumulate-outgoing-args when %ebp is fixed due to stack
realignment requirements.
testsuite/ChangeLog:
Backport from mainline
2015-12-08 Uros Bizjak <ubizjak@gmail.com>
PR target/68701
* gcc.target/i386/pr68701-1.c: New test.
* gcc.target/i386/pr68701-2.c: Ditto.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@231528 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr68701-1.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr68701-2.c | 11 |
5 files changed, 54 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47c5f8ae747..586f0e155a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-12-10 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2015-12-08 Uros Bizjak <ubizjak@gmail.com> + + PR target/68701 + * config/i386/i386.c (ix86_option_override_internal): Enable + -maccumulate-outgoing-args when %ebp is fixed due to stack + realignment requirements. + 2015-12-10 Ilya Enkovich <enkovich.gnu@gmail.com> Backport from mainline r231224. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3b19caa413e..5988ccaa72a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4150,6 +4150,17 @@ ix86_option_override_internal (bool main_args_p, opts->x_target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; } + /* Stack realignment without -maccumulate-outgoing-args requires %ebp, + so enable -maccumulate-outgoing-args when %ebp is fixed. */ + if (fixed_regs[BP_REG] + && !(opts->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS)) + { + if (opts_set->x_target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) + warning (0, "fixed ebp register requires %saccumulate-outgoing-args%s", + prefix, suffix); + opts->x_target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; + } + /* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */ { char *p; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b4c2129fe9d..cf8f5c95683 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2015-12-10 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2015-12-08 Uros Bizjak <ubizjak@gmail.com> + + PR target/68701 + * gcc.target/i386/pr68701-1.c: New test. + * gcc.target/i386/pr68701-2.c: Ditto. + 2015-12-09 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/sse4_1-roundps-1.c: Remove ASM_SUFFIX define. diff --git a/gcc/testsuite/gcc.target/i386/pr68701-1.c b/gcc/testsuite/gcc.target/i386/pr68701-1.c new file mode 100644 index 00000000000..008eb6bddd2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr68701-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ffixed-ebp -mno-accumulate-outgoing-args" } */ + +/* { dg-warning "fixed ebp register requires" "" { target *-*-* } 0 } */ + +void foo (void); + +int +main (int argc, char *argv[]) +{ + foo (); + return argc - 1; +} diff --git a/gcc/testsuite/gcc.target/i386/pr68701-2.c b/gcc/testsuite/gcc.target/i386/pr68701-2.c new file mode 100644 index 00000000000..bfe592ec8ec --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr68701-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ffixed-ebp -mno-accumulate-outgoing-args -mstackrealign -msse" } */ + +/* { dg-warning "fixed ebp register requires" "" { target *-*-* } 0 } */ + +typedef float V __attribute__((vector_size(16))); + +void bar (V a) +{ + volatile V b = a; +} |