diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2018-02-09 11:42:34 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2018-02-09 11:42:34 +0000 |
commit | c704706201e54b922001b86ecfd81df60772563f (patch) | |
tree | 6d08d7278be77a7692b7ea3ef83092285ecfc894 | |
parent | 0805a34d5f2a42052452ccc3ea45fde7975ff417 (diff) | |
download | gcc-c704706201e54b922001b86ecfd81df60772563f.zip gcc-c704706201e54b922001b86ecfd81df60772563f.tar.gz gcc-c704706201e54b922001b86ecfd81df60772563f.tar.bz2 |
S/390: Fix PR84295
gcc/ChangeLog:
2018-02-09 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/PR84295
* config/s390/s390.c (s390_set_current_function): Invoke
s390_indirect_branch_settings also if fndecl didn't change.
gcc/testsuite/ChangeLog:
2018-02-09 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/PR84295
* gcc.target/s390/pr84295.c: New test.
From-SVN: r257522
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/pr84295.c | 14 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc3d80c..7a01d21 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-02-09 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + + PR target/PR84295 + * config/s390/s390.c (s390_set_current_function): Invoke + s390_indirect_branch_settings also if fndecl didn't change. + 2018-02-09 Alexandre Oliva <aoliva@redhat.com> * config/rs6000/rs6000.md (blockage): Set length to zero. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 62a60e2..298fdd1 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -16135,7 +16135,10 @@ s390_set_current_function (tree fndecl) several times in the course of compiling a function, and we don't want to slow things down too much or call target_reinit when it isn't safe. */ if (fndecl == s390_previous_fndecl) - return; + { + s390_indirect_branch_settings (fndecl); + return; + } tree old_tree; if (s390_previous_fndecl == NULL_TREE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff8136e..25c8afc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-02-09 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + + PR target/PR84295 + * gcc.target/s390/pr84295.c: New test. + 2018-02-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/77522 diff --git a/gcc/testsuite/gcc.target/s390/pr84295.c b/gcc/testsuite/gcc.target/s390/pr84295.c new file mode 100644 index 0000000..4da43c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/pr84295.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=z900 -fgnu89-inline --save-temps -mfunction-return-reg=thunk -mindirect-branch-table" } */ + +extern void foo (void); +extern __inline void foo (void) {} +void foo (void) {} + +/* { dg-final { scan-assembler-times "jg\t__s390_indirect_jump" 1 } } */ +/* { dg-final { scan-assembler "ex\t" } } */ + +/* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */ +/* { dg-final { scan-assembler-not "section\t.s390_indirect_call" } } */ +/* { dg-final { scan-assembler "section\t.s390_return_reg" } } */ +/* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */ |