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.