mgorny created this revision.
mgorny added reviewers: labath, zturner, krytarowski.
Herald added a subscriber: delcypher.

Add a new lit-cpuid tool that detects CPU features used by some of
the tests, and use it to populate available_features in lit.  For now,
this means that the test for MM/XMM register read will be run only
when the host CPU support SSE instruction set.  However, this is going
to make it possible to introduce additional tests relying on AVX.


https://reviews.llvm.org/D61073

Files:
  lldb/CMakeLists.txt
  lldb/lit/CMakeLists.txt
  lldb/lit/Register/x86-mm-xmm-read.test
  lldb/lit/lit.cfg.py
  lldb/utils/lit-cpuid/CMakeLists.txt
  lldb/utils/lit-cpuid/lit-cpuid.cpp

Index: lldb/utils/lit-cpuid/lit-cpuid.cpp
===================================================================
--- /dev/null
+++ lldb/utils/lit-cpuid/lit-cpuid.cpp
@@ -0,0 +1,33 @@
+//===- lit-cpuid.cpp - Get CPU feature flags for lit exported features ----===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// lit-cpuid obtains the feature list for the currently running CPU, and outputs
+// those flags that are interesting for LLDB lit tests.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/Support/Host.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+int main(int argc, char **argv) {
+#if defined(__i386__) || defined(_M_IX86) || \
+    defined(__x86_64__) || defined(_M_X64)
+  StringMap<bool> features;
+
+  if (!sys::getHostCPUFeatures(features))
+    return 1;
+
+  if (features["sse"])
+    outs() << "sse\n";
+#endif
+
+  return 0;
+}
Index: lldb/utils/lit-cpuid/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/utils/lit-cpuid/CMakeLists.txt
@@ -0,0 +1,5 @@
+add_llvm_utility(lit-cpuid
+  lit-cpuid.cpp
+  )
+
+target_link_libraries(lit-cpuid PRIVATE LLVMSupport)
Index: lldb/lit/lit.cfg.py
===================================================================
--- lldb/lit/lit.cfg.py
+++ lldb/lit/lit.cfg.py
@@ -73,3 +73,13 @@
     if os.path.isdir(cachedir):
         print("Deleting module cache at %s."%cachedir)
         shutil.rmtree(cachedir)
+
+# If running tests natively, check for CPU features needed for some tests.
+
+if 'native' in config.available_features:
+    cpuid_exe = lit.util.which('lit-cpuid', config.lldb_tools_dir)
+    if cpuid_exe is not None:
+        out, err, exitcode = lit.util.executeCommand([cpuid_exe])
+        if exitcode == 0:
+            for x in out.split():
+                config.available_features.add('native-cpu-%s' % x)
Index: lldb/lit/Register/x86-mm-xmm-read.test
===================================================================
--- lldb/lit/Register/x86-mm-xmm-read.test
+++ lldb/lit/Register/x86-mm-xmm-read.test
@@ -1,6 +1,6 @@
 # XFAIL: system-darwin
 # XFAIL: system-windows
-# REQUIRES: native && (target-x86 || target-x86_64)
+# REQUIRES: native && (target-x86 || target-x86_64) && native-cpu-sse
 # RUN: %clangxx %p/Inputs/x86-mm-xmm-read.cpp -o %t
 # RUN: %lldb -b -s %s %t | FileCheck %s
 process launch
Index: lldb/lit/CMakeLists.txt
===================================================================
--- lldb/lit/CMakeLists.txt
+++ lldb/lit/CMakeLists.txt
@@ -20,6 +20,7 @@
 list(APPEND LLDB_TEST_DEPS
   LLDBUnitTests
   dsymutil
+  lit-cpuid
   llc
   lldb
   lldb-test
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -138,6 +138,7 @@
   add_subdirectory(test)
   add_subdirectory(unittests)
   add_subdirectory(lit)
+  add_subdirectory(utils/lit-cpuid)
   add_subdirectory(utils/lldb-dotest)
 endif()
 
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to