This is the mail archive of the gcc-bugs@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]

new-ra weirdness


   host: i386-linux
 target: sh-elf
version: CVS head today

new-ra is performing unspeakable acts on some of my SH4 testcases.
It seems to be spilling the FPU registers to integer registers....through
memory. There is no fast way to move the FPU registers to the integer
registers on the SH4, so it shouldn't be doing this at all.

Also, it seems to be generating lots of useless loads and stores.
It loads a DFmode value into two integer pairs, then does nothing
and stores it back.

Here's some samples from quatern.i from stress-1.17 compiled with
-O2 -m4 -fnew-ra:


_Normal_Calc_z3:
...
        mov.l   r3,@-r15
        mov.l   r2,@-r15
...
        fmov.s  @r15+,fr2
        fmov.s  @r15+,fr3
...
        mov.l   r3,@-r15
        mov.l   r2,@-r15
...
        fmov.s  @r15+,fr6
        fmov.s  @r15+,fr7
...
        mov.l   r3,@-r15
        mov.l   r2,@-r15
        fmov.s  @r15+,fr14
        fmov.s  @r15+,fr15
...
        fmov.s  fr7,@-r15
        fmov.s  fr6,@-r15
        mov.l   @r15+,r10
        mov.l   @r15+,r11
...
        fmov.s  fr7,@-r15
        fmov.s  fr6,@-r15
        mov.l   @r15+,r2
        mov.l   @r15+,r3
...
        fmov.s  fr3,@-r15	<- do 16 memory load/stores to execute one
        fmov.s  fr2,@-r15	<- floating-point multiply
        mov.l   @r15+,r10
        mov.l   @r15+,r11
        mov.l   r11,@-r15
        mov.l   r10,@-r15
        fmov.s  @r15+,fr14
        fmov.s  @r15+,fr15
        mov.l   r3,@-r15
        mov.l   r2,@-r15
        fmov.s  @r15+,fr2
        fmov.s  @r15+,fr3
        fmul    dr2,dr14
        fmov.s  fr15,@-r15
        fmov.s  fr14,@-r15
        mov.l   @r15+,r10
        mov.l   @r15+,r11
,,,

        mov.l   @r15+,r2	<- load r2/r3...
        mov.l   @r15+,r3
        fmov.s  @r0,fr3
        mov     #8,r0
        mov.l   r3,@-r15	<- save back r2/r3 unchanged!!!
        mov.l   r2,@-r15
...
        mov.l   @r15+,r2	<- load r2/r3...
        mov.l   @r15+,r3
        fmov.s  @r0,fr7
        mov     #24,r0
        mov.l   r3,@-r15	<- save back r2/r3 unchanged!!!
        mov.l   r2,@-r15
...
        mov.l   @r15+,r2	<- load r2/r3...
        mov.l   @r15+,r3
        mov.l   r3,@-r15	<- save back r2/r3 unchanged!!!
        mov.l   r2,@-r15
...
        mov.l   @r15+,r10
        mov.l   @r15+,r11
        mov.l   r11,@-r15
        mov.l   r10,@-r15
...
        mov.l   @r15+,r2	<- load r2/r3
        mov.l   @r15+,r3
        fmov.s  @r0,fr3
        mov     #48,r0
        mov.l   r3,@-r15	<- save back r2/r3 unchanged!!!
        mov.l   r2,@-r15
...
        mov.l   @r15+,r2
        mov.l   @r15+,r3
        fmov.s  @r0,fr3
        mov     #48,r0
        mov.l   r3,@-r15
        mov.l   r2,@-r15
...
        mov.l   @r15+,r2
        mov.l   @r15+,r3
        fmov.s  @r0,fr7
        mov     #72,r0
        mov.l   r3,@-r15
        mov.l   r2,@-r15
...

Have any idea what's going on?

Toshi



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