From: Saleem Abdulrasool Date: Tue, 17 Oct 2017 03:30:25 +0000 (+0000) Subject: Basic: make the nan family pure X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=185bad56b324fc6da4bc6264cf98b2a743241549;p=clang Basic: make the nan family pure The nan family of math routines do not rely on global state. They do however depend on their parameter. This fits the description of pure: Functions which have no effects except the return value and their return value depends only on the parameters and/or global variables. Mark the family as `readonly`. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315968 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index 1873c2e3d3..fef46da2d7 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -1008,9 +1008,9 @@ LIBBUILTIN(modf, "ddd*", "fn", "math.h", ALL_LANGUAGES) LIBBUILTIN(modff, "fff*", "fn", "math.h", ALL_LANGUAGES) LIBBUILTIN(modfl, "LdLdLd*", "fn", "math.h", ALL_LANGUAGES) -LIBBUILTIN(nan, "dcC*", "fn", "math.h", ALL_LANGUAGES) -LIBBUILTIN(nanf, "fcC*", "fn", "math.h", ALL_LANGUAGES) -LIBBUILTIN(nanl, "LdcC*", "fn", "math.h", ALL_LANGUAGES) +LIBBUILTIN(nan, "dcC*", "fUn", "math.h", ALL_LANGUAGES) +LIBBUILTIN(nanf, "fcC*", "fUn", "math.h", ALL_LANGUAGES) +LIBBUILTIN(nanl, "LdcC*", "fUn", "math.h", ALL_LANGUAGES) LIBBUILTIN(pow, "ddd", "fne", "math.h", ALL_LANGUAGES) LIBBUILTIN(powf, "fff", "fne", "math.h", ALL_LANGUAGES) diff --git a/test/CodeGen/libcall-declarations.c b/test/CodeGen/libcall-declarations.c index 83b35fe3d0..8a93b402ab 100644 --- a/test/CodeGen/libcall-declarations.c +++ b/test/CodeGen/libcall-declarations.c @@ -330,9 +330,9 @@ void *use[] = { // CHECK-NOERRNO: declare double @ldexp(double, i32) [[NUWRN]] // CHECK-NOERRNO: declare float @ldexpf(float, i32) [[NUWRN]] // CHECK-NOERRNO: declare x86_fp80 @ldexpl(x86_fp80, i32) [[NUWRN]] -// CHECK-NOERRNO: declare double @nan(i8*) [[NUW:#[0-9]+]] -// CHECK-NOERRNO: declare float @nanf(i8*) [[NUW]] -// CHECK-NOERRNO: declare x86_fp80 @nanl(i8*) [[NUW]] +// CHECK-NOERRNO: declare double @nan(i8*) [[NUWRO:#[0-9]+]] +// CHECK-NOERRNO: declare float @nanf(i8*) [[NUWRO]] +// CHECK-NOERRNO: declare x86_fp80 @nanl(i8*) [[NUWRO]] // CHECK-NOERRNO: declare double @pow(double, double) [[NUWRN]] // CHECK-NOERRNO: declare float @powf(float, float) [[NUWRN]] // CHECK-NOERRNO: declare x86_fp80 @powl(x86_fp80, x86_fp80) [[NUWRN]] @@ -539,9 +539,9 @@ void *use[] = { // CHECK-ERRNO: declare double @fabs(double) [[NUWRN]] // CHECK-ERRNO: declare float @fabsf(float) [[NUWRN]] // CHECK-ERRNO: declare x86_fp80 @fabsl(x86_fp80) [[NUWRN]] -// CHECK-ERRNO: declare double @nan(i8*) [[NUW:#[0-9]+]] -// CHECK-ERRNO: declare float @nanf(i8*) [[NUW]] -// CHECK-ERRNO: declare x86_fp80 @nanl(i8*) [[NUW]] +// CHECK-ERRNO: declare double @nan(i8*) [[NUWRO:#[0-9]+]] +// CHECK-ERRNO: declare float @nanf(i8*) [[NUWRO]] +// CHECK-ERRNO: declare x86_fp80 @nanl(i8*) [[NUWRO]] // CHECK-ERRNO: declare double @ceil(double) [[NUWRN]] // CHECK-ERRNO: declare float @ceilf(float) [[NUWRN]] // CHECK-ERRNO: declare x86_fp80 @ceill(x86_fp80) [[NUWRN]] @@ -615,11 +615,7 @@ void *use[] = { // CHECK-ERRNO: declare <2 x float> @ctanhf(<2 x float>) [[NUWRN]] // CHECK-NOERRNO: attributes [[NUWRN]] = { nounwind readnone{{.*}} } -// CHECK-NOERRNO: attributes [[NUW]] = { nounwind -// CHECK-NOERRNO-NOT: readnone -// CHECK-NOERRNO-SAME: {{.*}} } +// CHECK-NOERRNO: attributes [[NUWRO]] = { nounwind readonly{{.*}} } -// CHECK-ERRNO: attributes [[NUW]] = { nounwind -// CHECK-ERRNO-NOT: readnone -// CHECK-ERRNO-SAME: {{.*}} } // CHECK-ERRNO: attributes [[NUWRN]] = { nounwind readnone{{.*}} } +// CHECK-ERRNO: attributes [[NUWRO]] = { nounwind readonly{{.*}} }