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