cant_combine_insn_p hard_reg->reg moves

David Edelsohn dje@watson.ibm.com
Tue Dec 25 23:13:00 GMT 2001


	At Daniel's prompting, I finally tracked down the cause of the
code pessimization with respect to function arguments and return values.
Daniel tracked it down to somewhere in combine.

	The problem is cant_combine_insn_p disallowing hard registers.
Arguments and return values are specified as hard regs.  So this change
from December 2000 now often inserts a move between the hard reg allocated
to the pseudo of a computation and the hard regs of arguments and return
values.  This is rather pessimistic for some architecture, especially for
ABIs with register-based calling conventions.

	How can this improved?  Could cant_combine_insn_p test for hard
regs with either REG_EQUIV involving computations of ARG_POINTER_REGNUM or
FUNCTION_VALUE_REGNO_P?

Thanks, David



More information about the Gcc mailing list