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