This is the mail archive of the
mailing list for the GCC project.
Help with reload bug, please
- From: Andrew Stubbs <ams at codesourcery dot com>
- To: <gcc at gcc dot gnu dot org>
- Date: Fri, 23 Jan 2015 13:46:04 +0000
- Subject: Help with reload bug, please
- Authentication-results: sourceware.org; auth=none
How does reload ensure that an SImode value (re)loaded into an FP
register has a valid stack index?
The FP load instruction allows a smaller index range than the integer
equivalent, but nothing checks the destination register, only the source
I'm trying to solve a problem in which GCC 4.1 gets this wrong, but
AFAICT this code works exactly the same now as then (although I don't
have a testcase). IOW, unless I'm missing something, the only reason
this doesn't fail all the time is that it's quite rare for the register
pressure to cause just this value to spill in a function that has a
stack frame >1KB and the index happens to be beyond the limit.
My target is ARMv7a with VFP. The code is trying to cast an int to a
float. The machine description is such that the preferred route is to
load the value first into a general register, transfer it to the VFP
register, and then convert. It's only possible to get it to load
directly to the VFP register if all the general registers are in use.
This makes it very hard to write a synthetic testcase.
I can "fix" the problem by rewriting arm_legitimate_index_p such that it
assumes all SImode access might be VFP loads, but that seems suboptimal.
Any suggestions would be appreciated!