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, ConstantLikeInterface
An e-class representing a known constant value. For non-constant e-classes, use ClassOp.
Source code in xdsl/dialects/equivalence.py
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | |
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())
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
get_constant_value()
Source code in xdsl/dialects/equivalence.py
65 66 | |
__init__(const_arg: OpResult)
Source code in xdsl/dialects/equivalence.py
68 69 70 71 72 73 74 75 76 77 78 | |
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
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | |
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
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | |
verify_() -> None
Source code in xdsl/dialects/equivalence.py
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | |
GraphOp
Bases: IRDLOperation
Source code in xdsl/dialects/equivalence.py
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | |
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
__init__(result_types: Sequence[Attribute] | None, body: Region)
Source code in xdsl/dialects/equivalence.py
156 157 158 159 160 161 162 163 164 | |
YieldOp
Bases: IRDLOperation
Source code in xdsl/dialects/equivalence.py
167 168 169 170 171 172 173 174 175 176 177 178 179 180 | |
name = 'equivalence.yield'
class-attribute
instance-attribute
values = var_operand_def()
class-attribute
instance-attribute
traits = traits_def(HasParent(GraphOp), IsTerminator())
class-attribute
instance-attribute
assembly_format = '$values `:` type($values) attr-dict'
class-attribute
instance-attribute
__init__(*values: SSAValue)
Source code in xdsl/dialects/equivalence.py
176 177 178 179 180 | |