https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66612
--- Comment #5 from amker at gcc dot gnu.org ---
Hmm, (In reply to amker from comment #4)
> (In reply to Andreas Schwab from comment #3)
> > stwx 10,8,9 -> *(int*)(r8+r9)=r10
>
> I am wondering how should we handle this failure. Create a new doloop test
> and change this one testing the optimization gcc does now?
>
> Thanks,
> bin
Hmm,
Actually, GCC shouldn't eliminate loop condition with address type candidate.
Like on 32 bits powerpc, the loop can be further optimized with do-loop
structure:
foo:
cmpwi 7,3,511
ble- 7,.L4
addi 9,3,-256
lis 10,a@ha
cmpwi 7,9,256
addi 9,3,-512
srwi 9,9,8
la 10,a@l(10)
slwi 3,3,2
addi 9,9,1
add 3,3,10
mtctr 9
li 10,42
blt- 7,.L9
.L3:
stw 10,0(3)
addi 3,3,-1024
bdnz .L3
.L4:
li 3,0
blr
.L9:
li 9,1
mtctr 9
b .L3
Please correct me if I was wrong assuming same scenario on powerpc64 and
powerpc.
Thanks