S/390: Fix PR89952 incorrect CFI
authorAndreas Krebbel <krebbel@linux.ibm.com>
Wed, 24 Apr 2019 13:40:38 +0000 (13:40 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Wed, 24 Apr 2019 13:40:38 +0000 (13:40 +0000)
commit9fe1940081ab64552a1e9134efda54ecef94bb50
tree1bba624feb096678c8fff276eaf2ead17b6dac8a
parent972206e0c20a36d6b5a85e3842b52879330f5783
S/390: Fix PR89952 incorrect CFI

This patch fixes a cases where inconsistent CFI is generated.

After restoring the hard frame pointer (r11) from an FPR we have to
set the CFA register.  In order to be able to set it back to the stack
pointer (r15) we have to make sure that r15 has been restored already.

The patch also adds a scheduler dependency to prevent the instruction
scheduler from swapping the r11 and r15 restore again.

gcc/ChangeLog:

2019-04-24  Andreas Krebbel  <krebbel@linux.ibm.com>

PR target/89952
* config/s390/s390.c (s390_restore_gprs_from_fprs): Restore GPRs
     from FPRs in reverse order.  Generate REG_CFA_DEF_CFA note also
     for restored hard frame pointer.
(s390_sched_dependencies_evaluation): Implement new target hook.
(TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK): New macro definition.

gcc/testsuite/ChangeLog:

2019-04-24  Andreas Krebbel  <krebbel@linux.ibm.com>

PR target/89952
* gcc.target/s390/pr89952.c: New test.

From-SVN: r270544
gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/pr89952.c [new file with mode: 0644]