axp ev4 reload problem

Jim Wilson wilson@cygnus.com
Mon May 31 21:06:00 GMT 1999


It isn't a reload_in* pattern in this case though.  It is a simple call to
movqi with a pseudo as the source.  The alpha movqi pattern has a special
check for pseudo's during reload
      || (reload_in_progress && GET_CODE (operands[1]) == REG
          && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER)
and it handles them like a MEM.  aligned_memory_operand knows that it might
be passed in a pseudo, but get_aligned_mem does not.  So there seems to be
an inconsistency in the alpha movqi code.

I think the problem is your Apr 14 change, which made some changes to
get_aligned_mem which are correct when called from a reload_in* pattern,
but which are incorrect when called from a mov* pattern.

This particular problem seems to be alpha specific, because old alphas don't
have byte/short load instructions, and end up synthesizing them in the mov*
patterns during reload.  Very few other ports need to do this, and hence won't
see this problem.  If you can find a better way to solve this problem, then
some of the complexity in the alpha.md file can go away.

I think that passing a MEM instead of a pseudo to the mov* patterns during
reload would be a risky change, and I don't think this specific problem
justifies making this change.

Jim



More information about the Gcc-bugs mailing list