This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/37449] [4.4 Regression] calculix gets wrong answer for -O1 -ffast-math
- From: "janis at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Sep 2008 00:16:09 -0000
- Subject: [Bug tree-optimization/37449] [4.4 Regression] calculix gets wrong answer for -O1 -ffast-math
- References: <bug-37449-4503@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #11 from janis at gcc dot gnu dot org 2008-09-24 00:16 -------
Created an attachment (id=16398)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16398&action=view)
yet another C testcase
I still don't understand what's going on, but have a new testcase that
demonstrates a few things. By looking at tree dumps and the generated code I
see that sometimes one of the comparisions of al[0], al[1], and al[2] is
skipped, which I don't understand, but apparently which one is skipped is
affected by -ffast-math, or is perhaps a Heisenbug that just looks as if it's
affected by -ffast-math.
Some interesting output from the test:
elm3b149% $GCC -v
Using built-in specs.
Target: powerpc64-linux
Configured with: /home/janis/gcc_trunk_anonsvn/gcc/configure
--prefix=/home/janis/tools/gcc-trunk-anonsvn --build=powerpc64-linux
--host=powerpc64-linux --target=powerpc64-linux --with-cpu=default32
--with-as=/home/janis/tools/binutils-20080903/bin/as
--with-ld=/home/janis/tools/binutils-20080903/bin/ld --enable-threads=posix
--enable-shared --enable-__cxa_atexit --enable-languages=c,c++,fortran
--with-gmp=/home/janis/tools/gmp-mpfr-32
--with-mpfr=/home/janis/tools/gmp-mpfr-32 --with-long-double-128
--enable-secureplt --disable-libstdcxx-pch
Thread model: posix
gcc version 4.4.0 20080923 (experimental) [trunk revision 140601] (GCC)
elm3b149% $GCC -O1 -ffast-math 37449-3.c -lm && a.out
cn = -2
neig = 3
Aborted
elm3b149% $GCC -O1 37449-3.c -lm && a.out
cn = -2
neig = 2
elm3b149% $GCC -DDBG -O1 -ffast-math 37449-3.c -lm && a.out
cn = -2
tt = -1.0472
al[0] = 0.5
al[1] = 0.5
al[2] = -1
neig = 2
elm3b149% $GCC -DDBG -O1 37449-3.c -lm && a.out
cn = -2
tt = 1.0472
al[0] = 0.5
al[1] = -1
al[2] = 0.5
neig = 2
elm3b149% $GCC -DCN=-1. -O1 -ffast-math 37449-3.c -lm && a.out
cn = -1
neig = 2
This won't make sense without looking at the testcase, but the test should get
the same result whenever cn = -1., but it gets different results for -1. and
-2., going through different paths through the generated code. Notice also
that the values of the array al[] are switched around depending on the options
used.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37449