------- Additional Comments From bjoern dot m dot haase at web dot de 2005-07-29 20:06 ------- Hi, a couple of weeks after identifying this issue, I have continued working with 4.0.0. I never observed a similar failure in our production code. The issue seems to be strongly linked to the constraint requiring simultaneously two operands with the "+&" modifier. The back-end, itself never generates such a constraint pattern right now. It seems to me that the real problem has to do with register constraint matching. I personally do not have sufficient knowledge so that I would consider to start thinking about daring to eventually touch reload.c and comrades. On the other hand, I still feel uneasy about this bug. For this reason I am thinking about a workaround solely within the back-end. While refraining from requiring that code that contains the mentioned difficult constraits compiles, I presently think that one might already be better of with a situation where it triggers an ICE instead of generating wrong code. IMO, a possible workaround might be to simply disable within the machine description the move patterns that meet the two following two conditions 1.) the move uses a memory reference stored in Y 2.) the move target is the Y register itself My hope is that in absence of this move pattern, reload will no longer attempt to use the frame pointer register Y as spill register. This workaround certainly would be far from ideal, but better than nothing. I'd appreciate comments on this issue. Yours, Björn
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21990