------- Comment #11 from ubizjak at gmail dot com 2007-12-13 14:24 ------- c testcase:
--cut here-- extern void foo(void); extern double *dpb; double s000005m_test(void) { double result = 0.0; int n; for (n = 0; n < 2000; ++n) result += dpb[n]; #ifdef FOOBAR foo(); #endif return result; } --cut here-- This also shows problems on x86_64, so probably not target dependant: .LCFI0: movq dpb(%rip), %rdx xorl %eax, %eax movsd %xmm0, (%rsp) .align 16 .L2: movsd (%rsp), %xmm0 addsd (%rdx,%rax,8), %xmm0 addq $1, %rax cmpq $2000, %rax movsd %xmm0, (%rsp) jne .L2 call foo movsd (%rsp), %xmm0 addq $8, %rsp ret -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23322