------- Comment #27 from bonzini at gnu dot org 2006-11-29 07:56 ------- This case is still not fixed:
struct s { int size; float *data; }; void f(struct s *d, struct s *s) { int i; for (i = 0; i < s->size; i++) d->data[i] += s->data[i]; } The body of the loop is compiled to: L4: slwi r2,r9,2 addi r9,r9,1 lfsx f0,r2,r3 lfsx f13,r4,r2 fadds f0,f0,f13 stfsx f0,r2,r3 bdnz L4 Note how r2 is twice in the first position, and once in the second. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28690