[libc-commits] [libc] 9a579d6 - [libc][math] Remove the unused dp_trig target and tests.

Siva Chandra Reddy via libc-commits libc-commits at lists.llvm.org
Wed Apr 19 16:12:05 PDT 2023


Author: Siva Chandra Reddy
Date: 2023-04-19T23:11:34Z
New Revision: 9a579d62e855bb013858d433ddd089a43245bce2

URL: https://github.com/llvm/llvm-project/commit/9a579d62e855bb013858d433ddd089a43245bce2
DIFF: https://github.com/llvm/llvm-project/commit/9a579d62e855bb013858d433ddd089a43245bce2.diff

LOG: [libc][math] Remove the unused dp_trig target and tests.

Added: 
    

Modified: 
    libc/src/math/generic/CMakeLists.txt
    libc/test/src/math/CMakeLists.txt

Removed: 
    libc/src/math/generic/dp_trig.cpp
    libc/src/math/generic/dp_trig.h
    libc/test/src/math/mod_k_pi_test.cpp


################################################################################
diff  --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 9fe0fce1c8a67..ac48e9cef7a38 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -1205,21 +1205,6 @@ add_entrypoint_object(
     -O2
 )
 
-add_object_library(
-  dp_trig
-  SRCS
-    dp_trig.cpp
-  HDRS
-    dp_trig.h
-  DEPENDS
-    libc.src.__support.FPUtil.fp_bits
-    libc.src.__support.FPUtil.manipulation_functions
-    libc.src.__support.FPUtil.xfloat
-    libc.src.__support.uint
-  COMPILE_OPTIONS
-   -O3
-)
-
 add_entrypoint_object(
   fmod
   SRCS

diff  --git a/libc/src/math/generic/dp_trig.cpp b/libc/src/math/generic/dp_trig.cpp
deleted file mode 100644
index 3fa9d4a0ca0fe..0000000000000
--- a/libc/src/math/generic/dp_trig.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//===-- Utilities for double precision trigonometric functions ------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "src/__support/FPUtil/FPBits.h"
-#include "src/__support/FPUtil/ManipulationFunctions.h"
-#include "src/__support/FPUtil/UInt.h"
-#include "src/__support/FPUtil/XFloat.h"
-
-using FPBits = __llvm_libc::fputil::FPBits<double>;
-
-namespace __llvm_libc {
-
-// Implementation is based on the Payne and Hanek range reduction algorithm.
-// The caller should ensure that x is positive.
-// Consider:
-//   x/y = x * 1/y = I + F
-// I is the integral part and F the fractional part of the result of the
-// division operation. Then M = mod(x, y) = F * y. In order to compute M, we
-// first compute F. We do it by dropping bits from 1/y which would only
-// contribute integral results in the operation x * 1/y. This helps us get
-// accurate values of F even when x is a very large number.
-//
-// Internal operations are performed at 192 bits of precision.
-static double mod_impl(double x, const uint64_t y_bits[3],
-                       const uint64_t inv_y_bits[20], int y_exponent,
-                       int inv_y_exponent) {
-  FPBits bits(x);
-  int exponent = bits.get_exponent();
-  int bit_drop = (exponent - 52) + inv_y_exponent + 1;
-  bit_drop = bit_drop >= 0 ? bit_drop : 0;
-  int word_drop = bit_drop / 64;
-  bit_drop %= 64;
-  fputil::UInt<256> man4;
-  for (size_t i = 0; i < 4; ++i) {
-    man4[3 - i] = inv_y_bits[word_drop + i];
-  }
-  man4.shift_left(bit_drop);
-  fputil::UInt<192> man_bits;
-  for (size_t i = 0; i < 3; ++i)
-    man_bits[i] = man4[i + 1];
-  fputil::XFloat<192> result(inv_y_exponent - word_drop * 64 - bit_drop,
-                             man_bits);
-  result.mul(x);
-  result.drop_int(); // |result| now holds fractional part of x/y.
-
-  fputil::UInt<192> y_man;
-  for (size_t i = 0; i < 3; ++i)
-    y_man[i] = y_bits[2 - i];
-  fputil::XFloat<192> y_192(y_exponent, y_man);
-  return result.mul(y_192);
-}
-
-static constexpr int TwoPIExponent = 2;
-
-// The mantissa bits of 2 * PI.
-// The most signification bits are in the first uint64_t word
-// and the least signification bits are in the last word. The
-// first word includes the implicit '1' bit.
-static constexpr uint64_t TwoPI[] = {0xc90fdaa22168c234, 0xc4c6628b80dc1cd1,
-                                     0x29024e088a67cc74};
-
-static constexpr int InvTwoPIExponent = -3;
-
-// The mantissa bits of 1/(2 * PI).
-// The most signification bits are in the first uint64_t word
-// and the least signification bits are in the last word. The
-// first word includes the implicit '1' bit.
-static constexpr uint64_t InvTwoPI[] = {
-    0xa2f9836e4e441529, 0xfc2757d1f534ddc0, 0xdb6295993c439041,
-    0xfe5163abdebbc561, 0xb7246e3a424dd2e0, 0x6492eea09d1921c,
-    0xfe1deb1cb129a73e, 0xe88235f52ebb4484, 0xe99c7026b45f7e41,
-    0x3991d639835339f4, 0x9c845f8bbdf9283b, 0x1ff897ffde05980f,
-    0xef2f118b5a0a6d1f, 0x6d367ecf27cb09b7, 0x4f463f669e5fea2d,
-    0x7527bac7ebe5f17b, 0x3d0739f78a5292ea, 0x6bfb5fb11f8d5d08,
-    0x56033046fc7b6bab, 0xf0cfbc209af4361e};
-
-double mod_2pi(double x) {
-  static constexpr double _2pi = 6.283185307179586;
-  if (x < _2pi)
-    return x;
-  return mod_impl(x, TwoPI, InvTwoPI, TwoPIExponent, InvTwoPIExponent);
-}
-
-// Returns mod(x, pi/2)
-double mod_pi_over_2(double x) {
-  static constexpr double pi_over_2 = 1.5707963267948966;
-  if (x < pi_over_2)
-    return x;
-  return mod_impl(x, TwoPI, InvTwoPI, TwoPIExponent - 2, InvTwoPIExponent + 2);
-}
-
-// Returns mod(x, pi/4)
-double mod_pi_over_4(double x) {
-  static constexpr double pi_over_4 = 0.7853981633974483;
-  if (x < pi_over_4)
-    return x;
-  return mod_impl(x, TwoPI, InvTwoPI, TwoPIExponent - 3, InvTwoPIExponent + 3);
-}
-
-} // namespace __llvm_libc

diff  --git a/libc/src/math/generic/dp_trig.h b/libc/src/math/generic/dp_trig.h
deleted file mode 100644
index a724da04c1717..0000000000000
--- a/libc/src/math/generic/dp_trig.h
+++ /dev/null
@@ -1,22 +0,0 @@
-//===-- Utilities for double precision trigonometric functions --*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC_MATH_GENERIC_DP_TRIG_H
-#define LLVM_LIBC_SRC_MATH_GENERIC_DP_TRIG_H
-
-namespace __llvm_libc {
-
-double mod_2pi(double);
-
-double mod_pi_over_2(double);
-
-double mod_pi_over_4(double);
-
-} // namespace __llvm_libc
-
-#endif // LLVM_LIBC_SRC_MATH_GENERIC_DP_TRIG_H

diff  --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index c4b883a2f988c..c8fa74da00440 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -1267,18 +1267,6 @@ add_fp_unittest(
     libc.src.__support.FPUtil.fp_bits
 )
 
-add_fp_unittest(
-  mod_k_pi_test
-  NEED_MPFR
-  SUITE
-    libc-long-running-tests
-  SRCS
-    mod_k_pi_test.cpp
-  DEPENDS
-    libc.src.math.generic.dp_trig
-    libc.src.__support.FPUtil.fp_bits
-)
-
 add_fp_unittest(
   logf_test
   NEED_MPFR

diff  --git a/libc/test/src/math/mod_k_pi_test.cpp b/libc/test/src/math/mod_k_pi_test.cpp
deleted file mode 100644
index ef34027f83b80..0000000000000
--- a/libc/test/src/math/mod_k_pi_test.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//===-- Unittests mod_2pi, mod_pi_over_4 and mod_pi_over_2 ----------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "src/math/generic/dp_trig.h"
-#include "test/UnitTest/FPMatcher.h"
-#include "test/UnitTest/Test.h"
-#include "utils/MPFRWrapper/MPFRUtils.h"
-
-#include <math.h>
-
-namespace mpfr = __llvm_libc::testing::mpfr;
-using FPBits = __llvm_libc::fputil::FPBits<double>;
-using UIntType = FPBits::UIntType;
-
-TEST(LlvmLibcMod2PITest, Range) {
-  constexpr UIntType count = 1000000000;
-  constexpr UIntType step = UIntType(-1) / count;
-  for (UIntType i = 0, v = 0; i <= count; ++i, v += step) {
-    double x = double(FPBits(v));
-    if (isnan(x) || isinf(x) || x <= 0.0)
-      continue;
-
-    ASSERT_MPFR_MATCH(mpfr::Operation::Mod2PI, x, __llvm_libc::mod_2pi(x), 0);
-  }
-}
-
-TEST(LlvmLibcModPIOver2Test, Range) {
-  constexpr UIntType count = 1000000000;
-  constexpr UIntType step = UIntType(-1) / count;
-  for (UIntType i = 0, v = 0; i <= count; ++i, v += step) {
-    double x = double(FPBits(v));
-    if (isnan(x) || isinf(x) || x <= 0.0)
-      continue;
-
-    ASSERT_MPFR_MATCH(mpfr::Operation::ModPIOver2, x,
-                      __llvm_libc::mod_pi_over_2(x), 0);
-  }
-}
-
-TEST(LlvmLibcModPIOver4Test, Range) {
-  constexpr UIntType count = 1000000000;
-  constexpr UIntType step = UIntType(-1) / count;
-  for (UIntType i = 0, v = 0; i <= count; ++i, v += step) {
-    double x = double(FPBits(v));
-    if (isnan(x) || isinf(x) || x <= 0.0)
-      continue;
-
-    ASSERT_MPFR_MATCH(mpfr::Operation::ModPIOver4, x,
-                      __llvm_libc::mod_pi_over_4(x), 0);
-  }
-}


        


More information about the libc-commits mailing list