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.