[libc-commits] [PATCH] D129918: [libc] Add utility classes for checking exceptional values.

Siva Chandra via Phabricator via libc-commits libc-commits at lists.llvm.org
Mon Jul 18 14:19:00 PDT 2022


sivachandra added a subscriber: jeffbailey.
sivachandra added inline comments.


================
Comment at: libc/src/__support/FPUtil/except_value_utils.h:42-45
+  //   output[i][0]: output bits corresponding to FE_TOWARDZERO
+  //   output[i][1]: offset for FE_UPWARD
+  //   output[i][2]: offset for FE_DOWNWARD
+  //   output[i][3]: offset for FE_TONEAREST
----------------
May be use a struct?

```
template <typename T> struct ExceptValueOuput {
  T rnd_towardzero_result;
  T rnd_upward_offset;
  T rnd_downward_offset;
  T rnd_nearest_offset;
}
```


================
Comment at: libc/src/__support/FPUtil/except_value_utils.h:54
+
+  static bool check(const ExceptionalValues &ExceptionalValues, UIntType x_bits,
+                    T &result) {
----------------
Because of the name like `check`, I was thinking this is a test utility. May be call it `expect_value_output` or something like that?

Also, @jeffbailey is working on an equivalent of `std::optional`: https://reviews.llvm.org/D129920. It seems like using it here would be appropriate? 

Lastly, does it have to be a static method - can it not be a non-static method? Then, you can name the method just `get_output`?


================
Comment at: libc/src/__support/FPUtil/except_value_utils.h:57
+    for (int i = 0; i < N; ++i) {
+      if (unlikely(x_bits == ExceptVals.inputs[i])) {
+        UIntType out_bits = ExceptVals.outputs[i][0]; // FE_TOWARDZERO
----------------
I still see typos and improper naming conventions - for example, I think you want to using `ExceptionalValues` here and not `ExceptValues`? Which makes wonder if this is being sufficiently tested? If not in use, just remove it? 


================
Comment at: libc/src/__support/FPUtil/except_value_utils.h:78
+
+  static bool check_odd_func(const ExceptionalValues &ExceptVals,
+                             UIntType x_abs, bool sign, T &result) {
----------------
Can you add documentation about this method so that it is clear as to why it there at all?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129918/new/

https://reviews.llvm.org/D129918



More information about the libc-commits mailing list