[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