[mlir] Introduce IRDL dialect
This patch introduces the IRDL dialect, which allow users to represent dynamic dialect definitions as an MLIR program. The IRDL dialect defines operations, attributes, and types, using attribute constraints. For example: ``` module { irdl.dialect @cmath { irdl.type @complex { %0 = irdl.is f32 %1 = irdl.is f64 %2 = irdl.any_of(%0, %1) irdl.parameters(%2) } irdl.operation @norm { %0 = irdl.any %1 = irdl.parametric @complex<%0> irdl.operands(%1) irdl.results(%0) } } ``` This program will define a new `cmath.complex` type, which expects a single parameter, which is either an `f32` or an `f64`. It also defines an `cmath.norm` operation, which expects a single `cmath.complex` type as operand, and returns a value of the underlying type. Note that like PDL (which IRDL is heavily inspired from), both uses of `%0` are expected to be of the same attribute. IRDL handles attributes and types with the same operations, and does this by always wrapping types in a `TypeAttr`. This is to simplify the language. Depends on D144690 Reviewed By: rriddle, mehdi_amini Differential Revision: https://reviews.llvm.org/D144692
Loading
Please sign in to comment