[all-commits] [llvm/llvm-project] 15b938: [libc] Change sinf range reduction to mod pi/16 to...

lntue via All-commits all-commits at lists.llvm.org
Wed Jul 27 09:24:03 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 15b9380dfd4e5e9d5c47f2627394623c64dc61e8
      https://github.com/llvm/llvm-project/commit/15b9380dfd4e5e9d5c47f2627394623c64dc61e8
  Author: Tue Ly <lntue at google.com>
  Date:   2022-07-27 (Wed, 27 Jul 2022)

  Changed paths:
    M libc/docs/math.rst
    M libc/src/math/generic/CMakeLists.txt
    M libc/src/math/generic/common_constants.cpp
    M libc/src/math/generic/common_constants.h
    M libc/src/math/generic/range_reduction.h
    M libc/src/math/generic/range_reduction_fma.h
    M libc/src/math/generic/sinf.cpp
    M utils/bazel/llvm-project-overlay/libc/BUILD.bazel

  Log Message:
  -----------
  [libc] Change sinf range reduction to mod pi/16 to be shared with cosf.

Change `sinf` range reduction to mod pi/16 to be shared with `cosf`.

Previously, `sinf` used range reduction `mod pi`, but this cannot be used to implement `cosf` since the minimax algorithm for `cosf` does not converge due to critical points at `pi/2`.  In order to be able to share the same range reduction functions for both `sinf` and `cosf`, we change the range reduction to `mod pi/16` for the following reasons:
- The table size is sufficiently small: 32 entries for `sin(k * pi/16)` with `k = 0..31`.  It could be reduced to 16 entries if we treat the final sign separately, with an extra multiplication at the end.
- The polynomials' degrees are reduced to 7/8 from 15, with extra computations to combine `sin` and `cos` with trig sum equality.
- The number of exceptional cases reduced to 2 (with FMA) and 3 (without FMA).
- The latency is reduced while maintaining similar throughput as before.

Reviewed By: zimmermann6

Differential Revision: https://reviews.llvm.org/D130629




More information about the All-commits mailing list