This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]