Update the utility functions for checking exceptional values of math
functions to use cpp::optional return values.
Details
Details
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
| libc/src/__support/FPUtil/except_value_utils.h | ||
|---|---|---|
| 43 | I want to suggest a rearrangement: template <typename T, size_t N> struct ExceptValues {
  static_assert(cpp::is_floating_point_v<T>, "...");
  using UIntType = typename FPBits<T>::UIntType;
  struct Mapping { // This is the same as ExceptValueOutput from above with an additional field
    UIntType input;
    UIntType rnd_towardzero_result;
    ...
  };
  Mapping values[N];
  // You can choose to prevent implicit type promotions and convertions using enable_if
  constexpr cpp::optional<T> lookup(UIntType bits) const {
    ...
  }
  constexpr cpp::optional<T> lookup(T x) const {
    // Implement this method if required
  }
  constexpr cpp::optional<T> lookup_odd(UIntType bits) const {
    ...
  }
  constexpr cpp::optional<T> lookup_odd(T x) const (
    // Implement this method if required.
  }
}; | |
| libc/src/math/generic/cosf.cpp | ||
| 110 | Patterns like this should get simplified to: if (auto r = COSF_EXCEPTS.lookup(x_abs); unlikely(r)) return r; | |
| libc/src/math/generic/cosf.cpp | ||
|---|---|---|
| 110 | I tried it but our current implementation of cpp::optional has no implicit conversion to T and the conversion to bool is explicit. | |
| libc/src/math/generic/cosf.cpp | ||
|---|---|---|
| 110 | Ah yes! We should do *r but thats a nitty nit at this point. | |
I want to suggest a rearrangement:
template <typename T, size_t N> struct ExceptValues { static_assert(cpp::is_floating_point_v<T>, "..."); using UIntType = typename FPBits<T>::UIntType; struct Mapping { // This is the same as ExceptValueOutput from above with an additional field UIntType input; UIntType rnd_towardzero_result; ... }; Mapping values[N]; // You can choose to prevent implicit type promotions and convertions using enable_if constexpr cpp::optional<T> lookup(UIntType bits) const { ... } constexpr cpp::optional<T> lookup(T x) const { // Implement this method if required } constexpr cpp::optional<T> lookup_odd(UIntType bits) const { ... } constexpr cpp::optional<T> lookup_odd(T x) const ( // Implement this method if required. } };