Revert D142108 "[reland][libc][NFC] Detect host CPU features using try_compile instea...
authorGuillaume Chatelet <gchatelet@google.com>
Tue, 24 Jan 2023 16:22:26 +0000 (16:22 +0000)
committerGuillaume Chatelet <gchatelet@google.com>
Tue, 24 Jan 2023 16:23:32 +0000 (16:23 +0000)
The build bots are failing.
This reverts commit c84d74f5bfe810744de1268eb0516a6622e4aa73.

24 files changed:
libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake
libc/cmake/modules/cpu_features/check_AVX2.cpp [deleted file]
libc/cmake/modules/cpu_features/check_AVX512BW.cpp [deleted file]
libc/cmake/modules/cpu_features/check_AVX512F.cpp [deleted file]
libc/cmake/modules/cpu_features/check_FMA.cpp [deleted file]
libc/cmake/modules/cpu_features/check_SSE2.cpp [deleted file]
libc/cmake/modules/cpu_features/check_SSE4_2.cpp [deleted file]
libc/cmake/modules/cpu_features/check_cpu_features.cpp.in [new file with mode: 0644]
libc/src/__support/CMakeLists.txt
libc/src/__support/FPUtil/FMA.h
libc/src/__support/FPUtil/aarch64/FMA.h
libc/src/__support/FPUtil/multiply_add.h
libc/src/__support/FPUtil/x86_64/FMA.h
libc/src/__support/architectures.h
libc/src/__support/cpu_features.h [deleted file]
libc/src/math/generic/asinf.cpp
libc/src/math/generic/cosf.cpp
libc/src/math/generic/expm1f.cpp
libc/src/math/generic/sincosf.cpp
libc/src/math/generic/sincosf_utils.h
libc/src/math/generic/sinf.cpp
libc/src/math/generic/tanf.cpp
libc/src/math/generic/tanhf.cpp
utils/bazel/llvm-project-overlay/libc/BUILD.bazel

index 9a18ac0..b97b03f 100644 (file)
@@ -44,32 +44,44 @@ function(_intersection output_var list1 list2)
   set(${output_var} ${tmp} PARENT_SCOPE)
 endfunction()
 
-set(AVAILABLE_CPU_FEATURES "")
-if(LIBC_CROSSBUILD)
-  # If we are doing a cross build, we will just assume that all CPU features
-  # are available.
-  set(AVAILABLE_CPU_FEATURES ${ALL_CPU_FEATURES})
-else()
-  # Try compile a C file to check if flag is supported.
-  set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+# Generates a cpp file to introspect the compiler defined flags.
+function(_generate_check_code)
   foreach(feature IN LISTS ALL_CPU_FEATURES)
