-ffixed-xxx -fcall-used-xxx and -fcall-saved-xxx are processed before init_regs() is called, and that function calls CONDITIONAL_REGISTER_USAGE. If that macro changes the registers available (for example, to generate an ABI variant), then it cannot tell whether or not a register's usage model has been changed on the command-line.
This manifests itself, for example, on ARM when -mfpu=vfpv3 -mfloat-abi=hard -fcall-used-s16 -fcall-used-s17 does change the callee-saved register set. Not sure if this is a regression over older compilers. -- Summary: -ffixed-xxx etc processed too early Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rearnsha at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43476