Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/j2kun/mlir-tutorial
MLIR For Beginners tutorial
https://github.com/j2kun/mlir-tutorial
compilers mlir tutorial
Last synced: 6 days ago
JSON representation
MLIR For Beginners tutorial
- Host: GitHub
- URL: https://github.com/j2kun/mlir-tutorial
- Owner: j2kun
- Created: 2023-02-24T22:18:51.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-30T05:41:43.000Z (4 months ago)
- Last Synced: 2025-01-19T19:01:52.353Z (13 days ago)
- Topics: compilers, mlir, tutorial
- Language: C++
- Homepage:
- Size: 144 KB
- Stars: 877
- Watchers: 18
- Forks: 76
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-mojo-max-mlir - j2kun/mlir-tutorial - tutorial?style=social"/> : This is the code repository for a series of articles on the [MLIR framework](https://mlir.llvm.org/) for building compilers. (Summary)
- awesome-mojo-max-mlir - j2kun/mlir-tutorial - tutorial?style=social"/> : This is the code repository for a series of articles on the [MLIR framework](https://mlir.llvm.org/) for building compilers. (Summary)
- awesome-cuda-triton-hpc - j2kun/mlir-tutorial - tutorial?style=social"/> : This is the code repository for a series of articles on the [MLIR framework](https://mlir.llvm.org/) for building compilers. (Learning Resources)
README
# MLIR For Beginners
This is the code repository for a series of articles on the
[MLIR framework](https://mlir.llvm.org/) for building compilers.## Articles
1. [Build System (Getting Started)](https://jeremykun.com/2023/08/10/mlir-getting-started/)
2. [Running and Testing a Lowering](https://jeremykun.com/2023/08/10/mlir-running-and-testing-a-lowering/)
3. [Writing Our First Pass](https://jeremykun.com/2023/08/10/mlir-writing-our-first-pass/)
4. [Using Tablegen for Passes](https://jeremykun.com/2023/08/10/mlir-using-tablegen-for-passes/)
5. [Defining a New Dialect](https://jeremykun.com/2023/08/21/mlir-defining-a-new-dialect/)
6. [Using Traits](https://jeremykun.com/2023/09/07/mlir-using-traits/)
7. [Folders and Constant Propagation](https://jeremykun.com/2023/09/11/mlir-folders/)
8. [Verifiers](https://jeremykun.com/2023/09/13/mlir-verifiers/)
9. [Canonicalizers and Declarative Rewrite Patterns](https://jeremykun.com/2023/09/20/mlir-canonicalizers-and-declarative-rewrite-patterns/)
10. [Dialect Conversion](https://jeremykun.com/2023/10/23/mlir-dialect-conversion/)
11. [Lowering through LLVM](https://jeremykun.com/2023/11/01/mlir-lowering-through-llvm/)
12. [A Global Optimization and Dataflow Analysis](https://jeremykun.com/2023/11/15/mlir-a-global-optimization-and-dataflow-analysis/)
12. [Defining Patterns with PDLL](https://www.jeremykun.com/2024/08/04/mlir-pdll/)## Bazel build
Bazel is one of two supported build systems for this tutorial. The other is
CMake. If you're unfamiliar with Bazel, you can read the tutorials at
[https://bazel.build/start](https://bazel.build/start). Familiarity with Bazel
is not required to build or test, but it is required to follow the articles in
the tutorial series and explained in the first article,
[Build System (Getting Started)](https://jeremykun.com/2023/08/10/mlir-getting-started/).
The CMake build is maintained, but was added at article 10 (Dialect Conversion)
and will not be explained in the articles.### Prerequisites
Install Bazelisk via instructions at
[https://github.com/bazelbuild/bazelisk#installation](https://github.com/bazelbuild/bazelisk#installation).
This should create the `bazel` command on your system.You should also have a modern C++ compiler on your system, either `gcc` or
`clang`, which Bazel will detect.### Build and test
Run
```bash
bazel build ...:all
bazel test ...:all
```## CMake build
CMake is one of two supported build systems for this tutorial. The other is
Bazel. If you're unfamiliar with CMake, you can read the tutorials at
[https://cmake.org/getting-started/](https://cmake.org/getting-started/). The
CMake build is maintained, but was added at article 10 (Dialect Conversion) and
will not be explained in the articles.### Prerequisites
* Make sure you have installed everything needed to build LLVM
https://llvm.org/docs/GettingStarted.html#software
* For this recipe Ninja is used so be sure to have it as well installed
https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages### Checking out the code
Checkout the tutorial including the LLVM dependency (submodules):
```bash
git clone --recurse-submodules https://github.com/j2kun/mlir-tutorial.git
cd mlir-tutorial
```### Building dependencies
Note: The following steps are suitable for macOs and use ninja as building
system, they should not be hard to adapt for your environment.*Build LLVM/MLIR*
```bash
#!/bin/shBUILD_SYSTEM=Ninja
BUILD_TAG=ninja
THIRDPARTY_LLVM_DIR=$PWD/externals/llvm-project
BUILD_DIR=$THIRDPARTY_LLVM_DIR/build
INSTALL_DIR=$THIRDPARTY_LLVM_DIR/installmkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIRpushd $BUILD_DIR
cmake ../llvm -G $BUILD_SYSTEM \
-DCMAKE_CXX_COMPILER="$(xcrun --find clang++)" \
-DCMAKE_C_COMPILER="$(xcrun --find clang)" \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DLLVM_LOCAL_RPATH=$INSTALL_DIR/lib \
-DLLVM_PARALLEL_COMPILE_JOBS=7 \
-DLLVM_PARALLEL_LINK_JOBS=1 \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_INSTALL_UTILS=ON \
-DCMAKE_OSX_ARCHITECTURES="$(uname -m)" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_CCACHE_BUILD=ON \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DLLVM_ENABLE_PROJECTS='mlir' \
-DDEFAULT_SYSROOT="$(xcrun --show-sdk-path)" \
-DCMAKE_OSX_SYSROOT="$(xcrun --show-sdk-path)"cmake --build . --target check-mlir
popd
```### Build and test
```bash
#!/bin/shBUILD_SYSTEM="Ninja"
BUILD_DIR=./build-`echo ${BUILD_SYSTEM}| tr '[:upper:]' '[:lower:]'`rm -rf $BUILD_DIR
mkdir $BUILD_DIR
pushd $BUILD_DIRLLVM_BUILD_DIR=externals/llvm-project/build
cmake -G $BUILD_SYSTEM .. \
-DLLVM_DIR="$LLVM_BUILD_DIR/lib/cmake/llvm" \
-DMLIR_DIR="$LLVM_BUILD_DIR/lib/cmake/mlir" \
-DBUILD_DEPS="ON" \
-DBUILD_SHARED_LIBS="OFF" \
-DCMAKE_BUILD_TYPE=Debugpopd
cmake --build $BUILD_DIR --target MLIRAffineFullUnrollPasses
cmake --build $BUILD_DIR --target MLIRMulToAddPasses
cmake --build $BUILD_DIR --target MLIRNoisyPasses
cmake --build $BUILD_DIR --target mlir-headers
cmake --build $BUILD_DIR --target mlir-doc
cmake --build $BUILD_DIR --target tutorial-opt
cmake --build $BUILD_DIR --target check-mlir-tutorial
```