------- Comment #7 from rguenth at gcc dot gnu dot org 2008-02-01 10:54 ------- gcse after reload removes the load imaginary part of the return value (__complex__ float is returned in %eax/%edx pair):
@@ -274,12 +274,10 @@ call nanf fstps -24(%ebp) movl -24(%ebp), %ecx - movl %ecx, -12(%ebp) - movl %ecx, %eax - movl -12(%ebp), %edx addl $36, %esp popl %ebx popl %ebp + movl %ecx, %eax ret etc. This is probably a DF and/or target issue. The testcase can be simplified to only call for example the first check_complex function in main(). It also fails with -O -fno-inline -fgcse-after-reload, mycacoshf is the function that is miscompiled (as it returns a complex). -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |zadeck at gcc dot gnu dot | |org, stevenb dot gcc at | |gmail dot com, matz at gcc | |dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35045