On Tue, May 20, 2008 at 2:47 PM, Paul Brook <[EMAIL PROTECTED]> wrote: > Does this work reliably for straight mov patterns and during reload? Sounds > like in the general case it would need secondary reloads, which is a whole > lot of extra magic.
Hmm, right. Maybe something like what rs6000 does: ; List r->r after r->"o<>", otherwise reload will try to reload a ; non-offsettable address by using r->r which won't make progress. (define_insn "*movdi_internal32" [(set (match_operand:DI 0 "nonimmediate_operand" "=o<>,r,r,*f,*f,m,r") (match_operand:DI 1 "input_operand" "r,r,m,f,m,f,IJKnGHF"))] And then in the split it does: /* Move register range backwards, if we might have destructive overlap. */ in rs6000_split_multireg_move. -- Pinski