|  | # MLIR Release Notes | 
|  |  | 
|  | This document tries to provide some context about MLIR important changes in the | 
|  | context of LLVM releases. It is updated on a best effort basis. | 
|  |  | 
|  | At the moment the MLIR community does not qualify the LLVM release branch | 
|  | specifically, it is a snapshot of the MLIR development at the time of the release. | 
|  |  | 
|  | [TOC] | 
|  |  | 
|  | ## LLVM 20 | 
|  |  | 
|  | All the MLIR runners other than `mlir-cpu-runner` have been removed, as their functionality has been merged into it, and it has been renamed to `mlir-runner`. | 
|  |  | 
|  | ## LLVM 18 | 
|  |  | 
|  | ### Properties: beyond attributes | 
|  |  | 
|  | See LLVM 17 notes below. The Dialect option `let usePropertiesForAttributes = 1;` is | 
|  | now the default. You can set it to 0 to revert to the previous behavior. This will be | 
|  | removed in LLVM 19. | 
|  |  | 
|  | ## LLVM 17 | 
|  |  | 
|  | See also the [deprecations and refactoring](https://mlir.llvm.org/deprecation/) doc. | 
|  |  | 
|  | ### Bytecode | 
|  |  | 
|  | MLIR now support a [bytecode serialization](https://mlir.llvm.org/docs/BytecodeFormat/) | 
|  | with versionning compatibility allowing 2 ways compatibility scheme, and lazy-loading | 
|  | capabilities. | 
|  |  | 
|  | ### Properties: beyond attributes | 
|  |  | 
|  | This is a new mechanism to implement storage for operations without having to | 
|  | use attributes. You can opt-in to use Properties for ODS inherent attributes | 
|  | using `let usePropertiesForAttributes = 1;` in your dialect definition (the flag | 
|  | will be default in the next release). See | 
|  | [slides](https://mlir.llvm.org/OpenMeetings/2023-02-09-Properties.pdf) and | 
|  | [recording](https://youtu.be/7ofnlCFzlqg) of the open meeting presentation for | 
|  | details. | 
|  |  | 
|  | ### Action: Tracing and Debugging MLIR-based Compilers | 
|  |  | 
|  | [Action](https://mlir.llvm.org/docs/ActionTracing/) is a new mechanism to | 
|  | encapsulate any transformation of any granularity in a way that can be | 
|  | intercepted by the framework for debugging or tracing purposes, including | 
|  | skipping a transformation programmatically (think about “compiler fuel” or | 
|  | “debug counters” in LLVM). As such, “executing a pass” is an Action, so is “try | 
|  | to apply one canonicalization pattern”, or “tile this loop”. | 
|  |  | 
|  | [slides](https://mlir.llvm.org/OpenMeetings/2023-02-23-Actions.pdf) and | 
|  | [recording](https://youtu.be/ayQSyekVa3c) of the open meeting presentation for | 
|  | details. | 
|  |  | 
|  | ### Transform Dialect | 
|  |  | 
|  | See this [EuroLLVM talk](https://www.youtube.com/watch?v=P4gUj3QtH_Y&t=1s) and | 
|  | [the online tutorial](https://mlir.llvm.org/docs/Tutorials/transform/). | 
|  |  | 
|  | ### Others | 
|  |  | 
|  | - There is now support for | 
|  | "[distinct attributes](https://mlir.llvm.org/docs/Dialects/Builtin/#distinctattribute)". | 
|  | - "Resources" (a way to store data outside the MLIR context) and "configuration" | 
|  | can now be serialized alongside the IR. |