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

Reply via email to