mbox series

[0/9] Reduce the amount of global ABI state

Message ID mptef0o3yoq.fsf@arm.com
Headers show
Series Reduce the amount of global ABI state | expand

Message

Richard Sandiford Sept. 10, 2019, 4:26 p.m. UTC
This series is another step towards supporting multiple ABIs in the
same translation unit.  It reduces the amount of global state that
depends on the call-clobbered/call-preserved split, and also tries to
deal with the historic decision to make call_used_regs strictly include
all fixed registers, regardless of whether they're clobbered by calls
or not.  The specific changes are:

- Replace the two ABI-dependent global sets call_fixed_reg_set
  and no_caller_save_reg_set with a single ABI-neutral set called
  "savable_regs".  This only affects reload targets.

- Make all code that tests call_used_regs use a new predicate called
  "call_used_or_fixed_reg_p", to make it clear that the condition
  is true for fixed registers regardless of whether they're actually
  call-clobbered.

- Similarly replace call_used_reg_set with a new macro called
  "call_used_or_fixed_reg_set".

- Hide call_used_regs itself from target-independent code;
  everything should use call_used_or_fixed_regs, call_used_or_fixed_reg_p
  or regs_invalidated_by_call instead.  (For now at least.)

- Make call_used_regs describe the "real" call-used registers,
  where known, and remove call_really_used_regs.

- Remove the requirement to define CALL_USED_REGISTERS when defining
  CALL_REALLY_USED_REGISTERS.

It would be nice to make every port define CALL_REALLY_USED_REGISTERS
(and then probably rename it), but that would need port-specific
knowledge to do safely, and would have been nice at any time since
CALL_REALLY_USED_REGISTERS was introduced 18 years ago.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  Also tested by
compiling one target for each CPU directory and making sure that
there were no changes in assembly code for gcc.c-torture, gcc.dg
and g++.dg.  (Including eBPF this time. :-))

Richard