rs6000: Don't emit a use of LR in returns and sibcalls
The exit block (to which every return artificially jumps) already has
a use of LR. The LR use in all returns and sibcalls is an anachronism,
probably made unnecessary by the dataflow merge. The simple_returns
that shrink-wrapping generates also do not have such a use. Newer
backends do not do this either it seems.
With this use removed, a normal return is no longer a parallel but just
a return insn, and cfgcleanup then can transform conditional jumps to
those into conditional returns.
This splits the return emission code with restoring_FPRs_inline from
that without it; this is simpler code, fewer lines, and less indentation.
The return_internal_<mode> pattern can now be deleted since nothing uses
it anymore.
* config/rs6000/rs6000.c (rs6000_emit_epilogue): Do not emit
USEs of LR_REGNO in returns and sibcalls.
(rs6000_output_mi_thunk): Similar.
(rs6000_sibcall_aix): Similar.
* config/rs6000/rs6000.md (sibcall, sibcall_value, sibcall_local32,
sibcall_local64, sibcall_value_local32, sibcall_value_local64,
sibcall_nonlocal_sysv<mode>, sibcall_value_nonlocal_sysv<mode>):
Remove the USE of LR_REGNO from the patterns as well. Delete an
obsolete comment.
(return_internal_<mode>): Delete.
From-SVN: r239866