xDSL: A Python-native SSA Compiler Framework
xDSL is a Python-native compiler framework built around SSA-based intermediate representations (IRs). Users of xDSL build a compiler by assembling predefined domain-specific IRs and, optionally, defining their own custom IRs. xDSL uses multi-level IRs, meaning that during the compilation process, a program will be lowered through several of these IRs. This allows the implementation of abstraction-specific optimization passes, similar to the structure of common DSL compilers (such as Devito, Psyclone, and Firedrake). To simplify the writing of these passes, xDSL uses a uniform data structure based on SSA, basic blocks, and regions, which additionally enables the writing of generic passes.
The design of xDSL is influenced by MLIR, a compiler framework developed in C++, that is part of the LLVM project. An inherent advantage of a close design is the easy interaction between the two frameworks, making it possible to translate abstractions and programs back and forth. This results in one big SSA-based abstraction ecosystem that can be worked with through Python, making analysis through simple scripting languages possible. Additionally, xDSL can leverage MLIR's code generation and low-level optimization capabilities.
To use xDSL as part of a larger project for developing your own compiler, just install xDSL via pip:
pip install xdsl
Note: This version of xDSL is validated against a specific MLIR version,
interoperability with other versions may result in problems. The supported
MLIR version is commit
To get familiar with xDSL, we recommend starting with our Jupyter notebooks. The notebooks consist of examples and documentation concerning the core xDSL data structures and the xDSL's Python-embedded abstraction definition language, as well as examples of implementing custom compilers, like a database compiler. There also exists a small documentation showing how to connect xDSL with MLIR for users interested in that use case.
We provide a Makefile containing a lot of common tasks, which might provide an overview of common actions.
xDSL Developer Setup
To contribute to the development of xDSL follow the subsequent steps.
git clone https://github.com/xdslproject/xdsl.git cd xdsl # set up the venv and install everything make venv # activate the venv source venv/bin/activate
The xDSL project uses pytest unit tests and LLVM-style filecheck tests. They can be executed from the root directory:
# Executes pytests which are located in tests/ pytest # Executes filecheck tests lit tests/filecheck # run all tests using makefile make tests
Formatting and Typechecking
All python code used in xDSL uses black to format the code in a uniform manner.
To automate the formatting, we use pre-commit hooks from the pre-commit package.
# Install the pre-commit on your `.git` folder make precommit-install # to run the hooks: make precommit # alternatively, running black on all staged files: make black # or simply black $(git diff --staged --name-only)
Furthermore, all python code must run through pyright
without errors. Pyright can be run on all staged files through the
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.