| # SPDX-FileCopyrightText: The Eigen Authors |
| # SPDX-License-Identifier: MPL-2.0 |
| |
| .test:linux: |
| extends: [ .common:linux:cross, .artifacts:test:results ] |
| stage: test |
| variables: |
| # Content-addressed pass cache toggle and manifest location, read by |
| # test.linux.script.sh; the cache stanza below persists the directory. |
| EIGEN_CI_TEST_CACHE: "on" |
| EIGEN_CI_TEST_CACHE_DIR: ${CI_PROJECT_DIR}/.testcache |
| script: |
| - . ci/scripts/test.linux.script.sh |
| after_script: |
| - . ci/scripts/test.linux.after_script.sh |
| rules: !reference [.rules:libeigen:all-tests, rules] |
| tags: |
| - saas-linux-2xlarge-amd64 |
| allow_failure: |
| exit_codes: 42 |
| # Pass-cache manifest consumed by test.linux.script.sh. Same shared |
| # per-job-name pool policy as the build jobs' ccache (rationale in |
| # build.linux.gitlab-ci.yml); merge-request pipelines are the only |
| # writers (the script no-ops elsewhere), so scheduled full-matrix runs |
| # keep their seed diversity. |
| cache: |
| key: "$CI_JOB_NAME_SLUG-testcache" |
| paths: |
| - .testcache/ |
| when: always |
| |
| ##### x86-64 ################################################################### |
| .test:linux:x86-64: |
| extends: .test:linux |
| variables: |
| EIGEN_CI_TARGET_ARCH: x86_64 |
| EIGEN_CI_CROSS_TARGET_TRIPLE: x86_64-linux-gnu |
| |
| # GCC-10 (modern stable) |
| .test:linux:x86-64:gcc-10:default: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:gcc-10:default ] |
| variables: |
| EIGEN_CI_INSTALL: g++-10 |
| |
| test:linux:x86-64:gcc-10:default:official: |
| extends: .test:linux:x86-64:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:gcc-10:default:unsupported: |
| extends: .test:linux:x86-64:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:gcc-10:avx: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:gcc-10:avx ] |
| variables: |
| EIGEN_CI_INSTALL: g++-10 |
| |
| test:linux:x86-64:gcc-10:avx:official: |
| extends: .test:linux:x86-64:gcc-10:avx |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:gcc-10:avx:unsupported: |
| extends: .test:linux:x86-64:gcc-10:avx |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:gcc-10:avx2: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:gcc-10:avx2 ] |
| variables: |
| EIGEN_CI_INSTALL: g++-10 |
| |
| test:linux:x86-64:gcc-10:avx2:official: |
| extends: .test:linux:x86-64:gcc-10:avx2 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:gcc-10:avx2:unsupported: |
| extends: .test:linux:x86-64:gcc-10:avx2 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:gcc-10:avx512dq: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:gcc-10:avx512dq ] |
| variables: |
| EIGEN_CI_INSTALL: g++-10 |
| tags: |
| - eigen-runner |
| - linux |
| - x86-64 |
| - avx512 |
| |
| test:linux:x86-64:gcc-10:avx512dq:official: |
| extends: .test:linux:x86-64:gcc-10:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:gcc-10:avx512dq:unsupported: |
| extends: .test:linux:x86-64:gcc-10:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| # GCC-13 for AVX512-FP16 (_Float16 support). |
| .test:linux:x86-64:gcc-13:default: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:gcc-13:default ] |
| variables: |
| EIGEN_CI_INSTALL: g++-13 |
| |
| # The corresponding test jobs (test:linux:x86-64:gcc-13:avx512fp16:{official, |
| # unsupported}) are intentionally omitted: we do not currently have a runner |
| # whose CPU supports AVX512-FP16, so running them produces wholesale SIGILL |
| # failures. The build:linux:cross:x86-64:gcc-13:avx512fp16:* jobs remain so |
| # that AVX512-FP16 code paths are still compile-checked. |
| |
| # Clang-14 (modern stable) |
| .test:linux:x86-64:clang-14:default: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:clang-14:default ] |
| variables: |
| EIGEN_CI_INSTALL: clang-14 |
| |
| test:linux:x86-64:clang-14:default:official: |
| extends: .test:linux:x86-64:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-14:default:unsupported: |
| extends: .test:linux:x86-64:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:clang-14:avx2: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:clang-14:avx2 ] |
| variables: |
| EIGEN_CI_INSTALL: clang-14 |
| |
| test:linux:x86-64:clang-14:avx2:official: |
| extends: .test:linux:x86-64:clang-14:avx2 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-14:avx2:unsupported: |
| extends: .test:linux:x86-64:clang-14:avx2 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:clang-14:avx512dq: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:clang-14:avx512dq ] |
| variables: |
| EIGEN_CI_INSTALL: clang-14 |
| tags: |
| - eigen-runner |
| - linux |
| - x86-64 |
| - avx512 |
| |
| test:linux:x86-64:clang-14:avx512dq:official: |
| extends: .test:linux:x86-64:clang-14:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-14:avx512dq:unsupported: |
| extends: .test:linux:x86-64:clang-14:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| # Generic vector extension backend. |
| .test:linux:x86-64:clang-19:generic:avx512dq: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:clang-19:generic:avx512dq ] |
| variables: |
| EIGEN_CI_INSTALL: clang-19 |
| tags: |
| - eigen-runner |
| - linux |
| - x86-64 |
| - avx512 |
| |
| test:linux:x86-64:clang-19:generic:avx512dq:official: |
| extends: .test:linux:x86-64:clang-19:generic:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-19:generic:avx512dq:unsupported: |
| extends: .test:linux:x86-64:clang-19:generic:avx512dq |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:x86-64:clang-19:cxx20:nightly: |
| extends: .test:linux:x86-64 |
| needs: [ build:linux:cross:x86-64:clang-19:cxx20:nightly ] |
| variables: |
| EIGEN_CI_INSTALL: clang-19 |
| rules: |
| - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH |
| - if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen" |
| - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/" |
| |
| test:linux:x86-64:clang-19:cxx20:nightly:official: |
| extends: .test:linux:x86-64:clang-19:cxx20:nightly |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-19:cxx20:nightly:unsupported: |
| extends: .test:linux:x86-64:clang-19:cxx20:nightly |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### Sanitizers ############################################################### |
| |
| .test:linux:x86-64:clang-19:default:asan-ubsan: |
| extends: .test:linux:x86-64 |
| variables: |
| EIGEN_CI_INSTALL: clang-19 llvm-19 libclang-rt-19-dev |
| LD_LIBRARY_PATH: /usr/lib/llvm-19/lib/clang/19/lib/linux |
| ASAN_OPTIONS: detect_leaks=0:print_stacktrace=1 |
| UBSAN_OPTIONS: print_stacktrace=1 |
| ASAN_SYMBOLIZER_PATH: /usr/lib/llvm-19/bin/llvm-symbolizer |
| EIGEN_CI_CTEST_ARGS: --timeout 2000 |
| |
| test:linux:x86-64:clang-19:default:asan-ubsan:official: |
| extends: .test:linux:x86-64:clang-19:default:asan-ubsan |
| needs: [ build:linux:cross:x86-64:clang-19:default:asan-ubsan:official ] |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:clang-19:default:asan-ubsan:unsupported: |
| extends: .test:linux:x86-64:clang-19:default:asan-ubsan |
| needs: [ build:linux:cross:x86-64:clang-19:default:asan-ubsan:unsupported ] |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### NVHPC #################################################################### |
| |
| .test:linux:x86-64:nvhpc-26.1:default: |
| extends: .test:linux:x86-64 |
| image: nvcr.io/nvidia/nvhpc:26.1-devel-cuda13.1-ubuntu24.04 |
| variables: |
| EIGEN_CI_INSTALL: "" |
| # Match the rules on the paired builds in build.linux.gitlab-ci.yml: a test |
| # job whose build did not run has nothing to execute. |
| rules: !reference [.rules:libeigen:scheduled-or-web, rules] |
| |
| test:linux:x86-64:nvhpc-26.1:default:official: |
| extends: .test:linux:x86-64:nvhpc-26.1:default |
| needs: [ build:linux:x86-64:nvhpc-26.1:default:official ] |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:x86-64:nvhpc-26.1:default:unsupported: |
| extends: .test:linux:x86-64:nvhpc-26.1:default |
| needs: [ build:linux:x86-64:nvhpc-26.1:default:unsupported ] |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### CUDA ##################################################################### |
| .test:linux:cuda: |
| extends: .test:linux |
| allow_failure: true |
| variables: |
| EIGEN_CI_CTEST_LABEL: gpu |
| # nvcc-linked binaries are not bit-reproducible, so the content-addressed |
| # pass cache could never hit here. cache: [] also drops the inherited |
| # stanza. |
| EIGEN_CI_TEST_CACHE: "off" |
| cache: [] |
| rules: !reference [.rules:libeigen:gpu, rules] |
| # Name the GPU and driver the job landed on before anything else. The |
| # binaries are built for one architecture (see the tag note below), and the |
| # log is the only place that says which runner pool picked the job up. |
| before_script: |
| - nvidia-smi |
| - . ci/scripts/common.linux.before_script.sh |
| # The CUDA 11.5 jobs inherit this GitLab SaaS T4 (sm_75) tag. Keep it off |
| # self-hosted runners: their old cuFFT library aborts in cufftPlan1d on the |
| # L4, and allow_failure hides the misplaced job. Newer jobs override the tag |
| # through .test:linux:cuda:l4 below. |
| tags: |
| - saas-linux-medium-amd64-gpu-standard |
| |
| .test:linux:cuda:l4: |
| extends: .test:linux:cuda |
| tags: |
| - eigen-linux-cuda-l4 |
| |
| # ---- CUDA 11.5 + oldest supported compilers --------------------------------- |
| |
| # GCC-10, CUDA-11.5 |
| test:linux:cuda-11.5:gcc-10: |
| extends: .test:linux:cuda |
| image: nvidia/cuda:11.5.2-devel-ubuntu20.04 |
| needs: [ build:linux:cuda-11.5:gcc-10 ] |
| variables: |
| EIGEN_CI_INSTALL: gcc-10 g++-10 |
| EIGEN_CI_C_COMPILER: gcc-10 |
| EIGEN_CI_CXX_COMPILER: g++-10 |
| |
| # Clang-14, CUDA-11.5 |
| test:linux:cuda-11.5:clang-14: |
| extends: .test:linux:cuda |
| image: nvidia/cuda:11.5.2-devel-ubuntu20.04 |
| needs: [ build:linux:cuda-11.5:clang-14 ] |
| before_script: |
| # This override replaces the template's before_script, so repeat its |
| # first step. |
| - nvidia-smi |
| # Ubuntu 20.04 lacks clang-14. Add the LLVM apt repo before |
| # the common before_script installs EIGEN_CI_INSTALL packages. |
| - apt-get update -y > /dev/null |
| - apt-get install -y --no-install-recommends wget gnupg > /dev/null |
| - wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key |
| | gpg --dearmor -o /usr/share/keyrings/llvm-archive-keyring.gpg |
| - echo 'deb [signed-by=/usr/share/keyrings/llvm-archive-keyring.gpg] http://apt.llvm.org/focal/ llvm-toolchain-focal-14 main' |
| > /etc/apt/sources.list.d/llvm-14.list |
| - apt-get update -y > /dev/null |
| - . ci/scripts/common.linux.before_script.sh |
| variables: |
| EIGEN_CI_INSTALL: clang-14 |
| EIGEN_CI_CXX_COMPILER: clang++-14 |
| EIGEN_CI_C_COMPILER: clang-14 |
| |
| # ---- New: latest CUDA ------------------------------------------------------- |
| |
| # GCC-13, CUDA-12.6 |
| test:linux:cuda-12.6:gcc-13: |
| extends: .test:linux:cuda:l4 |
| image: nvidia/cuda:12.6.3-devel-ubuntu24.04 |
| needs: [ build:linux:cuda-12.6:gcc-13 ] |
| variables: |
| EIGEN_CI_CXX_COMPILER: g++-13 |
| EIGEN_CI_C_COMPILER: gcc-13 |
| |
| # Clang-19, CUDA-12.6 |
| test:linux:cuda-12.6:clang-19: |
| extends: .test:linux:cuda:l4 |
| image: nvidia/cuda:12.6.3-devel-ubuntu24.04 |
| needs: [ build:linux:cuda-12.6:clang-19 ] |
| variables: |
| EIGEN_CI_INSTALL: clang-19 |
| EIGEN_CI_CXX_COMPILER: clang++-19 |
| EIGEN_CI_C_COMPILER: clang-19 |
| |
| |
| ##### qemu-emulated test base ################################################## |
| |
| # Shared base for cross-arch tests that run under qemu-user emulation |
| # (arm, ppc64le, loongarch64). Limits parallelism, raises the per-test |
| # timeout, and skips tests that are too slow to be useful under qemu. |
| .test:linux:qemu: |
| extends: .test:linux |
| variables: |
| EIGEN_CI_CTEST_ARGS: --timeout 2000 |
| # Well below the host's core count: TCG contention stretches per-test wall |
| # time, and the --timeout above has to hold with that stretch included. |
| # Most of what a wider run could give is out of reach anyway. Measured on |
| # the 2026-08-16 scheduled run, the two longest jobs sum 4518 s |
| # (loongarch64:official) and 4870 s (ppc64le:gcc-14:official) of test time |
| # behind a single longest test of 251 s and 447 s, so their makespan is |
| # pinned by that one test from 18 and 11 ways on; 12 already sits at the |
| # second's floor. test.linux.script.sh clamps this to nproc, which is what |
| # the smaller runners in the tag's pool report. |
| EIGEN_CI_CTEST_PARALLEL: "12" |
| EIGEN_CI_CTEST_EXCLUDE: tensor_thread_pool |
| # Each test binary repeats its whole body 10x with fresh seeds by default, |
| # which puts the slowest binaries past any workable per-test timeout under |
| # TCG. The emulated jobs are here for ISA-specific codegen coverage; seed |
| # diversity is already provided by the native jobs at the default repeat. |
| EIGEN_REPEAT: "2" |
| |
| ##### arm ###################################################################### |
| |
| .test:linux:arm: |
| extends: .test:linux:qemu |
| variables: |
| EIGEN_CI_TARGET_ARCH: arm |
| EIGEN_CI_CROSS_TARGET_TRIPLE: arm-linux-gnueabihf |
| |
| .test:linux:arm:gcc-10:default: |
| extends: .test:linux:arm |
| needs: [ build:linux:cross:arm:gcc-10:default ] |
| variables: |
| EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf qemu-user-static |
| |
| test:linux:arm:gcc-10:default:official: |
| extends: .test:linux:arm:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:arm:gcc-10:default:unsupported: |
| extends: .test:linux:arm:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:arm:clang-14:default: |
| extends: .test:linux:arm |
| needs: [ build:linux:cross:arm:clang-14:default ] |
| variables: |
| EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf clang-14 qemu-user-static |
| |
| test:linux:arm:clang-14:default:official: |
| extends: .test:linux:arm:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:arm:clang-14:default:unsupported: |
| extends: .test:linux:arm:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### SME ###################################################################### |
| |
| .test:linux:sme: |
| extends: .test:linux |
| stage: test |
| # QEMU enables SME2 via `-cpu max,sme=on` (there is no separate sme2 |
| # property); the multi-vector ops the kernel uses (svld1_f32_x4, the SME2 |
| # FMOPA forms) are only emulated from QEMU 10.1 on. Ubuntu 24.04 ships |
| # 8.2.2 (base FEAT_SME only), so run the test stage on 26.04 (QEMU 10.2.x). |
| # The build stage stays on 24.04 -- it only cross-compiles and never invokes |
| # the emulator. |
| image: ubuntu:26.04 |
| variables: |
| EIGEN_CI_TARGET_ARCH: aarch64-sme |
| EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu |
| # Per-test wall time is bound by single-core TCG speed, which swings ~4x |
| # across SaaS hosts; double ctest's default 1500s timeout to absorb it. |
| EIGEN_CI_CTEST_ARGS: --timeout 3000 |
| # Cut the default 10x per-binary repeat: like .test:linux:qemu, these jobs |
| # exist for ISA coverage, and 10 repeats under TCG pushes the slowest |
| # binaries (mixingtypes_3, eigensolver_selfadjoint_5, FFT, ...) past even |
| # the raised 3000s timeout. Seed diversity comes from the native jobs. |
| EIGEN_REPEAT: "2" |
| # Inherit the 2xlarge runner from .test:linux (same cost under GitLab's |
| # open-source program). The qemu-user run is single-threaded per subtest, |
| # so this is about cost-neutral consistency, not speed. |
| |
| .test:linux:sme:gcc-14:default: |
| extends: .test:linux:sme |
| needs: [ build:linux:cross:sme:gcc-14:default ] |
| variables: |
| EIGEN_CI_CXX_COMPILER: aarch64-linux-gnu-g++-14 |
| # Test stage only needs the aarch64 runtime (loader + libstdc++/libc under |
| # /usr/aarch64-linux-gnu, used via qemu's -L prefix) and qemu-user; the |
| # default-version cross g++ provides the libs on any release, and newer |
| # libstdc++ is ABI-compatible with the gcc-14-built binaries. On 25.10+ |
| # the static qemu binaries are gone (qemu-user-static is now a virtual |
| # package), so install qemu-user and invoke the dynamic qemu-aarch64. |
| EIGEN_CI_CROSS_INSTALL: g++-aarch64-linux-gnu qemu-user |
| |
| # Each concrete SME test job must set QEMU_CPU explicitly; qemu otherwise |
| # silently runs at its own default SME SVL instead of failing. |
| .test:linux:sme:gcc-14:default:official: |
| extends: .test:linux:sme:gcc-14:default |
| variables: |
| # product_sme, product_symm, product_trsolve, product_trmm, product_syrk and |
| # product_mmtr all drive the SVL-sensitive SME micro-kernel and packers (trmm |
| # packs in PanelMode with per-panel offsets; syrk and mmtr consume packed |
| # panels in lcm(mr, nr)-sized blocks through tribb_kernel, which is wider than |
| # mr only for complex<float>), so they run at every SVL below (mixingtypes is |
| # added at one SVL only -- see the sme512 job). |
| EIGEN_CI_CTEST_REGEX: product_sme|product_symm|product_trsolve|product_trmm|product_syrk|product_mmtr |
| |
| # SVL=128: architectural minimum; exercises the most sub-block passes per |
| # logical block. |
| test:linux:sme128:gcc-14:default:official: |
| extends: .test:linux:sme:gcc-14:default:official |
| variables: |
| QEMU_CPU: max,sme=on,sme128=on,sme256=off,sme512=off,sme1024=off,sme2048=off |
| |
| # SVL=256: exercises runtime tiling geometry not covered by 512-bit tiles. |
| test:linux:sme256:gcc-14:default:official: |
| extends: .test:linux:sme:gcc-14:default:official |
| variables: |
| QEMU_CPU: max,sme=on,sme256=on,sme128=off,sme512=off,sme1024=off,sme2048=off |
| |
| # SVL=512: block matches the tile grid exactly; exercises the multi-vector-load |
| # loop in sme_process. Also adds mixingtypes, whose SME-relevant coverage |
| # (pinned mixed-scalar products route to the generic, SVL-independent kernel) |
| # needs only one SVL. |
| test:linux:sme512:gcc-14:default:official: |
| extends: .test:linux:sme:gcc-14:default:official |
| variables: |
| QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off |
| # mixingtypes_[0-9] excludes mixingtypes_generic_32/64 (not built here), which |
| # ctest would otherwise fail to find. |
| EIGEN_CI_CTEST_REGEX: product_sme|product_symm|product_trsolve|product_trmm|product_syrk|product_mmtr|mixingtypes_[0-9] |
| |
| # SVL=2048: architectural maximum; exercises predication down to the logical |
| # block. |
| test:linux:sme2048:gcc-14:default:official: |
| extends: .test:linux:sme:gcc-14:default:official |
| variables: |
| QEMU_CPU: max,sme=on,sme2048=on,sme128=off,sme256=off,sme512=off,sme1024=off |
| |
| # The no-FEAT_SME_F64F64 build, at one SVL: double has to reach the generic |
| # kernel and still be correct inside an SME build, where packet traits, |
| # alignment and cache blocking all differ from a plain NEON build. Its subtest |
| # skips the SME-only symm and mapper cases there, so the run is short. One SVL |
| # is enough -- the generic kernel it exercises is SVL-independent. |
| test:linux:sme512:gcc-14:no-f64f64:official: |
| extends: .test:linux:sme:gcc-14:default |
| needs: [ build:linux:cross:sme:gcc-14:no-f64f64 ] |
| variables: |
| QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off |
| EIGEN_CI_CTEST_REGEX: product_sme |
| |
| # Full nightly SME test run: the complete Official + Unsupported ctest suite |
| # against the full build above, at a single representative SVL (512: the logical |
| # block matches the ZA tile grid exactly, exercising the multi-vector-load fast |
| # path in sme_process). Cross-SVL geometry is already covered by the per-SVL |
| # product_* subset jobs above, so one SVL is enough for the full run. Extends |
| # ...:default (not ...:default:official) so no product_* CTEST_REGEX is |
| # inherited -- these select by label instead. Official/Unsupported are split |
| # into two jobs, and Official is sharded further below. The 3h job timeout is |
| # the GitLab SaaS hosted-runner maximum (a slow host overran 2h). Inherits |
| # .rules:libeigen:all-tests, so it runs on the nightly schedule and on |
| # all-tests-labelled MRs. |
| .test:linux:sme512:gcc-14:full: |
| extends: .test:linux:sme:gcc-14:default |
| needs: [ build:linux:cross:sme:gcc-14:full ] |
| variables: |
| QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off |
| timeout: 3h |
| |
| # -I <index>,,<total> intersects with -L, partitioning Official across the two |
| # shards; --rerun-failed overrides -I, so retries stay shard-local. |
| test:linux:sme512:gcc-14:full:official: |
| extends: .test:linux:sme512:gcc-14:full |
| parallel: 2 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| # Overriding EIGEN_CI_CTEST_ARGS replaces the whole value; restate --timeout. |
| EIGEN_CI_CTEST_ARGS: --timeout 3000 -I $CI_NODE_INDEX,,$CI_NODE_TOTAL |
| |
| test:linux:sme512:gcc-14:full:unsupported: |
| extends: .test:linux:sme512:gcc-14:full |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| # tensor_thread_pool: threaded tests are useless under single-threaded TCG |
| # (same exclusion as .test:linux:qemu). FFT: overruns even the raised 3000s |
| # timeout under TCG at EIGEN_REPEAT=2; it is kissfft-based scalar/complex |
| # code with no SVE/SME-specific paths, and every native job covers it. |
| # Raising the timeout past ~3600s is not an option: a single silent test |
| # would trip the runner's 1h no-log-output kill. |
| EIGEN_CI_CTEST_EXCLUDE: tensor_thread_pool|FFT |
| |
| ##### SVE ###################################################################### |
| |
| # Emulation via QEMU for SVE. Nothing else runs the SVE backend: the aarch64 |
| # jobs are NEON and the SME jobs above take the NEON headers. |
| .test:linux:sve: |
| extends: .test:linux |
| # qemu >= 10 for the sve-default-vector-length property used below; Ubuntu |
| # 24.04 ships 8.2. Same split as the SME jobs: build on 24.04, test on 26.04. |
| image: ubuntu:26.04 |
| variables: |
| EIGEN_CI_TARGET_ARCH: aarch64-sve |
| EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu |
| # Per-test wall time under single-core TCG swings widely across SaaS hosts; |
| # double ctest's default 1500s, as the SME jobs do. |
| EIGEN_CI_CTEST_ARGS: --timeout 3000 |
| EIGEN_REPEAT: "2" |
| # Threaded tests are meaningless under single-threaded TCG, and FFT overruns |
| # even the raised timeout at EIGEN_REPEAT=2 -- it is kissfft-based scalar and |
| # complex code with no SVE-specific path, and every native job covers it. |
| # On the anchor rather than the :unsupported jobs so the affected-tier jobs, |
| # which apply no label filter and so run both labels in one pass, inherit it |
| # too; the :official jobs are unaffected either way, as both names are |
| # Unsupported tests. |
| EIGEN_CI_CTEST_EXCLUDE: tensor_thread_pool|FFT |
| # The test stage never compiles, so no build compiler is named here and one |
| # anchor serves both widths whichever GCC built them: all this needs is the |
| # aarch64 runtime and qemu-user, and the default-version cross g++ supplies |
| # the libraries on any release. |
| EIGEN_CI_CXX_COMPILER: aarch64-linux-gnu-g++ |
| EIGEN_CI_CROSS_INSTALL: g++-aarch64-linux-gnu qemu-user |
| |
| # Each concrete job must set QEMU_CPU, and both halves of it: sveN=on advertises |
| # the width, sve-default-vector-length (in bytes) selects the one a task |
| # actually runs at. Setting only the first leaves qemu on its own default, so a |
| # job would silently run at the wrong width and pass against packet types built |
| # for another. The sve_vector_length test compares RDVL against |
| # EIGEN_ARM64_SVE_VL and fails if this is ever wrong. |
| .test:linux:sve:vl128: |
| extends: .test:linux:sve |
| needs: [ build:linux:cross:sve:gcc-14:vl128 ] |
| variables: |
| QEMU_CPU: max,sve128=on,sve-default-vector-length=16 |
| |
| .test:linux:sve:vl256: |
| extends: .test:linux:sve |
| needs: [ build:linux:cross:sve:gcc-13:vl256 ] |
| variables: |
| QEMU_CPU: max,sve256=on,sve-default-vector-length=32 |
| |
| .test:linux:sve:vl512: |
| extends: .test:linux:sve |
| needs: [ build:linux:cross:sve:gcc-13:vl512 ] |
| variables: |
| QEMU_CPU: max,sve512=on,sve-default-vector-length=64 |
| |
| # The three lengths SVE hardware implements: 128 (Neoverse V2, Grace), 256 |
| # (Neoverse V1, Graviton3) and 512 (A64FX). Running all three is what makes the |
| # sweep worth its minutes -- the packet-size-dependent paths differ between them |
| # (four- and eight-wide double packets, deeper predux_mul folds and ptranspose |
| # networks), and a packet size of eight, which is where the GEBP column-group |
| # guard went wrong, is reached by float at 256 and by double at 512. The job |
| # names carry the compiler that built the binaries, which is gcc-13 above 128 |
| # bits -- see the note on .build:linux:cross:sve:gcc-14. |
| test:linux:sve128:gcc-14:official: |
| extends: .test:linux:sve:vl128 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:sve128:gcc-14:unsupported: |
| extends: .test:linux:sve:vl128 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| test:linux:sve256:gcc-13:official: |
| extends: .test:linux:sve:vl256 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:sve256:gcc-13:unsupported: |
| extends: .test:linux:sve:vl256 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| test:linux:sve512:gcc-13:official: |
| extends: .test:linux:sve:vl512 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:sve512:gcc-13:unsupported: |
| extends: .test:linux:sve:vl512 |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### aarch64 ################################################################## |
| |
| .test:linux:aarch64: |
| extends: .test:linux |
| variables: |
| EIGEN_CI_TARGET_ARCH: aarch64 |
| EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu |
| tags: |
| - saas-linux-large-arm64 |
| |
| .test:linux:aarch64:gcc-10:default: |
| extends: .test:linux:aarch64 |
| needs: [ build:linux:cross:aarch64:gcc-10:default ] |
| variables: |
| EIGEN_CI_INSTALL: g++-10 |
| |
| test:linux:aarch64:gcc-10:default:official: |
| extends: .test:linux:aarch64:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:aarch64:gcc-10:default:unsupported: |
| extends: .test:linux:aarch64:gcc-10:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:aarch64:clang-14:default: |
| extends: .test:linux:aarch64 |
| needs: [ build:linux:cross:aarch64:clang-14:default ] |
| variables: |
| EIGEN_CI_INSTALL: clang-14 |
| |
| test:linux:aarch64:clang-14:default:official: |
| extends: .test:linux:aarch64:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:aarch64:clang-14:default:unsupported: |
| extends: .test:linux:aarch64:clang-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### ppc64le ################################################################## |
| |
| .test:linux:ppc64le: |
| extends: .test:linux:qemu |
| variables: |
| EIGEN_CI_TARGET_ARCH: ppc64le |
| EIGEN_CI_CROSS_TARGET_TRIPLE: powerpc64le-linux-gnu |
| |
| .test:linux:ppc64le:gcc-14:default: |
| extends: .test:linux:ppc64le |
| needs: [ build:linux:cross:ppc64le:gcc-14:default ] |
| variables: |
| EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu qemu-user-static |
| |
| test:linux:ppc64le:gcc-14:default:official: |
| extends: .test:linux:ppc64le:gcc-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:ppc64le:gcc-14:default:unsupported: |
| extends: .test:linux:ppc64le:gcc-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:ppc64le:clang-16:default: |
| extends: .test:linux:ppc64le |
| needs: [ build:linux:cross:ppc64le:clang-16:default ] |
| variables: |
| EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu clang-16 qemu-user-static |
| |
| test:linux:ppc64le:clang-16:default:official: |
| extends: .test:linux:ppc64le:clang-16:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:ppc64le:clang-16:default:unsupported: |
| extends: .test:linux:ppc64le:clang-16:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### loongarch64 ############################################################## |
| |
| .test:linux:loongarch64: |
| extends: .test:linux:qemu |
| variables: |
| EIGEN_CI_TARGET_ARCH: loongarch64 |
| EIGEN_CI_CROSS_TARGET_TRIPLE: loongarch64-linux-gnu |
| EIGEN_CI_CROSS_INSTALL: g++-14-loongarch64-linux-gnu qemu-user-static |
| |
| # GCC-14 (Ubuntu 24) |
| .test:linux:loongarch64:gcc-14:default: |
| extends: .test:linux:loongarch64 |
| needs: [ build:linux:cross:loongarch64:gcc-14:default ] |
| |
| test:linux:loongarch64:gcc-14:default:official: |
| extends: .test:linux:loongarch64:gcc-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:loongarch64:gcc-14:default:unsupported: |
| extends: .test:linux:loongarch64:gcc-14:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| ##### riscv64 ################################################################## |
| |
| .test:linux:riscv64: |
| extends: .test:linux |
| image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN} |
| variables: |
| EIGEN_CI_TARGET_ARCH: riscv64 |
| EIGEN_CI_SKIP_APT: "true" |
| tags: |
| - riscv |
| allow_failure: true |
| |
| .test:linux:riscv64:gcc-15:default: |
| extends: .test:linux:riscv64 |
| needs: [ build:linux:riscv64:gcc-15:default ] |
| variables: |
| EIGEN_CI_INSTALL: g++-15 |
| |
| test:linux:riscv64:gcc-15:default:official: |
| extends: .test:linux:riscv64:gcc-15:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:riscv64:gcc-15:default:unsupported: |
| extends: .test:linux:riscv64:gcc-15:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| .test:linux:riscv64:clang-21:default: |
| extends: .test:linux:riscv64 |
| needs: [ build:linux:riscv64:clang-21:default ] |
| variables: |
| EIGEN_CI_INSTALL: clang-21 g++-15 |
| |
| test:linux:riscv64:clang-21:default:official: |
| extends: .test:linux:riscv64:clang-21:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Official |
| |
| test:linux:riscv64:clang-21:default:unsupported: |
| extends: .test:linux:riscv64:clang-21:default |
| variables: |
| EIGEN_CI_CTEST_LABEL: Unsupported |
| |
| # Unlike the other smoke jobs, these two are namespace-guarded: they inherit |
| # `tags: [riscv]` from .test:linux:riscv64, a single self-hosted machine that |
| # no fork can reach. Scheduled in a fork they would sit pending until the |
| # stuck-job timeout dropped them -- the better part of two hours of neither- |
| # green-nor-finished for a contributor who can do nothing about it, which |
| # allow_failure hides but does not shorten. Their paired builds are guarded for |
| # the same reason: they exist only to feed these. |
| test:linux:riscv64:clang-21:default:smoketest: |
| extends: .test:linux:riscv64:clang-21:default |
| image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN} |
| needs: [ build:linux:riscv64:clang-21:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest:upstream-runner, rules] |
| |
| test:linux:riscv64:gcc-15:default:smoketest: |
| extends: .test:linux:riscv64:gcc-15:default |
| image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN} |
| needs: [ build:linux:riscv64:gcc-15:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest:upstream-runner, rules] |
| |
| ##### MR Smoke Tests ########################################################### |
| |
| test:linux:x86-64:gcc-10:default:smoketest: |
| extends: .test:linux:x86-64:gcc-10:default |
| image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_RUN} |
| needs: [ build:linux:cross:x86-64:gcc-10:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest, rules] |
| tags: |
| - saas-linux-medium-amd64 |
| |
| test:linux:x86-64:clang-14:default:smoketest: |
| extends: .test:linux:x86-64:clang-14:default |
| image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_RUN} |
| needs: [ build:linux:cross:x86-64:clang-14:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest, rules] |
| tags: |
| - saas-linux-medium-amd64 |
| |
| test:linux:aarch64:gcc-10:default:smoketest: |
| extends: .test:linux:aarch64:gcc-10:default |
| image: ${EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_RUN} |
| needs: [ build:linux:aarch64:gcc-10:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest, rules] |
| tags: |
| - saas-linux-small-arm64 |
| |
| test:linux:aarch64:clang-14:default:smoketest: |
| extends: .test:linux:aarch64:clang-14:default |
| image: ${EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_RUN} |
| needs: [ build:linux:aarch64:clang-14:default:smoketest ] |
| variables: |
| EIGEN_CI_SKIP_APT: "true" |
| EIGEN_CI_CTEST_LABEL: smoketest |
| rules: !reference [.rules:libeigen:smoketest, rules] |
| tags: |
| - saas-linux-small-arm64 |
| |
| ##### Build-System Integration ################################################# |
| |
| # Grounds the CMake behavior doc/TopicCMakeGuide.dox documents: find_package |
| # against an installed tree, the version-range contract of the hand-written |
| # Eigen3ConfigVersion.cmake, embedding via add_subdirectory, and the ways an |
| # embedding project opts out of Eigen's install rules. |
| # |
| # Self-contained, so it neither extends .test:linux nor needs a build job: the |
| # scenarios run their own nested configures against the checkout, and the |
| # enclosing build directory holds only the CTest definitions. Staying off |
| # .test:linux also keeps it off the pass cache, which keys on a test's |
| # executable -- these tests have none, so a recorded pass would outlive any |
| # change to Eigen's CMake files. |
| # |
| # Cheap -- a nested configure and a small compile per scenario, six seconds of |
| # script on the runner, inside a job that takes half a minute once the image |
| # pull and checkout are counted -- but still gated on the files that can make |
| # it fail rather than run on every merge request: Eigen's own CMake surface, |
| # the guide it grounds, and the job's own definition and script. A push to the |
| # default branch runs it unconditionally, as the backstop for whatever the path |
| # list does not anticipate. |
| # |
| # Not behind the all-tests label, unlike the documentation job it complements: |
| # that label is why an incorrect claim in the CMake guide reached a release |
| # unnoticed, and an MR that edits these files is exactly the MR that needs the |
| # answer before merge rather than after. |
| # Publishes nothing: no .artifacts:* template, and its build directory holds |
| # only CTest definitions and the scenarios' own configure and install trees. |
| test:linux:buildsystem: |
| extends: .common:linux:cross |
| image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD} |
| stage: test |
| needs: [] |
| variables: |
| EIGEN_CI_TARGET_ARCH: x86_64 |
| EIGEN_CI_CROSS_TARGET_TRIPLE: x86_64-linux-gnu |
| EIGEN_CI_C_COMPILER: gcc-10 |
| EIGEN_CI_CXX_COMPILER: g++-10 |
| EIGEN_CI_SKIP_APT: "true" |
| script: |
| - . ci/scripts/test.buildsystem.script.sh |
| tags: |
| - saas-linux-medium-amd64 |
| rules: |
| - if: $CI_PIPELINE_SOURCE == "merge_request_event" |
| changes: |
| - CMakeLists.txt |
| - cmake/**/* |
| - Eigen/Version |
| - blas/CMakeLists.txt |
| - lapack/CMakeLists.txt |
| - unsupported/**/CMakeLists.txt |
| - doc/CMakeLists.txt |
| - doc/TopicCMakeGuide.dox |
| - test/buildsystem/**/* |
| - ci/test.linux.gitlab-ci.yml |
| - ci/scripts/test.buildsystem.script.sh |
| # The merge-request entry above is deliberately fork-visible: it runs on a |
| # hosted runner, and a fork editing the CMake surface needs the answer as |
| # much as this project does. The three below are this project's own |
| # scheduled, web and post-merge coverage, so they are namespace-guarded |
| # like every .rules:libeigen:* set. |
| - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen" |
| - if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen" |
| - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH |
| ##### MR Affected Tests ######################################################## |
| # Paired with the affected build jobs. No CTest label is set: the regex from |
| # select:tests is the only filter, so a selection spanning Official and |
| # Unsupported tests runs in one job. |
| # |
| # Each job shares its trigger rule with the build job it needs; see |
| # .rules:libeigen:affected-tests:* in ci/common.gitlab-ci.yml. |
| |
| ##### Always, under the label ################################################## |
| |
| test:linux:x86-64:gcc-10:avx2:affected: |
| extends: [ .test:linux:x86-64:gcc-10:avx2, .affected:test ] |
| needs: [ build:linux:cross:x86-64:gcc-10:avx2:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests, rules] |
| |
| test:linux:x86-64:clang-14:default:affected: |
| extends: [ .test:linux:x86-64:clang-14:default, .affected:test ] |
| needs: [ build:linux:cross:x86-64:clang-14:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests, rules] |
| |
| test:linux:aarch64:gcc-10:default:affected: |
| extends: [ .test:linux:aarch64:gcc-10:default, .affected:test ] |
| needs: [ build:linux:cross:aarch64:gcc-10:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests, rules] |
| |
| test:linux:aarch64:clang-14:default:affected: |
| extends: [ .test:linux:aarch64:clang-14:default, .affected:test ] |
| needs: [ build:linux:cross:aarch64:clang-14:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests, rules] |
| |
| ##### Platform-triggered ####################################################### |
| |
| test:linux:x86-64:gcc-10:default:affected: |
| extends: [ .test:linux:x86-64:gcc-10:default, .affected:test ] |
| needs: [ build:linux:cross:x86-64:gcc-10:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:sse, rules] |
| |
| test:linux:x86-64:gcc-10:avx:affected: |
| extends: [ .test:linux:x86-64:gcc-10:avx, .affected:test ] |
| needs: [ build:linux:cross:x86-64:gcc-10:avx:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:avx, rules] |
| |
| test:linux:x86-64:gcc-10:avx512dq:affected: |
| extends: [ .test:linux:x86-64:gcc-10:avx512dq, .affected:test ] |
| needs: [ build:linux:cross:x86-64:gcc-10:avx512dq:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:avx512, rules] |
| |
| test:linux:arm:gcc-10:default:affected: |
| extends: [ .test:linux:arm:gcc-10:default, .affected:test ] |
| needs: [ build:linux:cross:arm:gcc-10:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:neon, rules] |
| |
| test:linux:ppc64le:gcc-14:default:affected: |
| extends: [ .test:linux:ppc64le:gcc-14:default, .affected:test ] |
| needs: [ build:linux:cross:ppc64le:gcc-14:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:altivec, rules] |
| |
| test:linux:loongarch64:gcc-14:default:affected: |
| extends: [ .test:linux:loongarch64:gcc-14:default, .affected:test ] |
| needs: [ build:linux:cross:loongarch64:gcc-14:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:lsx, rules] |
| |
| test:linux:riscv64:gcc-15:default:affected: |
| extends: [ .test:linux:riscv64:gcc-15:default, .affected:test ] |
| needs: [ build:linux:riscv64:gcc-15:default:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:rvv10, rules] |
| |
| # Three vector lengths: the SVE packet code has VL-dependent fold counts and |
| # transpose networks, so a single length is not a meaningful affected-tier |
| # signal for a change under arch/SVE. |
| test:linux:sve128:gcc-14:affected: |
| extends: [ .test:linux:sve:vl128, .affected:test ] |
| needs: [ build:linux:cross:sve:gcc-14:vl128:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:sve, rules] |
| |
| test:linux:sve256:gcc-13:affected: |
| extends: [ .test:linux:sve:vl256, .affected:test ] |
| needs: [ build:linux:cross:sve:gcc-13:vl256:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:sve, rules] |
| |
| test:linux:sve512:gcc-13:affected: |
| extends: [ .test:linux:sve:vl512, .affected:test ] |
| needs: [ build:linux:cross:sve:gcc-13:vl512:affected, select:tests ] |
| rules: !reference [.rules:libeigen:affected-tests:sve, rules] |