pr52543

Kenneth Zadeck zadeck@naturalbridge.com
Tue Mar 20 00:56:00 GMT 2012


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




More information about the Gcc mailing list