Index: lldb/trunk/CMakeLists.txt =================================================================== --- lldb/trunk/CMakeLists.txt +++ lldb/trunk/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() Index: lldb/trunk/lit/CMakeLists.txt =================================================================== --- lldb/trunk/lit/CMakeLists.txt +++ lldb/trunk/lit/CMakeLists.txt @@ -20,6 +20,7 @@ list(APPEND LLDB_TEST_DEPS LLDBUnitTests dsymutil + lit-cpuid llc lldb lldb-test Index: lldb/trunk/lit/Register/x86-mm-xmm-read.test =================================================================== --- lldb/trunk/lit/Register/x86-mm-xmm-read.test +++ lldb/trunk/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/trunk/lit/lit.cfg.py =================================================================== --- lldb/trunk/lit/lit.cfg.py +++ lldb/trunk/lit/lit.cfg.py @@ -73,3 +73,17 @@ 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 None: + lit_config.warning("lit-cpuid not found, tests requiring CPU extensions will be skipped") + else: + out, err, exitcode = lit.util.executeCommand([cpuid_exe]) + if exitcode == 0: + for x in out.split(): + config.available_features.add('native-cpu-%s' % x) + else: + lit_config.warning("lit-cpuid failed: %s" % err) Index: lldb/trunk/utils/lit-cpuid/CMakeLists.txt =================================================================== --- lldb/trunk/utils/lit-cpuid/CMakeLists.txt +++ lldb/trunk/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/trunk/utils/lit-cpuid/lit-cpuid.cpp =================================================================== --- lldb/trunk/utils/lit-cpuid/lit-cpuid.cpp +++ lldb/trunk/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 features; + + if (!sys::getHostCPUFeatures(features)) + return 1; + + if (features["sse"]) + outs() << "sse\n"; +#endif + + return 0; +}