"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

Reply via email to