Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Sep 2012 15:23:19 -0500
From:      Brooks Davis <brooks@freebsd.org>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        Ian Lepore <freebsd@damnhippie.dyndns.org>, Tijl Coosemans <tijl@coosemans.org>, current@freebsd.org, Dimitry Andric <dim@freebsd.org>, toolchain@freebsd.org
Subject:   Re: Clang as default compiler November 4th
Message-ID:  <20120914202319.GB5244@lor.one-eyed-alien.net>
In-Reply-To: <20120913161024.GA13846@troutmask.apl.washington.edu>
References:  <20120911104518.GF37286@deviant.kiev.zoral.com.ua> <20120911120649.GA52235@freebsd.org> <20120911132410.GA87126@troutmask.apl.washington.edu> <504F4645.4070900@FreeBSD.org> <504F4A6B.4010001@coosemans.org> <504F5101.8090906@FreeBSD.org> <505101C3.70203@freebsd.org> <20120913020833.GA8255@troutmask.apl.washington.edu> <1347550332.1110.108.camel@revolution.hippie.lan> <20120913161024.GA13846@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--QTprm0S8XgL7H0Dt
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Sep 13, 2012 at 09:10:24AM -0700, Steve Kargl wrote:
> On Thu, Sep 13, 2012 at 09:32:12AM -0600, Ian Lepore wrote:
> > On Wed, 2012-09-12 at 19:08 -0700, Steve Kargl wrote:
> > > In regards to my initial post in this thread, I was just trying
> > > to assess whether any benchmarks have been performed on FreeBSD
> > > for floating point generated by clang.  Other than the limited
> > > testing that I've done, it appears that the answer is 'no'.
> > >=20
> >=20
> > We have src/tools/tests/testfloat and src/tools/regression/lib/msun.  I
> > know nothing about the former (just noticed it for the first time).  The
> > latter I think is a set of correctness tests rather than performance
> > tests.
>=20
> It's quite clear that the clang proponent have not tried
> to run src/tools/regression/lib/msun.
>=20
> % setenv CC clang
> % make  |& grep warning | wc -l
>     1354
> % make clean
> % make |& tee make.log
> % head -20 make.log
> clang -O2 -pipe -march=3Dopteron -O0 -lm  test-cexp.c  -o test-cexp
> test-cexp.c:49:14: warning: pragma STDC FENV_ACCESS ON is not supported, =
ignoring pragma [-Wunknown-pragmas]
> #pragma STDC FENV_ACCESS        ON
>              ^
> test-cexp.c:183:2: warning: expression result unused [-Wunused-value]
>         testall(0.0, 1.0, ALL_STD_EXCEPT, 0, 1);
>         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> test-cexp.c:98:7: note: expanded from macro 'testall'
>         test(cexp, x, result, exceptmask, excepts, checksign);          \
>              ^
> test-cexp.c:87:11: note: expanded from macro 'test'
>         assert(((func), fetestexcept(exceptmask) =3D=3D (excepts)));     =
   \
>                  ^
> /usr/include/assert.h:54:21: note: expanded from macro 'assert'
> #define assert(e)       ((e) ? (void)0 : __assert(__func__, __FILE__, \
>                           ^
> test-cexp.c:183:2: warning: expression result unused [-Wunused-value]
>         testall(0.0, 1.0, ALL_STD_EXCEPT, 0, 1);
>         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> test-cexp.c:99:7: note: expanded from macro 'testall'
>=20
> % tail -20 make.log
> test-trig.c:69:11: note: expanded from macro 'test'
>         assert(((func), fetestexcept(exceptmask) =3D=3D (excepts)));     =
   \
>                  ^
> /usr/include/assert.h:54:21: note: expanded from macro 'assert'
> #define assert(e)       ((e) ? (void)0 : __assert(__func__, __FILE__, \
>                           ^
> 74 warnings generated.
> clang -O2 -pipe -march=3Dopteron -O0 -lm  test-fenv.c  -o test-fenv
> test-fenv.c:82:14: warning: pragma STDC FENV_ACCESS ON is not supported, =
ignoring pragma [-Wunknown-pragmas]
> #pragma STDC FENV_ACCESS ON
>              ^
> 1 warning generated.
> for p in test-cexp test-conj test-csqrt test-ctrig  test-exponential test=
-fma  test-fmaxmin test-ilogb test-invtrig test-logarithm test-lrint  test-=
lround test-nan test-nearbyint test-next test-rem test-trig  test-fenv; do =
/usr/src/tools/regression/lib/msun/$p; done
> Assertion failed: (((cexp), fetestexcept((0x04 | 0x20 | 0x01 | 0x08 | 0x1=
0)) =3D=3D (0))), function test_nan, file test-cexp.c, line 211.
> 1..7
> ok 1 - cexp zero
> Abort trap (core dumped)
> *** [tests] Error code 134
>=20
> Stop in /usr/src/tools/regression/lib/msun.

Prompted by this post, I did a bit of testing and it looks like we have
two classes of failures that need to be investigated.  First, some tests
are failing with a gcc compiled world and clang compiled test code.
They seem to mostly be unexpected fp exception state when testing with
NaNs.  I suspect that someone more knowledgeable in this area could come
up with a reduced test case and explication of what clang is doing wrong
pretty quickly.

The second class is tests that fail when libm is compiled using clang.
I've not investigate those at all.  I'd tend to guess that we have a
wider range of issues there.

This is clearly an area we need more focus on before a switch to clang.
To a point I would be OK with it delaying the switch to work these
issues, but as with C99 long double support we can't let the quest for
perfection delay us indefinitely.

-- Brooks

--QTprm0S8XgL7H0Dt
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (FreeBSD)

iD8DBQFQU5I3XY6L6fI4GtQRAoqhAJ0YgSkxpWQyvtvszq36Jmt2PpAkpgCg3Irt
wUFCV/+dlbrSlAI2qqqUPpY=
=K3cL
-----END PGP SIGNATURE-----

--QTprm0S8XgL7H0Dt--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120914202319.GB5244>