------- 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

Reply via email to