rs6000: Some rs6000_emit_epilogue improvements
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 17 May 2019 22:10:29 +0000 (00:10 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Fri, 17 May 2019 22:10:29 +0000 (00:10 +0200)
commit47e4cba60667814309d271fc91cace5eea54fa5e
tree744a6bb123d1313c5474620caba317584e611601
parentd78ba51841e429173f7a9eaa20006c04ceced29c
rs6000: Some rs6000_emit_epilogue improvements

This uses epilogue_type directly.  It also changes some ints to bools,
declares variables later, and simplifies some code.

There is one actual change:

   else if (info->push_p
           && DEFAULT_ABI != ABI_V4
-          && !crtl->calls_eh_return)
+          && epilogue_type != EPILOGUE_TYPE_EH_RETURN)
     {
       /* Prevent reordering memory accesses against stack pointer restore.  */

(different because calls_eh_return can be true for sibcalls).  This is
a bugfix.  The code was never exercised.

One place in the epilogue still uses crtl->calls_eh_return.  If that
is changed the prologue has to have a corresponding change, and the
emit_prologue function does not have an epilogue_type parameter, so
bail on changing this for now.  We might want to do this (saving the
CR fields to separate stack slots) always, not just for functions
calling eh_return, but that will require more investigation.

* config/rs6000/rs6000.c (restore_saved_cr): Change a boolean
argument to be type bool (was int before).
(rs6000_emit_epilogue): Simplify some code.  Declare some variables
at first use.  Use type bool for some variables.  Fix a theoretical
eh_return bug for svr4.

From-SVN: r271361
gcc/ChangeLog
gcc/config/rs6000/rs6000.c