[Bug middle-end/21990] Wrong code for 4.0 and head: Reload clobbers the frame pointer by using it as spill register without recognizing the clobbering
bjoern dot m dot haase at web dot de
gcc-bugzilla@gcc.gnu.org
Fri Jul 29 20:53:00 GMT 2005
------- 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
More information about the Gcc-bugs
mailing list