[RS6000] PR88311, mlongcall indirections are optimised away

Programming / Compilers / GCC - amodra [138bc75d-0d04-0410-961f-82ee72b054a4] - 14 December 2018 09:03 EST

Masking CALL_LONG from the cookie was done in order to simplify and correct length attribute calculations for indirect calls at one point in my call series tidy when the indirect patterns used alternatives "0,n" on the cookie operand. (Leaving the CALL_LONG in place calculated the wrong length for long calls without fp args.)

This is no longer necessary now that the indirect sysv call patterns explicitly test for the fp arg bits in their length attribute expressions. And without the CALL_LONG to disable insns like call_value_local_svsv, combine merrily replaces the indirect long call sequence with a direct call. As it should. This patch reinstates the CALL_LONG bit.

PR rtl-optimization/88311
- config/rs6000/rs6000.c (rs6000_call_sysv): Do not mask cookie. (rs6000_sibcall_sysv): Likewise.

ad893df7fe1 [RS6000] PR88311, mlongcall indirections are optimised away
gcc/ChangeLog | 6 ++++++
gcc/config/rs6000/rs6000.c | 6 ++----
2 files changed, 8 insertions(+), 4 deletions(-)

Upstream: gcc.gnu.org

  • Share