Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Sep 2012 10:03:22 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Roman Divacky <rdivacky@freebsd.org>
Cc:        Ian Lepore <freebsd@damnhippie.dyndns.org>, Tijl Coosemans <tijl@coosemans.org>, current@freebsd.org, Dimitry Andric <dim@freebsd.org>, toolchain@freebsd.org, Steve Kargl <sgk@troutmask.apl.washington.edu>
Subject:   Re: Clang as default compiler November 4th
Message-ID:  <FEC16D7B-E10F-47CF-B0D6-F89F4EFE3021@bsdimp.com>
In-Reply-To: <20120915091455.GA93876@freebsd.org>
References:  <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> <20120914202319.GB5244@lor.one-eyed-alien.net> <20120915001808.GA70215@troutmask.apl.washington.edu> <20120915010600.GA70426@troutmask.apl.washington.edu> <20120915091455.GA93876@freebsd.org>

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

On Sep 15, 2012, at 3:14 AM, Roman Divacky wrote:

> LLVM by default turns these:
>=20
>    case LibFunc::copysign:  case LibFunc::copysignf:  case =
LibFunc::copysignl:
>    case LibFunc::fabs:      case LibFunc::fabsf:      case =
LibFunc::fabsl:
>    case LibFunc::sin:       case LibFunc::sinf:       case =
LibFunc::sinl:
>    case LibFunc::cos:       case LibFunc::cosf:       case =
LibFunc::cosl:
>    case LibFunc::sqrt:      case LibFunc::sqrtf:      case =
LibFunc::sqrtl:
>    case LibFunc::floor:     case LibFunc::floorf:     case =
LibFunc::floorl:
>    case LibFunc::nearbyint: case LibFunc::nearbyintf: case =
LibFunc::nearbyintl:
>    case LibFunc::ceil:      case LibFunc::ceilf:      case =
LibFunc::ceill:
>    case LibFunc::rint:      case LibFunc::rintf:      case =
LibFunc::rintl:
>    case LibFunc::trunc:     case LibFunc::truncf:     case =
LibFunc::truncl:
>    case LibFunc::log2:      case LibFunc::log2f:      case =
LibFunc::log2l:
>    case LibFunc::exp2:      case LibFunc::exp2f:      case =
LibFunc::exp2l:
>=20
> from lib calls to direct code (ie. instruction or sequence of). This =
is not a "bug"
> but feature ;)
>=20
> I am not sure what the rules for the transformation should be. Allow =
it only with
> -ffast-math ? Disallow it on i386? Really, no idea.

In the past, gcc has only done this with -ffast-math, but my 'in the =
past' is a long time ago...

> Steve, you tested on i386? Can you test on amd64?
>=20
> Do you guys have any opinion what to do here?
>=20
> On Fri, Sep 14, 2012 at 06:06:00PM -0700, Steve Kargl wrote:
>> On Fri, Sep 14, 2012 at 05:18:08PM -0700, Steve Kargl wrote:
>>>=20
>>> A third class of failure appears to be that clang emits
>>> i387 fpu instructions for at least sinf and cosf instead=20
>>> of calls to the library routines.  AFAIK, the library
>>> routines are faster and more accurate.
>>>=20
>>=20
>> Yep. Clang has problems with at least sinf on i386 FreeBSD.
>>=20
>> % pwd
>> /usr/home/kargl/trunk/math/sine
>>=20
>> % make clean && make CC=3Dcc testf
>> cc -o testf -O2 -pipe -static -I/usr/local/include -I../mp testf.c \
>> -L/usr/local/lib -L../mp -lsgk -lmpfr -lgmp -lm
>>=20
>> % ./testf -m 0 -M 1e20 -r
>> ULP Range |
>> -----------+-------------------------
>> [0.0:0.6] | 1006424    (100.00%)
>> (0.6:0.7] | 0  ( 0.00%)
>> (0.7:0.8] | 0  ( 0.00%)
>> (0.8:0.9] | 0  ( 0.00%)
>> (0.9:1.0] | 0  ( 0.00%)
>> (1.0:2.0] | 0  ( 0.00%)
>> (2.0:3.0] | 0  ( 0.00%)
>> 3.0 < ULP | 0  ( 0.00%)
>> -----------+-------------------------
>>   Count   | 1006424
>>   Max ULP | 0.50084
>> Max ULP x | 53462490661259313152.000000 0x1.72f876p+65
>>=20
>> % make clean && make CC=3Dclang testf
>> clang -o testf -O2 -pipe -static -I/usr/local/include -I../mp testf.c =
\
>> -L/usr/local/lib -L../mp -lsgk -lmpfr -lgmp -lm
>>=20
>> % ./testf -m 0 -M 1e20 -r
>> ULP Range |
>> -----------+-------------------------
>> [0.0:0.6] | 1  ( 0.00%)
>> (0.6:0.7] | 0  ( 0.00%)
>> (0.7:0.8] | 0  ( 0.00%)
>> (0.8:0.9] | 0  ( 0.00%)
>> (0.9:1.0] | 0  ( 0.00%)
>> (1.0:2.0] | 0  ( 0.00%)
>> (2.0:3.0] | 0  ( 0.00%)
>> 3.0 < ULP | 999998     (100.00%)
>> -----------+-------------------------
>>   Count   | 999999
>>   Max ULP | 1328505256679420125050194353979392.00000
>> Max ULP x | 75516780764213542912.000000 0x1.06006p+66
>>=20
>> --=20
>> Steve
>> _______________________________________________
>> freebsd-current@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to =
"freebsd-current-unsubscribe@freebsd.org"
> _______________________________________________
> freebsd-toolchain@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
> To unsubscribe, send any mail to =
"freebsd-toolchain-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FEC16D7B-E10F-47CF-B0D6-F89F4EFE3021>