Constrain not satisfied - floating point insns.
Jim Wilson
wilson@specifix.com
Thu Mar 15 19:46:00 GMT 2007
Rohit Arul Raj wrote:
> But for moving an immediate value, compiler should use a data
> register but it is using a floating point register.
Sometimes it is impossible to avoid using an FP reg where we would
prefer to have a data register. This is why reload exists, to fix
things that don't match their constraints after register allocation.
> Still i get an ICE for constrain not satisfied.
It isn't clear what the problem is. Reload should have either forced
the constant into memory, or else added a move insn so that we could
load it into a data reg and then move the data reg to an FP reg.
Try looking at the RTL dumps to see what reloads were generated for this
insn. If the constraint failure happened after reload was done, what
was the pre- and post- reload RTL for this insn? Did a following pass
like post-reload cse accidentally break the insn?
If the constraint failure is during reload, then you may have to spend a
little time stepping through reload to see what went wrong. The
interesting bit would be in find_reloads, you can set a conditional
breakpoint on the insn number to stop here when it processes this insn.
This function might be called multiple times for the same insn, as we
have to iterate until all insns are fixed.
--
Jim Wilson, GNU Tools Support, http://www.specifix.com
More information about the Gcc
mailing list