Beaver. MLIR. Dialect. IRDL
(beaver v0.4.8)
Copy Markdown
Summary
Functions
Return op name irdl.all_of as a bitstring.
irdl.all_of - Constraints to the intersection of the provided constraints
Return op name irdl.any as a bitstring.
irdl.any - Accept any type or attribute
Return op name irdl.any_of as a bitstring.
irdl.any_of - Constraints to the union of the provided constraints
Return op name irdl.attribute as a bitstring.
irdl.attribute - Define a new attribute
Return op name irdl.attributes as a bitstring.
irdl.attributes - Define the attributes of an operation
Return op name irdl.base as a bitstring.
irdl.base - Constraints an attribute/type base
Return op name irdl.c_pred as a bitstring.
irdl.c_pred - Constraints an attribute using a C++ predicate
Return op name irdl.dialect as a bitstring.
irdl.dialect - Define a new dialect
Return op name irdl.is as a bitstring.
irdl.is - Constraints an attribute/type to be a specific attribute instance
Return op name irdl.operands as a bitstring.
irdl.operands - Define the operands of an operation
Return op name irdl.operation as a bitstring.
irdl.operation - Define a new operation
Return op name irdl.parameters as a bitstring.
irdl.parameters - Define the constraints on parameters of a type/attribute definition
Return op name irdl.parametric as a bitstring.
irdl.parametric - Constraints an attribute/type base and its parameters
Return op name irdl.region as a bitstring.
irdl.region - Define a region of an operation
Return op name irdl.regions as a bitstring.
irdl.regions - Define the regions of an operation
Return op name irdl.results as a bitstring.
irdl.results - Define the results of an operation
Return op name irdl.type as a bitstring.
irdl.type - Define a new type
Functions
Return op name irdl.all_of as a bitstring.
irdl.all_of - Constraints to the intersection of the provided constraints
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.all_of defines a constraint that accepts any type or attribute that
satisfies all of its provided constraints.
Example:
irdl.dialect @cmath {
irdl.type @complex_f32 {
%0 = irdl.is i32
%1 = irdl.is f32
%2 = irdl.any_of(%0, %1) // is 32-bit
%3 = irdl.is f32
%4 = irdl.is f64
%5 = irdl.any_of(%3, %4) // is a float
%6 = irdl.all_of(%2, %5) // is a 32-bit float
irdl.parameters(%6)
}
}The above program defines a type complex inside the dialect cmath that
has one parameter that must be 32-bit long and a float (in other
words, that must be f32).
Return op name irdl.any as a bitstring.
irdl.any - Accept any type or attribute
This op has support for result type inference.
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.any defines a constraint that accepts any type or attribute.
Example:
irdl.dialect @cmath {
irdl.type @complex_flexible {
%0 = irdl.any
irdl.parameters(%0)
}
}The above program defines a type complex_flexible inside the dialect
cmath that has a single parameter that can be any attribute.
Return op name irdl.any_of as a bitstring.
irdl.any_of - Constraints to the union of the provided constraints
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.any_of defines a constraint that accepts any type or attribute that
satisfies at least one of its provided type constraints.
Example:
irdl.dialect @cmath {
irdl.type @complex {
%0 = irdl.is i32
%1 = irdl.is i64
%2 = irdl.is f32
%3 = irdl.is f64
%4 = irdl.any_of(%0, %1, %2, %3)
irdl.parameters(%4)
}
}The above program defines a type complex inside the dialect cmath that
has a single type parameter that can be either i32, i64, f32 or
f64.
Return op name irdl.attribute as a bitstring.
irdl.attribute - Define a new attribute
Attributes
sym_name- Single,SymbolNameAttr, string attribute
Description
irdl.attribute defines a new attribute belonging to the irdl.dialect
parent.
The attribute parameters can be defined with an irdl.parameters operation
in the optional region.
Example:
irdl.dialect @testd {
irdl.attribute @enum_attr {
%0 = irdl.is "foo"
%1 = irdl.is "bar"
%2 = irdl.any_of(%0, %1)
irdl.parameters(%2)
}
}The above program defines an enum_attr attribute inside the testd
dialect. The attribute has one StringAttr parameter that should be
either a "foo" or a "bar".
Return op name irdl.attributes as a bitstring.
irdl.attributes - Define the attributes of an operation
Attributes
attributeValueNames- Single,StrArrayAttr, string array attribute
Operands
attributeValues- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Description
irdl.attributes defines the attributes of the irdl.operation parent
operation definition.
In the following example, irdl.attributes defines the attributes of the
attr_op operation:
irdl.dialect @example {
irdl.operation @attr_op {
%0 = irdl.any
%1 = irdl.is i64
irdl.attibutes {
"attr1" = %0,
"attr2" = %1
}
}
}The operation will expect an arbitrary attribute "attr1" and an
attribute "attr2" with value i64.
Return op name irdl.base as a bitstring.
irdl.base - Constraints an attribute/type base
This op has support for result type inference.
Attributes
base_ref- Optional,SymbolRefAttr, symbol reference attributebase_name- Optional,StrAttr, string attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.base defines a constraint that only accepts a single type
or attribute base, e.g. an IntegerType. The attribute base is defined
either by a symbolic reference to the corresponding IRDL definition,
or by the name of the base. Named bases are prefixed with ! or #
respectively for types and attributes.
Example:
irdl.dialect @cmath {
irdl.type @complex {
%0 = irdl.base "!builtin.integer"
irdl.parameters(%0)
}
irdl.type @complex_wrapper {
%0 = irdl.base @cmath::@complex
irdl.parameters(%0)
}
}The above program defines a cmath.complex type that expects a single
parameter, which is a type with base name builtin.integer, which is the
name of an IntegerType type.
It also defines a cmath.complex_wrapper type that expects a single
parameter, which is a type of base type cmath.complex.
Return op name irdl.c_pred as a bitstring.
irdl.c_pred - Constraints an attribute using a C++ predicate
This op has support for result type inference.
Attributes
pred- Single,StrAttr, string attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.c_pred defines a constraint that is written in C++.
Dialects using this operation cannot be registered at runtime, as it relies on C++ code.
Special placeholders can be used to refer to entities in the context where this predicate is used. They serve as "hooks" to the enclosing environment. The following special placeholders are supported in constraints for an op:
$_builderwill be replaced by a mlir::Builder instance.$_opwill be replaced by the current operation.$_selfwill be replaced with the entity this predicate is attached to. Compared to ODS,$_selfis always of typemlir::Attribute, and types are manipulated asTypeAttrattributes.
Example:
irdl.type @op_with_attr {
%0 = irdl.c_pred "::llvm::isa<::mlir::IntegerAttr>($_self)"
irdl.parameters(%0)
}In this example, @op_with_attr is defined as a type with a single
parameter, which is an IntegerAttr, as constrained by the C++ predicate.
Return op name irdl.dialect as a bitstring.
irdl.dialect - Define a new dialect
Attributes
sym_name- Single,SymbolNameAttr, string attribute
Description
The irdl.dialect operation defines a dialect. All operations, attributes,
and types defined inside its region will be part of the dialect.
Example:
irdl.dialect @cmath {
...
}The above program defines a cmath dialect.
Return op name irdl.is as a bitstring.
irdl.is - Constraints an attribute/type to be a specific attribute instance
This op has support for result type inference.
Attributes
expected- Single,AnyAttr, any attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.is defines a constraint that only accepts a specific instance of a
type or attribute.
Example:
irdl.dialect @cmath {
irdl.type @complex_i32 {
%0 = irdl.is i32
irdl.parameters(%0)
}
}The above program defines a complex_i32 type inside the dialect cmath
that can only have a i32 as its parameter.
Return op name irdl.operands as a bitstring.
irdl.operands - Define the operands of an operation
Attributes
names- Single,StrArrayAttr, string array attributevariadicity- Single,VariadicityArrayAttr,
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Description
irdl.operands define the operands of the irdl.operation parent operation
definition. Each operand is named after an identifier.
In the following example, irdl.operands defines the operands of the
mul operation:
irdl.dialect @cmath {
irdl.type @complex { /* ... */ }
irdl.operation @mul {
%0 = irdl.any
%1 = irdl.parametric @cmath::@complex<%0>
irdl.results(res: %1)
irdl.operands(lhs: %1, rhs: %1)
}
}The mul operation will expect two operands of type cmath.complex, that
have the same type, and return a result of the same type.
The operands can also be marked as variadic or optional:
irdl.operands(foo: %0, bar: single %1, baz: optional %2, qux: variadic %3)Here, foo and bar are required single operands, baz is an optional operand, and qux is a variadic operand.
When more than one operand is marked as optional or variadic, the operation will expect a 'operandSegmentSizes' attribute that defines the number of operands in each segment.
Return op name irdl.operation as a bitstring.
irdl.operation - Define a new operation
Attributes
sym_name- Single,SymbolNameAttr, string attribute
Description
irdl.operation defines a new operation belonging to the irdl.dialect
parent.
Operations can define constraints on their operands and results with the
irdl.results and irdl.operands operations. If these operations are not
present in the region, the results or operands are expected to be empty.
Example:
irdl.dialect @cmath {
irdl.type @complex { /* ... */ }
irdl.operation @norm {
%0 = irdl.any
%1 = irdl.parametric @cmath::@complex<%0>
irdl.results(%0)
irdl.operands(%1)
}
}The above program defines an operation norm inside the dialect cmath.
The operation expects a single operand of base type cmath.complex, and
returns a single result of the element type of the operand.
Return op name irdl.parameters as a bitstring.
irdl.parameters - Define the constraints on parameters of a type/attribute definition
Attributes
names- Single,StrArrayAttr, string array attribute
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Description
irdl.parameters defines the constraints on parameters of a type or
attribute definition. Each parameter is named after an identifier.
Example:
irdl.dialect @cmath {
irdl.type @complex {
%0 = irdl.is i32
%1 = irdl.is i64
%2 = irdl.any_of(%0, %1)
irdl.parameters(elem: %2)
}
}The above program defines a type complex inside the dialect cmath. The
type has a single parameter elem that should be either i32 or i64.
Return op name irdl.parametric as a bitstring.
irdl.parametric - Constraints an attribute/type base and its parameters
This op has support for result type inference.
Attributes
base_type- Single,SymbolRefAttr, symbol reference attribute
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Results
output- Single,IRDL_AttributeType, IRDL handle to anmlir::Attribute
Description
irdl.parametric defines a constraint that accepts only a single type
or attribute base. The attribute base is defined by a symbolic reference
to the corresponding definition. It will additionally constraint the
parameters of the type/attribute.
Example:
irdl.dialect @cmath {
irdl.type @complex { /* ... */ }
irdl.operation @norm {
%0 = irdl.any
%1 = irdl.parametric @cmath::@complex<%0>
irdl.operands(%1)
irdl.results(%0)
}
}The above program defines an operation norm inside the dialect cmath that
for any T takes a cmath.complex with parameter T and returns a T.
Return op name irdl.region as a bitstring.
irdl.region - Define a region of an operation
This op has support for result type inference.
Attributes
numberOfBlocks- Optional,I32Attr, 32-bit signless integer attributeconstrainedArguments- Optional,UnitAttr, unit attribute
Operands
entryBlockArgs- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Results
output- Single,IRDL_RegionType, IRDL handle to a region definition
Description
The irdl.region construct defines a set of characteristics that a region of an operation should satify. Each region is named after an identifier.
These characteristics include constraints for the entry block arguments of the region and the total number of blocks it contains. The number of blocks must be a non-zero and non-negative integer, and it is optional by default. The set of constraints for the entry block arguments may be optional or empty. If no parentheses are provided, the set is assumed to be optional, and the arguments are not constrained in any way. If parentheses are provided with no arguments, it means that the region must have no entry block arguments
Example:
irdl.dialect @example {
irdl.operation @op_with_regions {
%r0 = irdl.region
%r1 = irdl.region()
%v0 = irdl.is i32
%v1 = irdl.is i64
%r2 = irdl.region(%v0, %v1)
%r3 = irdl.region with size 3
irdl.regions(foo: %r0, bar: %r1, baz: %r2, qux: %r3)
}
}The above snippet demonstrates an operation named @op_with_regions,
which is constrained to have four regions.
- Region
foodoesn't have any constraints on the arguments or the number of blocks. - Region
barshould have an empty set of arguments. - Region
bazshould have two arguments of typesi32andi64. - Region
quxshould contain exactly three blocks.
Return op name irdl.regions as a bitstring.
irdl.regions - Define the regions of an operation
Attributes
names- Single,StrArrayAttr, string array attribute
Operands
args- Variadic,IRDL_RegionType, variadic of IRDL handle to a region definition
Description
irdl.regions defines the regions of an operation by accepting
values produced by irdl.region operation as arguments. Each
region has an identifier as name.
Example:
irdl.dialect @example {
irdl.operation @op_with_regions {
%r1 = irdl.region with size 3
%0 = irdl.any
%r2 = irdl.region(%0)
irdl.regions(foo: %r1, bar: %r2)
}
}In the snippet above the operation is constrained to have two regions.
The first region (foo) should contain three blocks.
The second region (bar) should have one region with one argument.
Return op name irdl.results as a bitstring.
irdl.results - Define the results of an operation
Attributes
names- Single,StrArrayAttr, string array attributevariadicity- Single,VariadicityArrayAttr,
Operands
args- Variadic,IRDL_AttributeType, variadic of IRDL handle to anmlir::Attribute
Description
irdl.results define the results of the irdl.operation parent operation
definition. Each result is named after an identifier.
In the following example, irdl.results defines the results of the
get_values operation:
irdl.dialect @cmath {
irdl.type @complex { /* ... */ }
/// Returns the real and imaginary parts of a complex number.
irdl.operation @get_values {
%0 = irdl.any
%1 = irdl.parametric @cmath::@complex<%0>
irdl.results(re: %0, im: %0)
irdl.operands(complex: %1)
}
}The operation will expect one operand of the cmath.complex type, and two
results that have the underlying type of the cmath.complex.
The results can also be marked as variadic or optional:
irdl.results(foo: %0, bar: single %1, baz: optional %2, qux: variadic %3)Here, foo and bar are required single results, baz is an optional result, and qux is a variadic result.
When more than one result is marked as optional or variadic, the operation will expect a 'resultSegmentSizes' attribute that defines the number of results in each segment.
Return op name irdl.type as a bitstring.
irdl.type - Define a new type
Attributes
sym_name- Single,SymbolNameAttr, string attribute
Description
irdl.type defines a new type belonging to the irdl.dialect parent.
The type parameters can be defined with an irdl.parameters operation in
the optional region.
Example:
irdl.dialect @cmath {
irdl.type @complex {
%0 = irdl.is i32
%1 = irdl.is i64
%2 = irdl.any_of(%0, %1)
irdl.parameters(%2)
}
}The above program defines a type complex inside the dialect cmath. The
type has a single parameter that should be either i32 or i64.