diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-12-08 19:41:21 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2015-12-08 19:41:21 +0100 |
commit | 9e5d0977ff4183b9cd21eefbfd8a27f692dc9a0a (patch) | |
tree | dd0a6e0ded986ab0c2132e73509d1fd080f58b48 | |
parent | 0b8d93e55fb1a43538bcdfa81af1d7fd58617bd3 (diff) | |
download | gcc-9e5d0977ff4183b9cd21eefbfd8a27f692dc9a0a.zip gcc-9e5d0977ff4183b9cd21eefbfd8a27f692dc9a0a.tar.gz gcc-9e5d0977ff4183b9cd21eefbfd8a27f692dc9a0a.tar.bz2 |
re PR target/68701 ("gcc -m32 -finstrument-functions -ffixed-ebp" produces internal compiler error)
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:
PR target/68701
* testsuite/gcc.target/i386/pr68701-1.c: New test.
* testsuite/gcc.target/i386/pr68701-2.c: Ditto.
From-SVN: r231419
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-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, 48 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94331ed..ed8dd11 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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-08 Tom de Vries <tom@codesourcery.com> PR tree-optimization/68640 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e423b3c..d30fbff 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5296,6 +5296,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 80f85c8..55aa177 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2015-12-08 Uros Bizjak <ubizjak@gmail.com> + PR target/68701 + * testsuite/gcc.target/i386/pr68701-1.c: New test. + * testsuite/gcc.target/i386/pr68701-2.c: Ditto. + +2015-12-08 Uros Bizjak <ubizjak@gmail.com> + * gcc.target/i386/sse4_1-round.h (do_round): Fix inline asm statements. * gcc.target/i386/sse4_1-roundsd-4.c (do_round): Ditto. * gcc.target/i386/sse4_1-roundss-4.c (do_round): Ditto. 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 0000000..008eb6b --- /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 0000000..bfe592e --- /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; +} |