[llvm-branch-commits] [compiler-rt] 3647da2 - Revert "[compiler-rt][nsan] Add support for nan detection (#101531)"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Aug 23 17:33:39 PDT 2024


Author: Vitaly Buka
Date: 2024-08-23T17:33:36-07:00
New Revision: 3647da280aa248430d8539db5045f57563223e56

URL: https://github.com/llvm/llvm-project/commit/3647da280aa248430d8539db5045f57563223e56
DIFF: https://github.com/llvm/llvm-project/commit/3647da280aa248430d8539db5045f57563223e56.diff

LOG: Revert "[compiler-rt][nsan] Add support for nan detection (#101531)"

This reverts commit 283dff4593dbbd68594606cda9fbd3631e6648dc.

Added: 
    

Modified: 
    compiler-rt/lib/nsan/nsan.cpp
    compiler-rt/lib/nsan/nsan_flags.inc

Removed: 
    compiler-rt/test/nsan/nan.cpp
    compiler-rt/test/nsan/softmax.cpp
    compiler-rt/test/nsan/vec_sqrt.cpp
    compiler-rt/test/nsan/vec_sqrt_ext.cpp


################################################################################
diff  --git a/compiler-rt/lib/nsan/nsan.cpp b/compiler-rt/lib/nsan/nsan.cpp
index 5bb0cf2b694d5d..bfa55c317cfe79 100644
--- a/compiler-rt/lib/nsan/nsan.cpp
+++ b/compiler-rt/lib/nsan/nsan.cpp
@@ -445,32 +445,6 @@ int32_t checkFT(const FT value, ShadowFT Shadow, CheckTypeT CheckType,
   const InternalFT check_value = value;
   const InternalFT check_shadow = Shadow;
 
-  // We only check for NaNs in the value, not the shadow.
-  if (flags().check_nan && isnan(check_value)) {
-    GET_CALLER_PC_BP;
-    BufferedStackTrace stack;
-    stack.Unwind(pc, bp, nullptr, false);
-    if (GetSuppressionForStack(&stack, CheckKind::Consistency)) {
-      // FIXME: optionally print.
-      return flags().resume_after_suppression ? kResumeFromValue
-                                              : kContinueWithShadow;
-    }
-    Decorator D;
-    Printf("%s", D.Warning());
-    Printf("WARNING: NumericalStabilitySanitizer: NaN detected\n");
-    Printf("%s", D.Default());
-    stack.Print();
-    if (flags().halt_on_error) {
-      if (common_flags()->abort_on_error)
-        Printf("ABORTING\n");
-      else
-        Printf("Exiting\n");
-      Die();
-    }
-    // Performing other tests for NaN values is meaningless when dealing with numbers.
-    return kResumeFromValue;
-  }
-
   // See this article for an interesting discussion of how to compare floats:
   // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
   static constexpr const FT Eps = FTInfo<FT>::kEpsilon;

diff  --git a/compiler-rt/lib/nsan/nsan_flags.inc b/compiler-rt/lib/nsan/nsan_flags.inc
index 7c9e579d91fc33..658cd5b3b01bf4 100644
--- a/compiler-rt/lib/nsan/nsan_flags.inc
+++ b/compiler-rt/lib/nsan/nsan_flags.inc
@@ -48,5 +48,3 @@ NSAN_FLAG(bool, enable_loadtracking_stats, false,
           "due to invalid or unknown types.")
 NSAN_FLAG(bool, poison_in_free, true, "")
 NSAN_FLAG(bool, print_stats_on_exit, false, "If true, print stats on exit.")
-NSAN_FLAG(bool, check_nan, false,
-          "If true, check the floating-point number is nan")
\ No newline at end of file

diff  --git a/compiler-rt/test/nsan/nan.cpp b/compiler-rt/test/nsan/nan.cpp
deleted file mode 100644
index 59fc391a3e0a6b..00000000000000
--- a/compiler-rt/test/nsan/nan.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clangxx_nsan -O0 -g %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-
-// RUN: %clangxx_nsan -O3 -g %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-
-// RUN: %clangxx_nsan -O0 -g %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=1 not %run %t
-
-#include <cmath>
-#include <cstdio>
-
-// This function returns a NaN value for triggering the NaN detection.
-__attribute__((noinline)) float ReturnNaN(float p, float q) {
-  float ret = p / q;
-  return ret;
-  // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-}
-
-int main() {
-  float val = ReturnNaN(0., 0.);
-  printf("%f\n", val);
-  // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-  return 0;
-}

diff  --git a/compiler-rt/test/nsan/softmax.cpp b/compiler-rt/test/nsan/softmax.cpp
deleted file mode 100644
index 29eaa2f9607a20..00000000000000
--- a/compiler-rt/test/nsan/softmax.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// RUN: %clangxx_nsan -O0 -g -DSOFTMAX=softmax %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0,log2_max_relative_error=19 %run %t 2>&1 | FileCheck %s
-
-// RUN: %clangxx_nsan -O3 -g -DSOFTMAX=softmax %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0,log2_max_relative_error=19 %run %t 2>&1 | FileCheck %s
-
-// RUN: %clangxx_nsan -O0 -g -DSOFTMAX=stable_softmax %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=1,log2_max_relative_error=19 %run %t 
-
-// RUN: %clangxx_nsan -O3 -g -DSOFTMAX=stable_softmax %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=1,log2_max_relative_error=19 %run %t
-
-#include<iostream>
-#include<vector>
-#include<algorithm>
-#include<cmath>
-
-// unstable softmax
-template <typename T>
-__attribute__((noinline)) void softmax(std::vector<T> &values) {
-    T sum_exp = 0.0;
-    for (auto &i: values) {
-      i = std::exp(i);
-      sum_exp += i;
-    }
-    for (auto &i: values) {
-      i /= sum_exp;
-    }
-}
-
-// use max value to avoid overflow
-// \sigma_i exp(x_i) / \sum_j exp(x_j) = \sigma_i exp(x_i - max(x)) / \sum_j exp(x_j - max(x))
-template <typename T>
-__attribute__((noinline)) void stable_softmax(std::vector<T> &values) {
-  T sum_exp = 0.0;
-  T max_values = *std::max_element(values.begin(), values.end());
-  for (auto &i: values) {
-    i = std::exp(i - max_values);
-    sum_exp += i;
-  }
-  for (auto &i:values) {
-    i /= sum_exp;
-  }
-}
-
-int main() {
-  std::vector<double> data = {1000, 1001, 1002};
-  SOFTMAX(data);
-  for (auto i: data) {
-    printf("%f", i);
-    // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-  }
-  return 0;
-}
\ No newline at end of file

diff  --git a/compiler-rt/test/nsan/vec_sqrt.cpp b/compiler-rt/test/nsan/vec_sqrt.cpp
deleted file mode 100644
index d1ef0487858506..00000000000000
--- a/compiler-rt/test/nsan/vec_sqrt.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// RUN: %clangxx_nsan -O0 -g -mavx %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-// RUN: %clangxx_nsan -O3 -g -mavx %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-
-#include <cmath>
-#include <immintrin.h>
-#include <iostream>
-
-void simd_sqrt(const float *input, float *output, size_t size) {
-  size_t i = 0;
-  for (; i + 7 < size; i += 8) {
-    __m256 vec = _mm256_loadu_ps(&input[i]);
-    __m256 result = _mm256_sqrt_ps(vec);
-    _mm256_storeu_ps(&output[i], result);
-  }
-  for (; i < size; ++i) {
-    output[i] = std::sqrt(input[i]);
-    // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-  }
-}
-
-int main() {
-  float input[] = {1.0,  2.0,   -3.0,  4.0,   5.0,   6.0,  7.0,
-                   8.0,  9.0,   -10.0, 11.0,  12.0,  13.0, 14.0,
-                   15.0, -16.0, 17.0,  -18.0, -19.0, -20.0};
-  float output[20];
-  simd_sqrt(input, output, 20);
-  for (int i = 0; i < 20; ++i) {
-    std::cout << output[i] << std::endl;
-    // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-  }
-  return 0;
-}
\ No newline at end of file

diff  --git a/compiler-rt/test/nsan/vec_sqrt_ext.cpp b/compiler-rt/test/nsan/vec_sqrt_ext.cpp
deleted file mode 100644
index b39ce4b99bcab6..00000000000000
--- a/compiler-rt/test/nsan/vec_sqrt_ext.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clangxx_nsan -O0 -g -mavx %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-// RUN: %clangxx_nsan -O3 -g -mavx %s -o %t
-// RUN: NSAN_OPTIONS=check_nan=true,halt_on_error=0 %run %t 2>&1 | FileCheck %s
-#include <iostream>
-#include <cmath>
-
-typedef float v8sf __attribute__ ((vector_size(32)));
-
-v8sf simd_sqrt(v8sf a) {
-  return __builtin_elementwise_sqrt(a);
-  // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-}
-
-int main() {
-  v8sf a = {-1.0, -2.0, -3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
-  a = simd_sqrt(a);
-
-  // This prevents DCE.
-  for (size_t i = 0; i < 8; ++i) {
-    std::cout << a[i] << std::endl;
-    // CHECK: WARNING: NumericalStabilitySanitizer: NaN detected
-  }
-  return 0;
-}
\ No newline at end of file


        


More information about the llvm-branch-commits mailing list