This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Abt long long support


"Mohamed Shafi" <shafitvm@gmail.com> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]