S/390: Fix conditional returns on z196+
authorIlya Leoshkevich <iii@linux.ibm.com>
Mon, 24 Sep 2018 14:21:03 +0000 (14:21 +0000)
committerIlya Leoshkevich <iii@gcc.gnu.org>
Mon, 24 Sep 2018 14:21:03 +0000 (14:21 +0000)
commitf80316c5d79c3c12a4e97160fcf17d78c5b99fc4
tree11ffbecfac733e0290e4bb15c7e73e4330059707
parente595522aa89d0cd427d5251456ff7cf347319a9c
S/390: Fix conditional returns on z196+

S/390 epilogue ends with (parallel [(return) (use %r14)]) instead of
the more usual (return) or (simple_return).  This sequence is not
recognized by the conditional return logic in try_optimize_cfg ().

This was introduced for processors older than z196, where it is
sometimes profitable to use call-clobbered register for returning
instead of %r14.  On newer processors we always return via %r14,
for which the fact that it's used is already reflected by
EPILOGUE_USES.  In this case a simple (return) suffices.

This patch changes return_use () to emit simple (return)s when
returning via %r14.  The resulting sequences are recognized by the
conditional return logic in try_optimize_cfg ().

gcc/ChangeLog:

2018-09-24  Ilya Leoshkevich  <iii@linux.ibm.com>

PR target/80080
* config/s390/s390.c (s390_emit_epilogue): Do not use PARALLEL
RETURN+USE when returning via %r14.

gcc/testsuite/ChangeLog:

2018-09-24  Ilya Leoshkevich  <iii@linux.ibm.com>

PR target/80080
* gcc.target/s390/risbg-ll-3.c: Expect conditional returns.
* gcc.target/s390/zvector/vec-cmp-2.c: Likewise.

From-SVN: r264535
gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/risbg-ll-3.c
gcc/testsuite/gcc.target/s390/zvector/vec-cmp-2.c