The Template Vector Library (TVL) offers hardware-oblivious SIMD programming. The Technische Universität Dresden originally developed the TVL using C++-templates and their work is still ongoing (see their GitHub repository).
As C++-templates hinder optimization at compile time, this TVL project tries to move from a template-driven design to a domain-specific language (DSL). It uses LLVM's subproject MLIR (Multi-Level Intermediate Representation) to build the compiler and reuse common compiler infrastructure.
For the various operations TVL offers in MLIR have a look at the appropriate GitHub Wiki Page.
This setup assumes that you have built LLVM and MLIR in $BUILD_DIR and installed them to $PREFIX (for further information see the MLIR Getting Started documentation).
Prepare the cmake enviroment
mkdir build && cd build
cmake -G Ninja .. -DMLIR_DIR=$PREFIX/lib/cmake/mlir -DLLVM_EXTERNAL_LIT=$BUILD_DIR/bin/llvm-litTo build the compiler, run
cmake --build . --target tvlcTo build and launch the tests, run
cmake --build . --target check-tvlTo build the documentation from the TableGen description of the dialect operations, run
cmake --build . --target mlir-docNote: Make sure to pass -DLLVM_INSTALL_UTILS=ON when building LLVM with CMake in order to install FileCheck to the chosen installation prefix.