On 2019-09-25 12:20 p.m., Richard Sandiford wrote:
[This follows on from:
  https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00778.html]

If we support multiple ABIs in the same translation unit, it can
sometimes be the case that a callee clobbers more registers than
its caller is allowed to.  We need to call df_set_regs_ever_live
on these extra registers so that the prologue and epilogue code
can handle them appropriately.

This patch does that in IRA.  I wanted to avoid another full
instruction walk just for this, so I combined it with the existing
set_paradoxical_subreg walk.  This happens before the first
calculation of elimination offsets.
It is a reasonable decision.
Tested on aarch64-linux-gnu (where with later patches it helps the
vector PCS) and x86_64-linux-gnu (where it's a no-op).  OK to install?
Sure.  Thank you, Richard.

2019-09-25  Richard Sandiford  <richard.sandif...@arm.com>

gcc/
        * function-abi.h (function_abi_aggregator): New class.
        * function-abi.cc (function_abi_aggregator::caller_save_regs): New
        function.
        * ira.c (update_equiv_regs_prescan): New function.  Call
        set_paradoxical_subreg here rather than...
        (update_equiv_regs): ...here.
        (ira): Call update_equiv_regs_prescan.

Reply via email to