tiny.choir.OperationEquivalence
Defined in ir.equivalence.
API (6)
Actions
Public operations.
Types and contracts
Public types and contracts.
Source
Source: lib/choir/src/core/equivalence.zig:12
zig
pub const OperationEquivalence = struct { pub const ValueMapper = *const fn (?*const anyopaque, *Value) *Value; pub const AttributeFilter = *const fn (?*const anyopaque, *Operation, NamedAttribute) bool; pub const Options = struct { value_mapper: ?ValueMapper = null, value_mapper_context: ?*const anyopaque = null, attribute_filter: ?AttributeFilter = null, attribute_filter_context: ?*const anyopaque = null, commute_operands: bool = false, include_locations: bool = false, }; pub fn computeHash( op: *Operation, options: Options, ) u64 { var hasher = std.hash.Wyhash.init(0); updateBytes(&hasher, op.name.name); updateU64(&hasher, op.regions.items.len); updateU64(&hasher, op.successors.items.len); updateU64(&hasher, op.result_types.len); for (op.result_types) |typ| { updateU64(&hasher, typ.uniqueId()); } if (options.include_locations) { updateLocation(&hasher, op.location); } const operands = op.operand_values; updateU64(&hasher, operands.len); if (options.commute_operands and operands.len > 1) { var operand_hash: u64 = 0; for (operands) |operand| { operand_hash +%= valueHash(options, operand); } updateU64(&hasher, operand_hash); } else { for (operands) |operand| { updateU64(&hasher, valueHash(options, operand)); } } var hash_iter = op.getAttrs(); while (hash_iter.next()) |attr| { if (!attributeIncluded(options, op, attr)) continue; updateBytes(&hasher, attr.name); updateAttribute(&hasher, attr.value); } return hasher.final(); } pub fn isEquivalentTo( lhs: *Operation, rhs: *Operation, options: Options, ) bool { if (lhs == rhs) return true; if (!sameName(lhs.name.name, rhs.name.name)) return false; if (lhs.regions.items.len != rhs.regions.items.len) return false; if (lhs.successors.items.len != rhs.successors.items.len) return false; if (lhs.operands.items.len != rhs.operands.items.len) return false; if (lhs.result_types.len != rhs.result_types.len) return false; if (options.include_locations and !lhs.location.eql(rhs.location)) return false; for (lhs.result_types, rhs.result_types) |lhs_type, rhs_type| { if (!lhs_type.eql(rhs_type)) return false; } if (!operandsEquivalent(lhs.operand_values, rhs.operand_values, options)) { return false; } return attrsEquivalent(lhs, rhs, options); } pub fn exactValueMapper(_: ?*const anyopaque, value: *Value) *Value { return value; } fn valueHash(options: Options, value: *Value) u64 { return @intFromPtr(mapValue(options, value)); } fn mapValue(options: Options, value: *Value) *Value { if (options.value_mapper) |mapper| { return mapper(options.value_mapper_context, value); } return value; } fn attributeIncluded(options: Options, op: *Operation, attr: NamedAttribute) bool { if (options.attribute_filter) |filter| { return filter(options.attribute_filter_context, op, attr); } return true; }};Source: lib/choir/src/root.zig:38
zig
pub const OperationEquivalence = ir.OperationEquivalence;Also reachable as
backends.wasm.emission.module_encoding.common.ir.OperationEquivalence, backends.wasm.emission.module_encoding.common.ir.equivalence.OperationEquivalence, ir.OperationEquivalence.
Complete caller list for OperationEquivalence.computeHash
7 direct callers.
lib.choir.src.core.equivalence.test_OperationEquivalence_commutes_operands[function] — test source atlib/choir/src/core/equivalence.zig:432in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_filters_nonsemantic_attrs[function] — test source atlib/choir/src/core/equivalence.zig:381in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_hashes_inherent_attributes_without_temporary_allocation[function] — test source atlib/choir/src/core/equivalence.zig:406in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_keeps_distinct_attrs_apart[function] — test source atlib/choir/src/core/equivalence.zig:357in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_maps_values_before_comparing_operands[function] — test source atlib/choir/src/core/equivalence.zig:508in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_matches_same_operation_shape[function] — test source atlib/choir/src/core/equivalence.zig:328in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_preserves_multiplicity_for_variadic_commutative_operands[function] — test source atlib/choir/src/core/equivalence.zig:461in nearest public ownertiny.choir.ir.equivalence
Complete caller list for OperationEquivalence.isEquivalentTo
7 direct callers.
lib.choir.src.core.equivalence.test_OperationEquivalence_commutes_operands[function] — test source atlib/choir/src/core/equivalence.zig:432in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_filters_nonsemantic_attrs[function] — test source atlib/choir/src/core/equivalence.zig:381in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_hashes_inherent_attributes_without_temporary_allocation[function] — test source atlib/choir/src/core/equivalence.zig:406in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_keeps_distinct_attrs_apart[function] — test source atlib/choir/src/core/equivalence.zig:357in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_maps_values_before_comparing_operands[function] — test source atlib/choir/src/core/equivalence.zig:508in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_matches_same_operation_shape[function] — test source atlib/choir/src/core/equivalence.zig:328in nearest public ownertiny.choir.ir.equivalencelib.choir.src.core.equivalence.test_OperationEquivalence_preserves_multiplicity_for_variadic_commutative_operands[function] — test source atlib/choir/src/core/equivalence.zig:461in nearest public ownertiny.choir.ir.equivalence
Audit
| Definitions | 7 |
|---|---|
| Public names | 35 |
| Members | 6 |
| Version | 26.7.0 |
| Revision | daab053ee433 |