]> granicus.if.org Git - clang/commitdiff
Basic: make the nan family pure
authorSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 17 Oct 2017 03:30:25 +0000 (03:30 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 17 Oct 2017 03:30:25 +0000 (03:30 +0000)
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

include/clang/Basic/Builtins.def
test/CodeGen/libcall-declarations.c

index 1873c2e3d38c97164ce73ab19c060c464dbc1c9e..fef46da2d7ea94b811f349441f47f3adc1de3af9 100644 (file)
@@ -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)
index 83b35fe3d0da2e3bfa3e4545a3af68d0a2081335..8a93b402ab7a9c12144ca1307cbf121cc13667e0 100644 (file)
@@ -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{{.*}} }