Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Sep 2012 11:14:56 +0200
From:      Roman Divacky <rdivacky@freebsd.org>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        Ian Lepore <freebsd@damnhippie.dyndns.org>, Brooks Davis <brooks@freebsd.org>, current@freebsd.org, Dimitry Andric <dim@freebsd.org>, toolchain@freebsd.org, Tijl Coosemans <tijl@coosemans.org>, Nathan Whitehorn <nwhitehorn@freebsd.org>
Subject:   Re: Clang as default compiler November 4th
Message-ID:  <20120915091455.GA93876@freebsd.org>
In-Reply-To: <20120915010600.GA70426@troutmask.apl.washington.edu>
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>

next in thread | previous in thread | raw e-mail | index | archive | help
LLVM by default turns these:

    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:

from lib calls to direct code (ie. instruction or sequence of). This is not a "bug"
but feature ;)

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.

Steve, you tested on i386? Can you test on amd64?

Do you guys have any opinion what to do here?

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:
> > 
> > A third class of failure appears to be that clang emits
> > i387 fpu instructions for at least sinf and cosf instead 
> > of calls to the library routines.  AFAIK, the library
> > routines are faster and more accurate.
> > 
> 
> Yep. Clang has problems with at least sinf on i386 FreeBSD.
> 
> % pwd
> /usr/home/kargl/trunk/math/sine
> 
> % make clean && make CC=cc 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
> 
> % ./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
> 
> % make clean && make CC=clang 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
> 
> % ./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
> 
> -- 
> 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"



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