"Mohamed Shafi" <[EMAIL PROTECTED]> writes: > (insn 94 91 95 6 (set (reg:SI 12 a4) > (mem/c:SI (reg:SI 12 a4) [0 D.1863+0 S4 A32])) 15 {movsi_load} (nil) > (nil)) > > (insn 95 94 31 6 (set (reg:SI 13 a5 [orig:12+4 ] [12]) > (mem/c:SI (plus:SI (reg:SI 12 a4) > (const_int 4 [0x4])) [0 D.1863+4 S4 A32])) 15 {movsi_load} > (nil) > (nil))
> I am not sure whether this is because of reload pass or global > register allocation. If those two instructions appear for the first time in the .greg dump file, then they have been created by reload. > 1. What could be the reason for this behavior? I'm really shooting in the dark here, but my guess is that you have a define_expand for movdi that is not reload safe. You can do this operation correctly, you just have to reverse the instructions: load a5 from (a4 + 4) before you load a4 from (a4). See, e.g., mips_split_64bit_move in mips.c and note the use of reg_overlap_mentioned_p. Ian