[llvm] [LLVM] Specialize test suites for `TableGen` and `FileCheck` to use smaller set of dependencies (PR #155929)

Rahul Joshi via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 31 05:39:02 PDT 2025


https://github.com/jurahul updated https://github.com/llvm/llvm-project/pull/155929

>From af61d5f16154ae9a56305e3bf888ff337b5fdff4 Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Mon, 25 Aug 2025 19:16:35 -0700
Subject: [PATCH 1/3] Trim test deps

---
 llvm/cmake/modules/AddLLVM.cmake | 94 ++++++++++++++++++++++++++------
 llvm/test/CMakeLists.txt         | 33 +++++++++++
 2 files changed, 109 insertions(+), 18 deletions(-)

diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 835750e2d2a13..5a3866039816f 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -2192,13 +2192,39 @@ endfunction()
 
 function(add_lit_testsuites project directory)
   if (NOT LLVM_ENABLE_IDE)
-    cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "FOLDER;BINARY_DIR" "PARAMS;DEPENDS;ARGS" ${ARGN})
+    cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "FOLDER;BINARY_DIR"
+                          "PARAMS;DEPENDS;ARGS;EXCLUDE_DIR;INCLUDE_DIR" ${ARGN})
 
     if (NOT ARG_FOLDER)
       get_subproject_title(subproject_title)
       set(ARG_FOLDER "${subproject_title}/Tests/LIT Testsuites")
     endif()
 
