Re: [flac-dev] Two questions about RG in flac

2014-06-06 Thread lvqcl
Ozkan Sezer wrote:

 With gcc-3,3,6, 3,4,6, 4.3.0 and gcc-4.9.1 (svn r210839) the output is
 normal:
 Sum = 64.00 (should be equal to 64)

 With gcc-4.8.3 (release version) it's broken:
 Sum = 206158430272.00 (should be equal to 64)

 With clang-3.4.1 (compiled with gcc-4.8.3) the output is normal again.

 This is on i686-linux (fedora9, glibc-2.8, kernel-2.6.27.35)

Thank you for testing.

However, I compiled my test with gcc 4.9.1 20140604 from dongsheng-daily
( 
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/dongsheng-daily/4.9/
 , file gcc-4.9-win32_4.9.1-20140604.7z) and it still fails...
___
flac-dev mailing list
flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev


Re: [flac-dev] Two questions about RG in flac

2014-06-06 Thread lvqcl
Robert Kausch wrote:

 The problem seems to be that sum is interpreted as a 64 bit value if
 SSE2 was used in the loop (the lower 32 bits of the result give the
 expected value). If sum is evaluated another time before or after (!)
 the printf, the problem goes away. For example, changing the last line
 to return sum + 1; lets the problem disappear.

 I confirmed the bug with GCC 4.6.3 on Ubuntu. As on Windows, only 32 bit
 code generation is affected.

Thank you for testing.

 You should file a bug report with the GCC team.

Done: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61423
___
flac-dev mailing list
flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev


Re: [flac-dev] Two questions about RG in flac

2014-06-03 Thread Robert Kausch

Am 03.06.2014 16:45, schrieb lvqcl:

2) to ALL:
I attached a small program. Compile and run it.
* Does it work correctly when compiled with -O3 -msse2 options?
* If yes, does it work correctly when compiled with -O3 -funroll-loops 
-msse2 options?

  ( and what is the version of your GCC? )

I further reduced the testcase (attached).

The bug only occurs if N = 64; presumably the second loop is only SSE2 
optimized if that's the case.


The problem seems to be that sum is interpreted as a 64 bit value if 
SSE2 was used in the loop (the lower 32 bits of the result give the 
expected value). If sum is evaluated another time before or after (!) 
the printf, the problem goes away. For example, changing the last line 
to return sum + 1; lets the problem disappear.


I confirmed the bug with GCC 4.6.3 on Ubuntu. As on Windows, only 32 bit 
code generation is affected.


You should file a bug report with the GCC team.
#include stdio.h

#define N 64 /* problem is triggered only if N = 64 */
unsigned A[N];

int main()
{
unsigned i, sum = 0; /* both sum and A[] need to be unsigned for the 
bug to happen */

for (i = 0; i  N; i++) A[i] = 1;
for (i = 0; i  N; i++) sum += A[i];

printf(Sum = %f (should be equal to %i)\n, (float) sum, N);

return 0;
}
___
flac-dev mailing list
flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev


Re: [flac-dev] Two questions about RG in flac

2014-06-03 Thread Ozkan Sezer
On 6/3/14, Robert Kausch robert.kau...@freac.org wrote:
 Am 03.06.2014 16:45, schrieb lvqcl:
 2) to ALL:
 I attached a small program. Compile and run it.
 * Does it work correctly when compiled with -O3 -msse2 options?
 * If yes, does it work correctly when compiled with -O3 -funroll-loops
 -msse2 options?
   ( and what is the version of your GCC? )
 I further reduced the testcase (attached).

 The bug only occurs if N = 64; presumably the second loop is only SSE2
 optimized if that's the case.

 The problem seems to be that sum is interpreted as a 64 bit value if
 SSE2 was used in the loop (the lower 32 bits of the result give the
 expected value). If sum is evaluated another time before or after (!)
 the printf, the problem goes away. For example, changing the last line
 to return sum + 1; lets the problem disappear.

 I confirmed the bug with GCC 4.6.3 on Ubuntu. As on Windows, only 32 bit
 code generation is affected.

 You should file a bug report with the GCC team.


With gcc-3,3,6, 3,4,6, 4.3.0 and gcc-4.9.1 (svn r210839) the output is
normal:
Sum = 64.00 (should be equal to 64)

With gcc-4.8.3 (release version) it's broken:
Sum = 206158430272.00 (should be equal to 64)

With clang-3.4.1 (compiled with gcc-4.8.3) the output is normal again.

This is on i686-linux (fedora9, glibc-2.8, kernel-2.6.27.35)
___
flac-dev mailing list
flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev