Output of gcc -v:
Using built-in specs.
Target: i686-pc-cygwin
Configured with: ../../source/gcc-4.1.1/configure --enable-threads=posix
--enable-languages=c,c++ --disable-win32-registry
Thread model: posix
gcc version 4.1.1
I wrote a Vector class that I wanted to optimize by using some inline assembly
with SSE instructions. I noticed that with certain optimizations on, GCC
version 4.1.1 produces wrong code. The source code consists of my Vector class
and some test code.
When I compile this with the following command line I get the error:
g++ -Wall -O2 -msse -finline-functions gccbug.cpp -o gccbug
Output of the program:
Start
FAILED: expected (1.5;3;4.5) but value is (1;3;4.5): bug in operator*
FAILED: expected (1.5;3;4.5) but value is (1;3;4.5): bug in operator*
FAILED: expected (0.5;1;1.5) but value is (1;1;1.5): bug in operator/
FAILED: expected (1.5;3;4.5) but value is (1;3;4.5): bug in operator*
FAILED: expected (1.5;3;4.5) but value is (1;3;4.5): bug in operator*
FAILED: expected (0.5;1;1.5) but value is (1;1;1.5): bug in operator/
Finished in 14338932 ticks
Ther are some computations with vectors, and when I compile it with these
settings, there are errors in the compilation. Note that the first element of
the result vector is 1 instead of 1.5 (for the multiplication) or 0.5 (for the
division).
When I compile this code with different options, for example:
1. Without "-msse": g++ -Wall -O2 -finline-functions gccbug.cpp -o gccbug
2. Without "-finline-functions": g++ -Wall -O2 -msse gccbug.cpp -o gccbug
Then the program works correctly!
Conclusion: GCC produces wrong code with this combination of optimization
options.
--
Summary: GCC produces wrong code with SSE / inline functions
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jespdj at hotmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29139