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

--- Comment #20 from amker at gcc dot gnu.org ---
(In reply to Eric Botcazou from comment #19)
> > The assembly is as below on sparc64:
> > f1:
> >     .register       %g2, #scratch
> >     sllx    %o1, 2, %g1
> >     mov     99, %g2
> >     add     %o0, %g1, %o0
> >     sub     %g2, %o1, %o1
> >     srl     %o1, 0, %g1
> >     add     %g1, 1, %g1
> >     sllx    %g1, 2, %g1
> >     add     %o0, %g1, %g1
> >     st      %g0, [%o0]
> > .LL5:
> >     add     %o0, 4, %o0
> >     cmp     %o0, %g1
> >     blu,a,pt %xcc, .LL5
> >      st     %g0, [%o0]
> >     jmp     %o7+8
> >      nop
> 
> How did you configure the compiler?  We're talking about 64-bit
> SPARC/Solaris and here's the code actually generated for the time being:
> 
>         .type   f1, #function
>         .proc   020
> f1:
>         sllx    %o1, 2, %g1
>         add     %o0, %g1, %o0
> .LL2:
>         st      %g0, [%o0]
>         add     %o1, 1, %g1
>         add     %o0, 4, %o0
>         cmp     %g1, 99
>         bleu,pt %icc, .LL2
>          srl    %g1, 0, %o1
>         jmp     %o7+8
>          nop
> 
> so it is still suboptimal, hence my generic fix.
Ouch, my bad.  That code is generated because I forced gcc to do the iv
replacement by decreasing the cost.  The trunk generates assembly just like
yours.

Thanks.

Reply via email to