This is the mail archive of the
mailing list for the GCC project.
- From: Kenneth Zadeck <zadeck at naturalbridge dot com>
- To: gcc-patches <gcc at gcc dot gnu dot org>, Ian Lance Taylor <iant at google dot com>, Richard Sandiford <r dot sandiford at uk dot ibm dot com>, Mike Stump <mikestump at comcast dot net>, Kenneth Zadeck <Kenneth dot Zadeck at NaturalBridge dot com>, avr at gjlay dot de
- Date: Mon, 19 Mar 2012 20:55:49 -0400
- Subject: pr52543
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.