-    try_compile(
-      has_feature
-      ${CMAKE_CURRENT_BINARY_DIR}/cpu_features
-      SOURCES ${LIBC_SOURCE_DIR}/cmake/modules/cpu_features/check_${feature}.cpp
-      COMPILE_DEFINITIONS -I${LIBC_SOURCE_DIR} ${LIBC_COMPILE_OPTIONS_NATIVE}
-    )
-    if(has_feature)
-      list(APPEND AVAILABLE_CPU_FEATURES ${feature})
-    endif()
+    set(DEFINITIONS
+        "${DEFINITIONS}
+#ifdef __${feature}__
+    \"${feature}\",
+#endif")
   endforeach()
-endif()
+  configure_file(
+    "${LIBC_SOURCE_DIR}/cmake/modules/cpu_features/check_cpu_features.cpp.in"
+    "cpu_features/check_cpu_features.cpp" @ONLY)
+endfunction()
+_generate_check_code()
 
-set(LIBC_CPU_FEATURES ${AVAILABLE_CPU_FEATURES} CACHE STRING "Host supported CPU features")
+set(LIBC_CPU_FEATURES "" CACHE PATH "Host supported CPU features")
 
-_intersection(cpu_features "${AVAILABLE_CPU_FEATURES}" "${LIBC_CPU_FEATURES}")
-if(NOT "${cpu_features}" STREQUAL "${LIBC_CPU_FEATURES}")
-  message(FATAL_ERROR "Unsupported CPU features: ${cpu_features}")
-else()
+if(LIBC_CROSSBUILD)
+  _intersection(cpu_features "${ALL_CPU_FEATURES}" "${LIBC_CPU_FEATURES}")
+  if(NOT "${cpu_features}" STREQUAL "${LIBC_CPU_FEATURES}")
+    message(FATAL_ERROR "Unsupported CPU features: ${cpu_features}")
+  endif()
   message(STATUS "Set CPU features: ${cpu_features}")
+  set(LIBC_CPU_FEATURES "${cpu_features}")
+else()
+  # Populates the LIBC_CPU_FEATURES list from host.
+  try_run(
+    run_result compile_result "${CMAKE_CURRENT_BINARY_DIR}/check_${feature}"
+    "${CMAKE_CURRENT_BINARY_DIR}/cpu_features/check_cpu_features.cpp"
+    COMPILE_DEFINITIONS ${LIBC_COMPILE_OPTIONS_NATIVE}
+    COMPILE_OUTPUT_VARIABLE compile_output
+    RUN_OUTPUT_VARIABLE run_output)
+  if("${run_result}" EQUAL 0)
+    message(STATUS "Set CPU features: ${run_output}")
+    set(LIBC_CPU_FEATURES "${run_output}")
+  elseif(NOT ${compile_result})
+    message(FATAL_ERROR "Failed to compile: ${compile_output}")
+  else()
+    message(FATAL_ERROR "Failed to run: ${run_output}")
+  endif()
 endif()
diff --git a/libc/cmake/modules/cpu_features/check_AVX2.cpp b/libc/cmake/modules/cpu_features/check_AVX2.cpp
deleted file mode 100644 (file)
index 4330308..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_AVX2
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_AVX512BW.cpp b/libc/cmake/modules/cpu_features/check_AVX512BW.cpp
deleted file mode 100644 (file)
index 4e8cfc2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_AVX512BW
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_AVX512F.cpp b/libc/cmake/modules/cpu_features/check_AVX512F.cpp
deleted file mode 100644 (file)
index 8491654..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_AVX512F
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_FMA.cpp b/libc/cmake/modules/cpu_features/check_FMA.cpp
deleted file mode 100644 (file)
index 9098756..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_FMA
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_SSE2.cpp b/libc/cmake/modules/cpu_features/check_SSE2.cpp
deleted file mode 100644 (file)
index eee2dea..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_SSE2
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_SSE4_2.cpp b/libc/cmake/modules/cpu_features/check_SSE4_2.cpp
deleted file mode 100644 (file)
index 43586b2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/__support/cpu_features.h"
-
-#ifndef LIBC_TARGET_HAS_SSE4_2
-#error unsupported
-#endif
diff --git a/libc/cmake/modules/cpu_features/check_cpu_features.cpp.in b/libc/cmake/modules/cpu_features/check_cpu_features.cpp.in
new file mode 100644 (file)
index 0000000..7a3fc03
--- /dev/null
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+// This file is instantiated by CMake.
+// DEFINITIONS below is replaced with a set of lines like so:
+//   #ifdef __SSE2__
+//     "SSE2",
+//   #endif
+//
+// This allows for introspection of compiler definitions.
+// The output of the program is a single line of semi colon separated feature
+// names.
+
+// MSVC is using a different set of preprocessor definitions for 
+// SSE and SSE2, see _M_IX86_FP in
+// https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
+
+int main(int, char **) {
+  const char *strings[] = {
+      @DEFINITIONS@
+      // If DEFINITIONS turns out to be empty, we don't want to list
+      // an empty array. So, we add an end of list marker.
+      "<end_of_feature_list>"
+  };
+  const size_t size = sizeof(strings) / sizeof(strings[0]);
+  for (size_t i = 0; i < size; ++i) {
+    if (i)
+      putchar(';');
+    fputs(strings[i], stdout);
+  }
+  return EXIT_SUCCESS;
+}
index 9ea67c7..2526d0c 100644 (file)
@@ -33,7 +33,6 @@ add_header_library(
   HDRS
     architectures.h
     common.h
-    cpu_features.h
     endian.h
 )
 
index 7b0dbe4..f14a978 100644 (file)
@@ -11,7 +11,6 @@
 
 #include "src/__support/architectures.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #if defined(LIBC_TARGET_HAS_FMA)
 
index 1591c9b..f742197 100644 (file)
@@ -10,7 +10,6 @@
 #define LLVM_LIBC_SRC_SUPPORT_FPUTIL_AARCH64_FMA_H
 
 #include "src/__support/architectures.h"
-#include "src/__support/cpu_features.h"
 
 #if !defined(LLVM_LIBC_ARCH_AARCH64)
 #error "Invalid include"
index 27f0081..384035e 100644 (file)
@@ -11,7 +11,6 @@
 
 #include "src/__support/architectures.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 namespace __llvm_libc {
 namespace fputil {
index 43b1443..40da101 100644 (file)
@@ -11,7 +11,6 @@
 
 #include "src/__support/architectures.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #if !defined(LLVM_LIBC_ARCH_X86_64)
 #error "Invalid include"
index af97469..d3106da 100644 (file)
 #define LLVM_LIBC_ARCH_ANY_ARM
 #endif
 
+#if defined(LLVM_LIBC_ARCH_AARCH64)
+#define LIBC_TARGET_HAS_FMA
+#elif defined(LLVM_LIBC_ARCH_X86_64)
+#if (defined(__AVX2__) || defined(__FMA__))
+#define LIBC_TARGET_HAS_FMA
+#endif
+#endif
+
 #endif // LLVM_LIBC_SUPPORT_ARCHITECTURES_H
diff --git a/libc/src/__support/cpu_features.h b/libc/src/__support/cpu_features.h
deleted file mode 100644 (file)
index 68bf6fa..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//===-- Compile time cpu feature detection ----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-// This file lists target cpu features by introspecting compiler enabled
-// preprocessor definitions.
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC_SUPPORT_CPU_FEATURES_H
-#define LLVM_LIBC_SRC_SUPPORT_CPU_FEATURES_H
-
-#if defined(__SSE2__)
-#define LIBC_TARGET_HAS_SSE2
-#endif
-
-#if defined(__SSE4_2__)
-#define LIBC_TARGET_HAS_SSE4_2
-#endif
-
-#if defined(__AVX__)
-#define LIBC_TARGET_HAS_AVX
-#endif
-
-#if defined(__AVX2__)
-#define LIBC_TARGET_HAS_AVX2
-#endif
-
-#if defined(__AVX512F__)
-#define LIBC_TARGET_HAS_AVX512F
-#endif
-
-#if defined(__AVX512BW__)
-#define LIBC_TARGET_HAS_AVX512BW
-#endif
-
-#if defined(__ARM_FEATURE_FMA) || defined(__AVX2__) || defined(__FMA__)
-#define LIBC_TARGET_HAS_FMA
-#endif
-
-#endif // LLVM_LIBC_SRC_SUPPORT_CPU_FEATURES_H
index 1b38e8d..7314b38 100644 (file)
@@ -13,7 +13,6 @@
 #include "src/__support/FPUtil/except_value_utils.h"
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/FPUtil/sqrt.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index fce60cd..ebccc99 100644 (file)
@@ -14,7 +14,6 @@
 #include "src/__support/FPUtil/except_value_utils.h"
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index 8b57522..6c187b8 100644 (file)
@@ -16,7 +16,6 @@
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/FPUtil/nearest_integer.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index 991eb32..25a59bd 100644 (file)
@@ -12,7 +12,6 @@
 #include "src/__support/FPUtil/FPBits.h"
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index 358c1cf..a193216 100644 (file)
@@ -12,7 +12,6 @@
 #include "src/__support/FPUtil/FPBits.h"
 #include "src/__support/FPUtil/PolyEval.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #if defined(LIBC_TARGET_HAS_FMA)
 #include "range_reduction_fma.h"
index 836df28..cae25a7 100644 (file)
@@ -14,7 +14,6 @@
 #include "src/__support/FPUtil/PolyEval.h"
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index 8b720c4..0deb968 100644 (file)
@@ -15,7 +15,6 @@
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/FPUtil/nearest_integer.h"
 #include "src/__support/common.h"
-#include "src/__support/cpu_features.h"
 
 #include <errno.h>
 
index 8b6771b..22b9587 100644 (file)
@@ -8,7 +8,6 @@
 
 #include "src/math/tanhf.h"
 #include "src/__support/FPUtil/FPBits.h"
-#include "src/__support/cpu_features.h"
 #include "src/math/generic/explogxf.h"
 
 namespace __llvm_libc {
index e9d3a55..be4dafd 100644 (file)
@@ -79,7 +79,6 @@ libc_support_library(
     hdrs = [
         "src/__support/architectures.h",
         "src/__support/common.h",
-        "src/__support/cpu_features.h",
         "src/__support/endian.h",
     ],
 )