+    # Create a list of excluded paths. If not empty, any directory that begins
+    # with one of the excluded paths will excluded, others will be included.
+    set(excluded_dirs "")
+    if (ARG_EXCLUDE_DIR)
+      foreach(path ${ARG_EXCLUDE_DIR})
+        list(APPEND excluded_dirs ${path})
+      endforeach()
+    endif()
+
+    # Create a list of included paths. If not empty, any directory that begins
+    # with any of the included paths will included, others will be excluded.
+    # If both included and excluded lists are empty, all directories will be
+    # included.
+    set(included_dirs "")
+    if (ARG_INCLUDE_DIR)
+      foreach(path ${ARG_INCLUDE_DIR})
+        list(APPEND included_dirs ${path})
+      endforeach()
+    endif()
+
+    if (excluded_dirs AND included_dirs)
+      message(FATAL_ERROR, "Cannot specify both include and exclude directories")
+    endif()
+
+
     # Search recursively for test directories by assuming anything not
     # in a directory called Inputs contains tests.
     file(GLOB_RECURSE to_process LIST_DIRECTORIES true ${directory}/*)
@@ -2214,24 +2240,56 @@ function(add_lit_testsuites project directory)
 
       # Create a check- target for the directory.
       string(REPLACE "${directory}/" "" name_slash ${lit_suite})
-      if (name_slash)
-        set(filter ${name_slash})
-        string(REPLACE "/" "-" name_slash ${name_slash})
-        string(REPLACE "\\" "-" name_dashes ${name_slash})
-        string(TOLOWER "${project}-${name_dashes}" name_var)
-        set(lit_args ${lit_suite})
-        if (ARG_BINARY_DIR)
-          set(lit_args ${ARG_BINARY_DIR} --filter=${filter})
-        endif()
-        add_lit_target("check-${name_var}" "Running lit suite ${lit_suite}"
-          ${lit_args}
-          ${EXCLUDE_FROM_CHECK_ALL}
-          PARAMS ${ARG_PARAMS}
-          DEPENDS ${ARG_DEPENDS}
-          ARGS ${ARG_ARGS}
-        )
-        set_target_properties(check-${name_var} PROPERTIES FOLDER ${ARG_FOLDER})
+      if (NOT name_slash)
+        continue()
       endif()
+
+      # Determine whether to skip this directory.
+      if (excluded_dirs)
+        # Include by default, unless in the exclude list.
+        set(is_skipped false)
+        foreach (excluded_dir ${excluded_dirs})
+          string(FIND "${name_slash}" "${excluded_dir}" exclude_index)
+          if (exclude_index EQUAL 0)
+            set(is_skipped true)
+            break()
+          endif()
+        endforeach()
+      elseif(included_dirs)
+        # Exclude by default, unless in the include list.
+        set(is_skipped true)
+        foreach (included_dir ${included_dirs})
+          string(FIND "${name_slash}" "${included_dir}" include_index)
+          if (include_index EQUAL 0)
+            set(is_skipped false)
+            break()
+          endif()
+        endforeach()
+      else()
+        # Neither include nor exclude list specified. Include
+        set(is_skipped false)
+      endif()
+
+      if (is_skipped)
+        continue()
+      endif()
+
+      set(filter ${name_slash})
+      string(REPLACE "/" "-" name_slash ${name_slash})
+      string(REPLACE "\\" "-" name_dashes ${name_slash})
+      string(TOLOWER "${project}-${name_dashes}" name_var)
+      set(lit_args ${lit_suite})
+      if (ARG_BINARY_DIR)
+        set(lit_args ${ARG_BINARY_DIR} --filter=${filter})
+      endif()
+      add_lit_target("check-${name_var}" "Running lit suite ${lit_suite}"
+        ${lit_args}
+        ${EXCLUDE_FROM_CHECK_ALL}
+        PARAMS ${ARG_PARAMS}
+        DEPENDS ${ARG_DEPENDS}
+        ARGS ${ARG_ARGS}
+      )
+      set_target_properties(check-${name_var} PROPERTIES FOLDER ${ARG_FOLDER})
     endforeach()
   endif()
 endfunction()
diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt
index f6333d68a8ea5..ab299cc4d53a0 100644
--- a/llvm/test/CMakeLists.txt
+++ b/llvm/test/CMakeLists.txt
@@ -259,10 +259,43 @@ add_lit_testsuite(check-llvm "Running the LLVM regression tests"
   )
 set_target_properties(check-llvm PROPERTIES FOLDER "LLVM/Tests")
 
+# Note, exclude TableGen and FileCheck directories as we define handle
+# them with a reduced set of dependencies below.
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
   DEPENDS ${LLVM_TEST_DEPENDS}
   FOLDER "Tests/Subdirectories"
+  EXCLUDE_DIR TableGen
+  EXCLUDE_DIR FileCheck
+  )
+
+# Subset of dependencies for TableGen lit test.
+set(LLVM_TEST_TABLEGEN_DEPENDS
+    FileCheck
+    count
+    llvm-config
+    llvm-tblgen
+    not
+  )
+
+add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
+  ${exclude_from_check_all}
+  DEPENDS ${LLVM_TEST_TABLEGEN_DEPENDS}
+  FOLDER "Tests/Subdirectories"
+  INCLUDE_DIR TableGen
+  )
+
+# Subset of dependencies for FileCheck lit test.
+set(LLVM_TEST_FILECHECK_DEPENDS
+    FileCheck
+    not
+  )
+
+add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
+  ${exclude_from_check_all}
+  DEPENDS ${LLVM_TEST_FILECHECK_DEPENDS}
+  FOLDER "Tests/Subdirectories"
+  INCLUDE_DIR FileCheck
   )
 
 # Setup an alias for 'check-all'.

>From 03c8d0d667125d154bbc017b71f8ab5171800372 Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Fri, 29 Aug 2025 10:30:28 -0700
Subject: [PATCH 2/3] Review feedback

---
 llvm/cmake/modules/AddLLVM.cmake |  47 +++----
 llvm/test/CMakeLists.txt         | 213 +++++++++++++++----------------
 2 files changed, 124 insertions(+), 136 deletions(-)

diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 5a3866039816f..71587b939f922 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -2192,35 +2192,20 @@ endfunction()
 
 function(add_lit_testsuites project directory)
   if (NOT LLVM_ENABLE_IDE)
-    cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "FOLDER;BINARY_DIR"
-                          "PARAMS;DEPENDS;ARGS;EXCLUDE_DIR;INCLUDE_DIR" ${ARGN})
+    cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL"
+                              "FOLDER;BINARY_DIR;EXCLUDE_DIRS;INCLUDE_DIRS"
+                              "PARAMS;DEPENDS;ARGS"
+                               ${ARGN})
 
     if (NOT ARG_FOLDER)
       get_subproject_title(subproject_title)
       set(ARG_FOLDER "${subproject_title}/Tests/LIT Testsuites")
     endif()
 
-    # Create a list of excluded paths. If not empty, any directory that begins
-    # with one of the excluded paths will excluded, others will be included.
-    set(excluded_dirs "")
-    if (ARG_EXCLUDE_DIR)
-      foreach(path ${ARG_EXCLUDE_DIR})
-        list(APPEND excluded_dirs ${path})
-      endforeach()
-    endif()
-
-    # Create a list of included paths. If not empty, any directory that begins
-    # with any of the included paths will included, others will be excluded.
-    # If both included and excluded lists are empty, all directories will be
-    # included.
-    set(included_dirs "")
-    if (ARG_INCLUDE_DIR)
-      foreach(path ${ARG_INCLUDE_DIR})
-        list(APPEND included_dirs ${path})
-      endforeach()
-    endif()
+    separate_arguments(ARG_EXCLUDE_DIRS)
+    separate_arguments(ARG_INCLUDE_DIRS)
 
-    if (excluded_dirs AND included_dirs)
+    if (ARG_EXCLUDE_DIRS AND ARG_INCLUDE_DIRS)
       message(FATAL_ERROR, "Cannot specify both include and exclude directories")
     endif()
 
@@ -2245,20 +2230,28 @@ function(add_lit_testsuites project directory)
       endif()
 
       # Determine whether to skip this directory.
-      if (excluded_dirs)
+      #
+      # If the exclude list is specified, any directory that begins with one of
+      # the excluded paths will be excluded, others will be included.
+      #
+      # If the include list is specified, any directory that begins with one of
+      # the included paths will be included, others will be excluded.
+      #
+      # If neither is specified, all directories will be included.
+      if (ARG_EXCLUDE_DIRS)
         # Include by default, unless in the exclude list.
         set(is_skipped false)
-        foreach (excluded_dir ${excluded_dirs})
+        foreach (excluded_dir ${ARG_EXCLUDE_DIRS})
           string(FIND "${name_slash}" "${excluded_dir}" exclude_index)
           if (exclude_index EQUAL 0)
             set(is_skipped true)
             break()
           endif()
         endforeach()
-      elseif(included_dirs)
+      elseif(ARG_INCLUDE_DIRS)
         # Exclude by default, unless in the include list.
         set(is_skipped true)
-        foreach (included_dir ${included_dirs})
+        foreach (included_dir ${ARG_INCLUDE_DIRS})
           string(FIND "${name_slash}" "${included_dir}" include_index)
           if (include_index EQUAL 0)
             set(is_skipped false)
@@ -2266,7 +2259,7 @@ function(add_lit_testsuites project directory)
           endif()
         endforeach()
       else()
-        # Neither include nor exclude list specified. Include
+        # If neither include nor exclude list is specified, include all.
         set(is_skipped false)
       endif()
 
diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt
index ab299cc4d53a0..270881e51da9a 100644
--- a/llvm/test/CMakeLists.txt
+++ b/llvm/test/CMakeLists.txt
@@ -59,100 +59,104 @@ configure_lit_site_cfg(
 
 # Set the depends list as a variable so that it can grow conditionally.
 # NOTE: Sync the substitutions in test/lit.cfg when adding to this list.
+
+set(LLVM_TEST_DEPENDS_COMMON
+  FileCheck
+  count
+  llvm-config
+  not
+  )
+
 set(LLVM_TEST_DEPENDS
-          BugpointPasses
-          FileCheck
-          LLVMWindowsDriver
-          UnitTests
-          bugpoint
-          count
-          llc
-          lli
-          lli-child-target
-          llvm-addr2line
-          llvm-ar
-          llvm-as
-          llvm-bcanalyzer
-          llvm-bitcode-strip
-          llvm-c-test
-          llvm-cat
-          llvm-cfi-verify
-          llvm-cgdata
-          llvm-config
-          llvm-cov
-          llvm-ctxprof-util
-          llvm-cvtres
-          llvm-cxxdump
-          llvm-cxxfilt
-          llvm-cxxmap
-          llvm-debuginfo-analyzer
-          llvm-debuginfod-find
-          llvm-diff
-          llvm-dis
-          llvm-dlltool
-          dsymutil
-          llvm-dwarfdump
-          llvm-dwarfutil
-          llvm-dwp
-          llvm-exegesis
-          llvm-extract
-          llvm-gsymutil
-          llvm-ir2vec
-          llvm-isel-fuzzer
-          llvm-ifs
-          llvm-install-name-tool
-          llvm-jitlink
-          llvm-lib
-          llvm-libtool-darwin
-          llvm-link
-          llvm-lipo
-          llvm-locstats
-          llvm-lto2
-          llvm-mc
-          llvm-mca
-          llvm-ml
-          llvm-ml64
-          llvm-modextract
-          llvm-nm
-          llvm-objcopy
-          llvm-objdump
-          llvm-opt-fuzzer
-          llvm-opt-report
-          llvm-offload-wrapper
-          llvm-otool
-          llvm-pdbutil
-          llvm-profdata
-          llvm-profgen
-          llvm-ranlib
-          llvm-rc
-          llvm-readobj
-          llvm-readelf
-          llvm-reduce
-          llvm-remarkutil
-          llvm-rtdyld
-          llvm-sim
-          llvm-size
-          llvm-split
-          llvm-stress
-          llvm-strings
-          llvm-strip
-          llvm-symbolizer
-          llvm-tblgen
-          llvm-readtapi
-          llvm-tli-checker
-          llvm-undname
-          llvm-windres
-          llvm-xray
-          not
-          obj2yaml
-          opt
-          sancov
-          sanstats
-          split-file
-          verify-uselistorder
-          yaml-bench
-          yaml2obj
-        )
+  BugpointPasses
+  LLVMWindowsDriver
+  UnitTests
+  bugpoint
+  llc
+  lli
+  lli-child-target
+  llvm-addr2line
+  llvm-ar
+  llvm-as
+  llvm-bcanalyzer
+  llvm-bitcode-strip
+  llvm-c-test
+  llvm-cat
+  llvm-cfi-verify
+  llvm-cgdata
+  llvm-cov
+  llvm-ctxprof-util
+  llvm-cvtres
+  llvm-cxxdump
+  llvm-cxxfilt
+  llvm-cxxmap
+  llvm-debuginfo-analyzer
+  llvm-debuginfod-find
+  llvm-diff
+  llvm-dis
+  llvm-dlltool
+  dsymutil
+  llvm-dwarfdump
+  llvm-dwarfutil
+  llvm-dwp
+  llvm-exegesis
+  llvm-extract
+  llvm-gsymutil
+  llvm-ir2vec
+  llvm-isel-fuzzer
+  llvm-ifs
+  llvm-install-name-tool
+  llvm-jitlink
+  llvm-lib
+  llvm-libtool-darwin
+  llvm-link
+  llvm-lipo
+  llvm-locstats
+  llvm-lto2
+  llvm-mc
+  llvm-mca
+  llvm-ml
+  llvm-ml64
+  llvm-modextract
+  llvm-nm
+  llvm-objcopy
+  llvm-objdump
+  llvm-opt-fuzzer
+  llvm-opt-report
+  llvm-offload-wrapper
+  llvm-otool
+  llvm-pdbutil
+  llvm-profdata
+  llvm-profgen
+  llvm-ranlib
+  llvm-rc
+  llvm-readobj
+  llvm-readelf
+  llvm-reduce
+  llvm-remarkutil
+  llvm-rtdyld
+  llvm-sim
+  llvm-size
+  llvm-split
+  llvm-stress
+  llvm-strings
+  llvm-strip
+  llvm-symbolizer
+  llvm-tblgen
+  llvm-readtapi
+  llvm-tli-checker
+  llvm-undname
+  llvm-windres
+  llvm-xray
+  obj2yaml
+  opt
+  sancov
+  sanstats
+  split-file
+  verify-uselistorder
+  yaml-bench
+  yaml2obj
+  )
 
 if(TARGET llvm-lto)
   set(LLVM_TEST_DEPENDS ${LLVM_TEST_DEPENDS} llvm-lto)
@@ -263,39 +267,30 @@ set_target_properties(check-llvm PROPERTIES FOLDER "LLVM/Tests")
 # them with a reduced set of dependencies below.
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
+  DEPENDS ${LLVM_TEST_DEPENDS_COMMON}
   DEPENDS ${LLVM_TEST_DEPENDS}
   FOLDER "Tests/Subdirectories"
-  EXCLUDE_DIR TableGen
-  EXCLUDE_DIR FileCheck
+  EXCLUDE_DIRS "TableGen FileCheck"
   )
 
 # Subset of dependencies for TableGen lit test.
 set(LLVM_TEST_TABLEGEN_DEPENDS
-    FileCheck
-    count
-    llvm-config
-    llvm-tblgen
-    not
+  llvm-tblgen
   )
 
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
+  DEPENDS ${LLVM_TEST_DEPENDS_COMMON}
   DEPENDS ${LLVM_TEST_TABLEGEN_DEPENDS}
   FOLDER "Tests/Subdirectories"
-  INCLUDE_DIR TableGen
-  )
-
-# Subset of dependencies for FileCheck lit test.
-set(LLVM_TEST_FILECHECK_DEPENDS
-    FileCheck
-    not
+  INCLUDE_DIRS "TableGen"
   )
 
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
-  DEPENDS ${LLVM_TEST_FILECHECK_DEPENDS}
+  DEPENDS ${LLVM_TEST_DEPENDS_COMMON}
   FOLDER "Tests/Subdirectories"
-  INCLUDE_DIR FileCheck
+  INCLUDE_DIRS "FileCheck"
   )
 
 # Setup an alias for 'check-all'.

>From 9690778b9c81477003af3451cae47d09d55bea1f Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Sun, 31 Aug 2025 05:38:29 -0700
Subject: [PATCH 3/3] Review feedback

---
 llvm/test/CMakeLists.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt
index 270881e51da9a..45772c1360c63 100644
--- a/llvm/test/CMakeLists.txt
+++ b/llvm/test/CMakeLists.txt
@@ -263,8 +263,8 @@ add_lit_testsuite(check-llvm "Running the LLVM regression tests"
   )
 set_target_properties(check-llvm PROPERTIES FOLDER "LLVM/Tests")
 
-# Note, exclude TableGen and FileCheck directories as we define handle
-# them with a reduced set of dependencies below.
+# Note, exclude TableGen and FileCheck directories as we define them with a
+# reduced set of dependencies below.
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
   ${exclude_from_check_all}
   DEPENDS ${LLVM_TEST_DEPENDS_COMMON}



More information about the llvm-commits mailing list