Dave Korn wrote:
But it is ok to use a define_expand (that accepts all alternatives) for movsf and use that to generate one of several movsf_XXXX insns, isn't it?
Reload doesn't use the move define_expands. It can't. A define_expand is allowed to do stuff like generate new RTL that would completely mess up what reload is trying to do. So reload has to generate move insns directly, and hope they match. And since emitting a move insn to fix another move insn makes no sense, existing move insns are fixed in place, and not rerecognized after they are fixed. Hence, you need a single move insn pattern that accepts all of the usual operand combinations.
-- Jim Wilson, GNU Tools Support, http://www.specifix.com