https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126175

--- Comment #6 from Oleg Endo <olegendo at gcc dot gnu.org> ---
Compiling the example in attachment 64973 with "-m2 -ml -O2", I get:

_j:
        mov.l   r8,@-r15
        mov     #0,r1
        sts.l   pr,@-r15
        mov     #0,r6
        add     #-92,r15
        mov     r15,r2
        add     #75,r2
        mov.l   r2,@(36,r15)
        mov     r15,r2
        add     #88,r2
        mov.l   r2,@(24,r15)
        mov     r15,r2
        mov.l   .L3,r8
        add     #84,r2
        mov.l   r2,@(8,r15)
        mov     r15,r2
        add     #80,r2
        mov     r15,r7
        mov.l   r2,@(4,r15)
        add     #76,r7
        mov.l   r1,@(60,r15)
        mov.l   r1,@(56,r15)
        mov.l   r1,@(52,r15)
        mov.l   r1,@(48,r15)
        mov.l   r1,@(44,r15)
        mov.l   r1,@(40,r15)
        mov.l   r1,@(32,r15)
        mov.l   r1,@(28,r15)
        mov.l   r1,@(20,r15)
        mov.l   r1,@(16,r15)
        mov.l   r1,@(12,r15)
        mov.l   .L4,r5
        mov.l   .L5,r4
        jsr     @r8
        mov.l   r1,@r15
        mov     r15,r1
        add     #28,r1
        mov.l   @(48,r1),r5
        mov     r15,r1
        add     #68,r1
        mov     r5,r6
        mov.l   r5,@r1
        shll2   r6
        mov     r15,r1
        add     r6,r6
        add     #64,r1
        mov.l   r6,@r1
        mov.l   .L6,r1
        jsr     @r1
        mov     r6,r4
        mov     r15,r1
        add     #64,r1
        mov.l   @r1,r6
        mov     r15,r1
        add     #68,r1
        mov.l   @r1,r5
        jsr     @r8
        mov     #0,r4
        add     #92,r15
        lds.l   @r15+,pr
        rts     
        mov.l   @r15+,r8

(62 insns)


Adding the WIP AMS optimization:
_j:
        mov.l   r8,@-r15
        mov     #0,r1
        sts.l   pr,@-r15
        mov     #0,r6
        add     #-92,r15
        mov     r15,r2
        add     #75,r2
        mov.l   r2,@(36,r15)
        mov     r15,r2
        add     #88,r2
        mov.l   r2,@(24,r15)
        mov     r15,r2
        mov.l   .L3,r8
        add     #84,r2
        mov.l   r2,@(8,r15)
        mov     r15,r2
        add     #80,r2
        mov     r15,r7
        add     #76,r7
        mov.l   r1,@(60,r15)
        mov.l   r1,@(56,r15)
        mov.l   r1,@(52,r15)
        mov.l   r1,@(48,r15)
        mov.l   r1,@(44,r15)
        mov.l   r1,@(40,r15)
        mov.l   r1,@(32,r15)
        mov.l   r1,@(28,r15)
        mov.l   r1,@(20,r15)
        mov.l   r1,@(16,r15)
        mov.l   r1,@(12,r15)
        mov.l   r2,@(4,r15)
        mov.l   .L4,r5
        mov.l   .L5,r4
        jsr     @r8
        mov.l   r1,@r15
        mov     r15,r2
        add     #16,r2
        mov.l   @(60,r2),r5
        mov.l   .L6,r1
        mov     r5,r6
        shll2   r6
        add     r6,r6
        mov.l   r5,@(52,r2)
        mov     r6,r4
        jsr     @r1
        mov.l   r6,@(48,r2)
        mov     r15,r1
        add     #64,r1
        mov.l   @r1,r6
        mov     #0,r4
        jsr     @r8
        mov.l   @(4,r1),r5
        add     #92,r15
        lds.l   @r15+,pr
        rts     
        mov.l   @r15+,r8

(62 -> 57 insns)

The AMS pass is ran twice, before RA and after RA.  In this case the AMS pass
before RA does nothing and the one after RA fixes up LRA's mishaps.

There are some remaining missed spots, I've written it down in PR 126199.

Reply via email to