Multi-Level IR Compiler Framework

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.

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 doc.


MLIR now support a bytecode serialization 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 and recording of the open meeting presentation for details.

Action: Tracing and Debugging MLIR-based Compilers 

Action 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 and recording of the open meeting presentation for details.

Transform Dialect 

See this EuroLLVM talk and the online tutorial.


  • There is now support for “ distinct attributes”.
  • “Resources” (a way to store data outside the MLIR context) and “configuration” can now be serialized alongside the IR.