Dear all, As some might know, I've been concentrating on optimizing the handling of loads for my port of GCC. I'm now considering this code: uint64_t data[107]; uint64_t foo (void) { uint64_t x0, x1, x2, x3, x4, x5,x6,x7; uint64_t i;
for(i=0;i<107;i++) { data[i] = i; } return data[0] + data[1] + data[2]; } However, the code I get is: la r9,data mov r8, r9 #LOOP, of no consequence, it uses r8 for the stores... la r7,data+8 #Loads data+8 in r7 instead of using r9 directly ldd r9,0(r9) #This loads from r9 and the two next from r7 ldd r6,0(r7) ldd r8,8(r7) As you can see, the compiler uses r9 to store data and then uses that for data[0] but also loads in r7 data+8 instead of directly using r9. If I remove the loop then it does not do this. Any ideas where I can look for this, or is this going to be difficult to fix? Thanks ! Jean Christophe Beyler