From aa9a10ac1dde3e6a07d48034af49dd80134a9ba2 Mon Sep 17 00:00:00 2001 From: Andrzej Warzynski Date: Sun, 16 Jul 2023 13:51:18 +0000 Subject: [PATCH] [mlir][SparseTensor][ArmSVE] Conditionally disable SVE RUN line This patch updates one SparseTensor integration test so that the VLA vectorisation is run conditionally based on the value of the MLIR_RUN_ARM_SME_TESTS CMake variable. This change opens the path to reduce the duplication of RUN lines in "mlir/test/Integration/Dialect/SparseTensor/CPU/". ATM, there are usually 2 RUN lines to test vectorization in SparseTensor integration tests: * one for VLS vectorisation, * one for VLA vectorisation whenever that's available and which reduces to VLS vectorisation when VLA is not supported. When VLA is not available, VLS vectorisation is verified twice. This duplication should be avoided - integration test are relatively expansive to run. This patch makes sure that the 2nd vectorisation RUN line becomes: ``` if (SVE integration tests are enabled) run VLA vectorisation else return ``` This logic is implemented using LIT's (relatively new) conditional substitution [1]. It enables us to guarantee that all RUN lines are unique and that the VLA vectorisation is only enabled when supported. This patch updates only 1 test to set-up and to demonstrate the logic. Subsequent patches will update the remaining tests. [1] https://www.llvm.org/docs/TestingGuide.html Differential Revision: https://reviews.llvm.org/D155403 --- .../Integration/Dialect/SparseTensor/CPU/sparse_index.mlir | 12 +++++++----- mlir/test/lit.site.cfg.py.in | 6 ++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_index.mlir b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_index.mlir index cbbae02..602aa5b 100644 --- a/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_index.mlir +++ b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_index.mlir @@ -1,4 +1,6 @@ +// DEFINE: %{option_vec} = // DEFINE: %{option} = enable-runtime-library=true + // DEFINE: %{compile} = mlir-opt %s --sparse-compiler=%{option} // DEFINE: %{run} = mlir-cpu-runner \ // DEFINE: -e entry -entry-point-result=void \ @@ -12,19 +14,19 @@ // RUN: %{compile} | %{run} // // Do the same run, but now with direct IR generation and vectorization. -// REDEFINE: %{option} = "enable-runtime-library=false vl=2 reassociate-fp-reductions=true enable-index-optimizations=true" +// REDEFINE: %{option_vec} = enable-runtime-library=false vl=2 reassociate-fp-reductions=true enable-index-optimizations=true +// REDEFINE: %{option} = "%{option_vec}" // RUN: %{compile} | %{run} -// Do the same run, but now with direct IR generation and, if available, VLA -// vectorization. -// REDEFINE: %{option} = "enable-runtime-library=false vl=4 enable-arm-sve=%ENABLE_VLA" +// Do the same run, but with VLA vectorization. +// REDEFINE: %{option} = "enable-arm-sve=true %{option_vec}" // REDEFINE: %{run} = %lli_host_or_aarch64_cmd \ // REDEFINE: --entry-function=entry_lli \ // REDEFINE: --extra-module=%S/Inputs/main_for_lli.ll \ // REDEFINE: %VLA_ARCH_ATTR_OPTIONS \ // REDEFINE: --dlopen=%mlir_native_utils_lib_dir/libmlir_c_runner_utils%shlibext | \ // REDEFINE: FileCheck %s -// RUN: %{compile} | mlir-translate -mlir-to-llvmir | %{run} +// RUN: %if mlir_arm_sve_tests %{ %{compile} | mlir-translate -mlir-to-llvmir | %{run} %} #SparseVector = #sparse_tensor.encoding<{ lvlTypes = ["compressed"] diff --git a/mlir/test/lit.site.cfg.py.in b/mlir/test/lit.site.cfg.py.in index dc9b9e9..1556869 100644 --- a/mlir/test/lit.site.cfg.py.in +++ b/mlir/test/lit.site.cfg.py.in @@ -36,6 +36,12 @@ config.enable_bindings_python = @MLIR_ENABLE_BINDINGS_PYTHON@ config.intel_sde_executable = "@INTEL_SDE_EXECUTABLE@" config.mlir_run_amx_tests = @MLIR_RUN_AMX_TESTS@ config.mlir_run_arm_sve_tests = @MLIR_RUN_ARM_SVE_TESTS@ +# This is a workaround for the fact that LIT's: +# %if +# requires to be in the set of available features. +# TODO: Update LIT's TestRunner so that this is not required. +if config.mlir_run_arm_sve_tests: + config.available_features.add("mlir_arm_sve_tests") config.mlir_run_arm_sme_tests = @MLIR_RUN_ARM_SME_TESTS@ config.mlir_run_x86vector_tests = @MLIR_RUN_X86VECTOR_TESTS@ config.mlir_run_riscv_vector_tests = "@MLIR_RUN_RISCV_VECTOR_TESTS@" -- 2.7.4