Eli,
Here's the first patch -- adding of the missing 'n' (nothrow) flag to the
existing libm LIBBUILTIN definitions (plus a test case -- unfortunately making
the source also valid C++ seems to make the test case uglier).
Thanks again,
Hal
----- Original Message -----
>
> On Fri, Sep 6, 2013 at 3:53 PM, Hal Finkel < [email protected] > wrote:
>
>
>
>
>
>
> ----- Original Message -----
> >
> > On Fri, Sep 6, 2013 at 3:32 PM, Hal Finkel < [email protected] >
> > wrote:
> >
> >
> >
> >
> >
> >
> > ----- Original Message -----
> > >
> > > On Fri, Sep 6, 2013 at 8:27 AM, Hal Finkel < [email protected] >
> > > wrote:
> > >
> > >
> > >
> > >
> > > Ben, Chad, et al.,
> > >
> > > The attached patch cleans up the LIBBUILTIN libm function
> > > definitions, and improves the way in which -ftrapping-math is
> > > handled in a complementary way. Specifically, this patch:
> > >
> > > 1. The libm LIBBUILTIN definitions are synchronized with the
> > > __builtin_* definitions for libm functions. We currently have
> > > __builtin_* definitions for many more functions than those for
> > > which
> > > we have LIBBUILTIN definitions. This unnecessarily pessimizes
> > > code
> > > generation around many of the remaining libm functions.
> > >
> > > 2. Many of these functions can be marked as readnone so long as
> > > we
> > > can neglect floating point exceptions. I've added a new specifier
> > > 'T', which like 'e' for errno, marks the builtin as const so long
> > > as
> > > trapping math is disabled. I've added a TrappingMath lang option
> > > to
> > > track this.
> > >
> > > 3. Disables -ftrapping-math by default. This is currently enabled
> > > by
> > > default (following gcc), but this is silly. No system of which
> > > I'm
> > > aware actually traps on floating-point exceptions by default
> > > (some
> > > system-specific mechanism is necessary in order to enable SIGFPE
> > > generation). In addition, in Clang, we currently don't support
> > > fenv
> > > access. As a result, we can turn this off by default (and enable
> > > better code generation around the functions for which we have
> > > LIBBUILTIN definitions).
> > >
> > > 4. Updates the CodeGen/libcall-declarations.c test case.
> > >
> > > As a side effect, the existing libm LIBBUILTIN definitions that
> > > were
> > > missing the 'n' (nothrow) specifier now have it.
> > >
> > >
> > >
> > > For clarity, please split the patch into four separate patches:
> > > reformatting, adding missing 'n' specifiers, the
> > > trapping-math-related changes, and adding new LIBBUILTIN
> > > definitions
> > > (preferably in that order). As it is, the Builtins.def changes
> > > are
> > > completely unreviewable.
> >
> > Unfortunately, because almost all of the LIBBUILTIN's in the patch
> > are new, I don't think that splitting the patch will help that :(
> > --
> > FWIW, I think that reviewing the Builtins.def changes means, in
> > practice (either trusting me, or) going through the documentation
> > on
> > each of those functions to make sure that the flags are correct. I
> > don't think that splitting the patch makes that easier either.
> >
> > Nevertheless, I'll split the changes and re-post as separate
> > patches.
> > Maybe I'm wrong ;)
> >
> >
> >
> > I didn't try to count how many were new... it looked like you were
> > changing a bunch of existing ones, but if the balance is as you
> > say,
> > it might not be as useful as I'd hope.
>
> There may have been a few changes to the existing ones, I'll go over
> them again, and try to make that more clear in the splitting.
>
>
> >
> >
> >
> > >
> > > Your changes could be substantially simplified if we don't allow
> > > enabling -ftrapping-math; as you've noted, we don't honor it
> > > anyway.
> > > What do you think?
> >
> > I considered that, but I think that we might as well not make the
> > situation worse for users who do enable trapping math for debugging
> > purposes (as I do myself on occasion).
> >
> >
> > Debugging how, exactly?
>
> If I have an application that is producing NaNs, Inf, etc. where that
> is not expected, I can add something like this:
>
> #include <fenv.h>
> #if defined(__i386__) && defined(__SSE__)
> #include <xmmintrin.h>
> #endif
>
> ...
>
> #if defined(FE_NOMASK_ENV) && !defined(__INTEL_COMPILER)
> fesetenv(FE_NOMASK_ENV);
> fedisableexcept(/* FE_OVERFLOW | */ FE_UNDERFLOW | FE_INEXACT);
> #elif defined(__i386__) && defined(__SSE__)
> _MM_SET_EXCEPTION_MASK(_MM_GET_EXCEPTION_MASK() &
> ~(_MM_MASK_OVERFLOW|_MM_MASK_INVALID|_MM_MASK_DIV_ZERO));
> #endif
>
> to the beginning of the code. Then I should get a much better idea
> (based on when the SIGFPE is delivered) of where the problem is.
>
>
>
> Ah, interesting.
>
>
>
>
> >
> >
> > With these changes, we'll mark a lot more libm functions that could
> > trap when exceptions are enabled as readnone (including some which
> > never set errno), and if we ignore -ftrapping-math completely,
> > we'll
> > provide no way of indicating that those functions have side effects
> > when we're interested in floating point exceptions.
> >
> >
> > Providing -ftrapping-math as an option is deceptive at best because
> > clang will break code which expects us to honor -ftrapping-math,
> > even if it doesn't even use any library calls.
>
> Fair enough. I'll leave that out for now, and we can always revisit
> it later if someone cares.
>
> As a separate patch, we could issue a warning (or an error?) if
> -ftrapping-math is provided?
>
>
>
>
> Yes, that's a good idea.
>
>
> -Eli
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def
index ad39bd7..4509075 100644
--- a/include/clang/Basic/Builtins.def
+++ b/include/clang/Basic/Builtins.def
@@ -816,25 +816,25 @@ LIBBUILTIN(NSLog, "vG.", "fp:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)
LIBBUILTIN(NSLogv, "vGa", "fP:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)
// Builtin math library functions
-LIBBUILTIN(acos, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(acosl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(acosf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acos, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acosl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(acosf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(asin, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(asinl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(asinf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asin, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(asinf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atan, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atanl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atanf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atanf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atan2, "ddd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atan2l, "LdLdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(atan2f, "fff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan2, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan2l, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(atan2f, "fff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(ceil, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(ceill, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(ceilf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ceil, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ceill, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(ceilf, "ff", "fnc", "math.h", ALL_LANGUAGES)
LIBBUILTIN(cimag, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
LIBBUILTIN(cimagf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
@@ -844,85 +844,85 @@ LIBBUILTIN(creal, "dXd", "fnc", "complex.h", ALL_LANGUAGES)
LIBBUILTIN(crealf, "fXf", "fnc", "complex.h", ALL_LANGUAGES)
LIBBUILTIN(creall, "LdXLd", "fnc", "complex.h", ALL_LANGUAGES)
-LIBBUILTIN(copysign, "ddd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(copysignl, "LdLdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(copysignf, "fff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(copysign, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(copysignl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(copysignf, "fff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(cos, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(cosl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(cosf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cos, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cosl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(cosf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(exp, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(expl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(expf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(expf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(exp2, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(exp2l, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(exp2f, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp2, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp2l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(exp2f, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fabs, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fabsl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fabsf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fabs, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fabsl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fabsf, "ff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(floor, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(floorl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(floorf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(floor, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(floorl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(floorf, "ff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fma, "dddd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmal, "LdLdLdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmaf, "ffff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fma, "dddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmal, "LdLdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaf, "ffff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmax, "ddd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmaxl, "LdLdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmaxf, "fff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmax, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaxl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmaxf, "fff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fmin, "ddd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fminl, "LdLdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(fminf, "fff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fmin, "ddd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fminl, "LdLdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(fminf, "fff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(log, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(logl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(logf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(logf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(log2, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(log2l, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(log2f, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log2, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log2l, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(log2f, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(lrint, "Lid", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(lrintl, "LiLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(lrintf, "Lif", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lrint, "Lid", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lrintl, "LiLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(lrintf, "Lif", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(nearbyint, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(nearbyintl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(nearbyintf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nearbyint, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nearbyintl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nearbyintf, "ff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(pow, "ddd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(powl, "LdLdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(powf, "fff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(pow, "ddd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(powl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(powf, "fff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(rint, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(rintl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(rintf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(rint, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(rintl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(rintf, "ff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(round, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(roundl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(roundf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(round, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(roundl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(roundf, "ff", "fnc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sin, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sinl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sinf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sin, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sinf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sqrt, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sqrtl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(sqrtf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sqrt, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sqrtl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(sqrtf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(tan, "dd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(tanl, "LdLd", "fe", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(tanf, "ff", "fe", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tan, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanl, "LdLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(tanf, "ff", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(trunc, "dd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(truncl, "LdLd", "fc", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(truncf, "ff", "fc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(trunc, "dd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(truncl, "LdLd", "fnc", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(truncf, "ff", "fnc", "math.h", ALL_LANGUAGES)
// Blocks runtime Builtin math library functions
LIBBUILTIN(_Block_object_assign, "vv*vC*iC", "f", "Blocks.h", ALL_LANGUAGES)
diff --git a/test/CodeGen/libcall-declarations.c b/test/CodeGen/libcall-declarations.c
index c78e9be..4849f1b 100644
--- a/test/CodeGen/libcall-declarations.c
+++ b/test/CodeGen/libcall-declarations.c
@@ -1,7 +1,12 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm %s | FileCheck %s -check-prefix=CHECK-NOERRNO
// RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO
+// RUN: %clang_cc1 -triple x86_64-apple-darwin12 -S -o - -emit-llvm -x c++ %s | FileCheck %s -check-prefix=CHECK-NOERRNO
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -S -o - -emit-llvm -x c++ -fmath-errno %s | FileCheck %s -check-prefix=CHECK-ERRNO
// Prototypes.
+#ifdef __cplusplus
+extern "C" {
+#endif
double acos(double);
long double acosl(long double);
float acosf(float);
@@ -77,17 +82,25 @@ float tanf(float);
double trunc(double);
long double truncl(long double);
float truncf(float);
+#ifdef __cplusplus
+}
+#endif
// Force emission of the declare statements.
-void *use[] = { acos, acosl, acosf, asin, asinl, asinf, atan, atanl, atanf,
- atan2, atan2l, atan2f, ceil, ceill, ceilf, copysign, copysignl,
- copysignf, cos, cosl, cosf, exp, expl, expf, exp2, exp2l, exp2f,
- fabs, fabsl, fabsf, floor, floorl, floorf, fma, fmal, fmaf,
- fmax, fmaxl, fmaxf, fmin, fminl, fminf, log, logl, logf, log2,
- log2l, log2f, lrint, lrintl, lrintf, nearbyint, nearbyintl,
- nearbyintf, pow, powl, powf, rint, rintl, rintf, round, roundl,
- roundf, sin, sinl, sinf, sqrt, sqrtl, sqrtf, tan, tanl, tanf,
- trunc, truncl, truncf };
+#define F(x) ((void*)x)
+void *use[] = { F(acos), F(acosl), F(acosf), F(asin), F(asinl), F(asinf),
+ F(atan), F(atanl), F(atanf), F(atan2), F(atan2l), F(atan2f),
+ F(ceil), F(ceill), F(ceilf), F(copysign), F(copysignl),
+ F(copysignf), F(cos), F(cosl), F(cosf), F(exp), F(expl),
+ F(expf), F(exp2), F(exp2l), F(exp2f), F(fabs), F(fabsl),
+ F(fabsf), F(floor), F(floorl), F(floorf), F(fma), F(fmal),
+ F(fmaf), F(fmax), F(fmaxl), F(fmaxf), F(fmin), F(fminl),
+ F(fminf), F(log), F(logl), F(logf), F(log2), F(log2l),
+ F(log2f), F(lrint), F(lrintl), F(lrintf), F(nearbyint),
+ F(nearbyintl), F(nearbyintf), F(pow), F(powl), F(powf),
+ F(rint), F(rintl), F(rintf), F(round), F(roundl), F(roundf),
+ F(sin), F(sinl), F(sinf), F(sqrt), F(sqrtl), F(sqrtf), F(tan),
+ F(tanl), F(tanf), F(trunc), F(truncl), F(truncf) };
// CHECK-NOERRNO: declare double @acos(double) [[NUW:#[0-9]+]]
// CHECK-NOERRNO: declare x86_fp80 @acosl(x86_fp80) [[NUW]]
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits