Equivalence
equivalence
¶
An embedding of equivalence classes in IR, for use in equality saturation with non-destructive rewrites.
See the overview notebook.
EQSAT_COST_LABEL = 'eqsat_cost'
module-attribute
¶
Key used to store the cost of computing the result of an operation.
AnyClassOp = ClassOp | ConstantClassOp
module-attribute
¶
A type representing either a regular e-class operation or a constant e-class operation.
Equivalence = Dialect('equivalence', [ClassOp, ConstantClassOp, YieldOp, GraphOp])
module-attribute
¶
ConstantClassOp
¶
Bases: IRDLOperation, HasFolderInterface
An e-class representing a known constant value. For non-constant e-classes, use ClassOp.
Source code in xdsl/dialects/equivalence.py
T: ClassVar = VarConstraint('T', AnyAttr())
class-attribute
instance-attribute
¶
name = 'equivalence.const_class'
class-attribute
instance-attribute
¶
assembly_format = '$arguments ` ` `(` `constant` `=` $value `)` attr-dict `:` type($result)'
class-attribute
instance-attribute
¶
traits = traits_def(Pure(), ConstantLike())
class-attribute
instance-attribute
¶
arguments = var_operand_def(T)
class-attribute
instance-attribute
¶
result = result_def(T)
class-attribute
instance-attribute
¶
value = prop_def()
class-attribute
instance-attribute
¶
min_cost_index = opt_attr_def(IntAttr)
class-attribute
instance-attribute
¶
fold() -> tuple[Attribute]
¶
__init__(const_arg: OpResult)
¶
Source code in xdsl/dialects/equivalence.py
ClassOp
¶
Bases: IRDLOperation
An e-class representing a set of equivalent values. E-classes that represent a constant value can instead be represented by ConstantClassOp.
Source code in xdsl/dialects/equivalence.py
T: ClassVar = VarConstraint('T', AnyAttr())
class-attribute
instance-attribute
¶
name = 'equivalence.class'
class-attribute
instance-attribute
¶
arguments = var_operand_def(T)
class-attribute
instance-attribute
¶
result = result_def(T)
class-attribute
instance-attribute
¶
min_cost_index = opt_attr_def(IntAttr)
class-attribute
instance-attribute
¶
traits = traits_def(Pure())
class-attribute
instance-attribute
¶
assembly_format = '$arguments attr-dict `:` type($result)'
class-attribute
instance-attribute
¶
__init__(*arguments: SSAValue, min_cost_index: IntAttr | None = None, res_type: Attribute | None = None)
¶
Source code in xdsl/dialects/equivalence.py
verify_() -> None
¶
Source code in xdsl/dialects/equivalence.py
GraphOp
¶
Bases: IRDLOperation
Source code in xdsl/dialects/equivalence.py
name = 'equivalence.graph'
class-attribute
instance-attribute
¶
outputs = var_result_def()
class-attribute
instance-attribute
¶
body = region_def()
class-attribute
instance-attribute
¶
traits = lazy_traits_def(lambda: (SingleBlockImplicitTerminator(YieldOp),))
class-attribute
instance-attribute
¶
assembly_format = '`->` type($outputs) $body attr-dict'
class-attribute
instance-attribute
¶
YieldOp
¶
Bases: IRDLOperation