reload in incompatible constraints
Ian Lance Taylor
iant@google.com
Thu Jun 23 17:58:00 GMT 2011
Aurelien Buhrig <aurelien.buhrig.gcc@gmail.com> writes:
> My main problem is when defining a *movhi insn whose
> constraints/predicates only support r registers, GCC may reload some r
> register into A subreg:HI register, and complains because the insn
> *movhi does not satisfy its constraints (r). How to prevent this ?
I assume that the register can in principle hold the value, so changing
HARD_REGNO_MODE_OK would not be appropriate. What you want here is
REGISTER_MOVE_COST. However, gcc will try to use all available
registers in some cases, so if you can't move values between the
register classes easily you will need to define TARGET_SECONDARY_RELOAD.
> BTW, to handle movhi from subreg:HI A to subreg:HI A, which is not
> supported by the target: should I define a define_expand movhi whose
> predicates supports such an operation, and then, provide a
> define_split to froce passing through a r reg ? Is there a more
> efficient way to do this ?
This is what TARGET_SECONDARY_RELOAD is for.
Ian
More information about the Gcc-help
mailing list