From 2bd2734f445b434fbaa56f35797f40d7c0d91a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 25 Nov 2022 16:26:50 +0200 Subject: [PATCH] Reapply [openmp] [test] XFAIL many-microtask-args.c on ARM On ARM, a C fallback version of __kmp_invoke_microtask is used, which only handles up to a fixed number of arguments - while many-microtask-args.c tests that the function can handle an arbitrarily large number of arguments (the testcase produces 17 arguments). On the CMake level, we can't add ${LIBOMP_ARCH} directly to OPENMP_TEST_COMPILER_FEATURES in OpenMPTesting.cmake, since that file is parsed before LIBOMP_ARCH is set. Instead convert the feature list into a proper CMake list, and append ${LIBOMP_ARCH} into it before serializing it to an Python array. Reapply: Make sure OPENMP_TEST_COMPILER_FEATURES is defined properly in all other test subdirectories other than runtime/test too. Differential Revision: https://reviews.llvm.org/D138738 --- openmp/cmake/OpenMPTesting.cmake | 17 ++++++++++++++++- openmp/runtime/test/CMakeLists.txt | 3 +++ .../test/misc_bugs/many-microtask-args.c | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake index a93f7199ed7a..01f49cfaea78 100644 --- a/openmp/cmake/OpenMPTesting.cmake +++ b/openmp/cmake/OpenMPTesting.cmake @@ -159,6 +159,20 @@ else() endif() # Function to set compiler features for use in lit. +function(update_test_compiler_features) + set(FEATURES "[") + set(first TRUE) + foreach(feat IN LISTS OPENMP_TEST_COMPILER_FEATURE_LIST) + if (NOT first) + string(APPEND FEATURES ", ") + endif() + set(first FALSE) + string(APPEND FEATURES "'${feat}'") + endforeach() + string(APPEND FEATURES "]") + set(OPENMP_TEST_COMPILER_FEATURES ${FEATURES} PARENT_SCOPE) +endfunction() + function(set_test_compiler_features) if ("${OPENMP_TEST_COMPILER_ID}" STREQUAL "GNU") set(comp "gcc") @@ -168,9 +182,10 @@ function(set_test_compiler_features) # Just use the lowercase of the compiler ID as fallback. string(TOLOWER "${OPENMP_TEST_COMPILER_ID}" comp) endif() - set(OPENMP_TEST_COMPILER_FEATURES "['${comp}', '${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR}', '${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR}', '${comp}-${OPENMP_TEST_COMPILER_VERSION}']" PARENT_SCOPE) + set(OPENMP_TEST_COMPILER_FEATURE_LIST ${comp} ${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR} ${comp}-${OPENMP_TEST_COMPILER_VERSION_MAJOR_MINOR} ${comp}-${OPENMP_TEST_COMPILER_VERSION} PARENT_SCOPE) endfunction() set_test_compiler_features() +update_test_compiler_features() # Function to add a testsuite for an OpenMP runtime library. function(add_openmp_testsuite target comment) diff --git a/openmp/runtime/test/CMakeLists.txt b/openmp/runtime/test/CMakeLists.txt index 71680a31ae25..05b517fb920f 100644 --- a/openmp/runtime/test/CMakeLists.txt +++ b/openmp/runtime/test/CMakeLists.txt @@ -24,6 +24,9 @@ macro(pythonize_bool var) endif() endmacro() +list(APPEND OPENMP_TEST_COMPILER_FEATURE_LIST "${LIBOMP_ARCH}") +update_test_compiler_features() + pythonize_bool(LIBOMP_USE_HWLOC) pythonize_bool(LIBOMP_OMPT_SUPPORT) pythonize_bool(LIBOMP_OMPT_OPTIONAL) diff --git a/openmp/runtime/test/misc_bugs/many-microtask-args.c b/openmp/runtime/test/misc_bugs/many-microtask-args.c index d644515d9a4f..1ede11038eed 100644 --- a/openmp/runtime/test/misc_bugs/many-microtask-args.c +++ b/openmp/runtime/test/misc_bugs/many-microtask-args.c @@ -1,6 +1,11 @@ // RUN: %libomp-compile-and-run #include +// This test fails with Clang unless __kmp_invoke_microtask supports at least +// 17 arguments. On ARM, the fallback C implementation of __kmp_invoke_microtask +// is used, and that one only currently supports up to 15 arguments. +// XFAIL: arm + int main() {