I have figured out what the root cause of pr52543, but i need some advise as to how to fix it. The bug only happens if the source or destination of the move is a hard register. lower-subreg never breaks up pseudo to pseudo moves that are larger than word mode. According to richard sandiford, this bug also appears on the neon, but i do not know if there is a bugzilla for it. It also appears on my private port, which is why i am interested in it.

in the particular case of pr52543 and my port, this happens because the input arguments are hard regs.

The offending code is in can_decompose_p. The problem is that if the reg is a hard reg, it completely blows off all of the information that it accumulated during the first pass and unconditionally splits the register (assuming it is legal to do so).

My question for the list, what is the predicate that we want to replace the code that always decomposes hardregs (assuming it is legal). In the case of the neon and my port, decomposing costs 4x more than using a wide move. I assume the avr is similar.

Kenny


Reply via email to