tiny.choir.OperationBuilder
Defined in tiny.choir.
API (30)
Actions
Public operations.
InsertPoint.isSetInsertionGuard.deinitInsertionGuard.initListener.notifyBlockInsertedListener.notifyOperationInsertedclearInsertionPointcreatecreateBlockcreateBlockWithLocgetInsertionBeforegetInsertionBlockgetListenerhasInsertionPointinitinsertinsertionGuardrestoreInsertionPointsaveInsertionPointsetInsertionPointsetInsertionPointAftersetInsertionPointBeforesetInsertionPointToEndsetListener
Types and contracts
Public types and contracts.
Fields and members
Public fields and members.
Source
Source: lib/choir/src/core/builder.zig:10
zig
pub const OperationBuilder = struct { ir_ctx: *Context, insertion_block: ?*Block, insertion_before: ?*Operation, listener: ?Listener, pub const Listener = struct { context: ?*anyopaque = null, notify_operation_inserted: ?*const fn (?*anyopaque, *Operation, InsertPoint) anyerror!void = null, notify_block_inserted: ?*const fn (?*anyopaque, *Block) anyerror!void = null, pub fn notifyOperationInserted(self: Listener, op: *Operation, previous: InsertPoint) !void { if (self.notify_operation_inserted) |notify| { try notify(self.context, op, previous); } } pub fn notifyBlockInserted(self: Listener, block: *Block) !void { if (self.notify_block_inserted) |notify| { try notify(self.context, block); } } }; pub const InsertPoint = struct { block: ?*Block = null, before: ?*Operation = null, pub fn isSet(self: InsertPoint) bool { return self.block != null; } }; pub const InsertionGuard = struct { builder: ?*OperationBuilder, insert_point: InsertPoint, pub fn init(builder: *OperationBuilder) InsertionGuard { return .{ .builder = builder, .insert_point = builder.saveInsertionPoint(), }; } pub fn deinit(self: *InsertionGuard) void { const builder = self.builder orelse return; builder.restoreInsertionPoint(self.insert_point); self.builder = null; } }; pub fn init(ir_ctx: *Context) OperationBuilder { return .{ .ir_ctx = ir_ctx, .insertion_block = null, .insertion_before = null, .listener = null, }; } pub fn setListener(self: *OperationBuilder, listener: ?Listener) void { self.listener = listener; } pub fn getListener(self: *const OperationBuilder) ?Listener { return self.listener; } pub fn clearInsertionPoint(self: *OperationBuilder) void { self.insertion_block = null; self.insertion_before = null; } pub fn hasInsertionPoint(self: *const OperationBuilder) bool { return self.insertion_block != null; } pub fn saveInsertionPoint(self: *const OperationBuilder) InsertPoint { return .{ .block = self.insertion_block, .before = self.insertion_before, }; } pub fn restoreInsertionPoint(self: *OperationBuilder, insert_point: InsertPoint) void { if (insert_point.isSet()) { self.insertion_block = insert_point.block; self.insertion_before = insert_point.before; return; } self.clearInsertionPoint(); } pub fn insertionGuard(self: *OperationBuilder) InsertionGuard { return InsertionGuard.init(self); } pub fn setInsertionPoint(self: *OperationBuilder, block: *Block) void { self.setInsertionPointToEnd(block); } pub fn setInsertionPointToEnd(self: *OperationBuilder, block: *Block) void { self.insertion_block = block; self.insertion_before = null; } pub fn setInsertionPointBefore(self: *OperationBuilder, op: *Operation) void { self.insertion_block = op.getBlock(); self.insertion_before = op; } pub fn setInsertionPointAfter(self: *OperationBuilder, op: *Operation) void { if (op.next_op) |next| { self.setInsertionPointBefore(next); return; } if (op.getBlock()) |block| { self.setInsertionPointToEnd(block); return; } self.clearInsertionPoint(); } pub fn getInsertionBlock(self: *const OperationBuilder) ?*Block { return self.insertion_block; } pub fn getInsertionBefore(self: *const OperationBuilder) ?*Operation { return self.insertion_before; } pub fn createBlock(self: *OperationBuilder, region: *Region, arg_types: []const Type, locs: []const Location) !*Block { if (arg_types.len != locs.len) return error.BlockArgumentLocationMismatch; const previous = self.saveInsertionPoint(); errdefer self.restoreInsertionPoint(previous); const block = try region.addBlock(); errdefer std.debug.assert(region.eraseBlock(block)); for (arg_types, locs) |arg_type, loc| { _ = try block.addArgument(arg_type, loc); } self.setInsertionPointToEnd(block); if (self.listener) |listener| { try listener.notifyBlockInserted(block); } return block; } pub fn createBlockWithLoc(self: *OperationBuilder, region: *Region, arg_types: []const Type, loc: Location) !*Block { const previous = self.saveInsertionPoint(); errdefer self.restoreInsertionPoint(previous); const block = try region.addBlock(); errdefer std.debug.assert(region.eraseBlock(block)); for (arg_types) |arg_type| { _ = try block.addArgument(arg_type, loc); } self.setInsertionPointToEnd(block); if (self.listener) |listener| { try listener.notifyBlockInserted(block); } return block; } pub fn insert(self: *OperationBuilder, op: *Operation) !*Operation { var inserted = false; if (self.insertion_block) |block| { if (self.insertion_before) |before| { if (before.getBlock() == block) { try block.insertBefore(op, before); } else { try block.addOperation(op); } } else { try block.addOperation(op); } inserted = true; } if (inserted) { if (self.listener) |listener| { listener.notifyOperationInserted(op, .{}) catch |err| { if (op.getBlock()) |block| block.detachOperation(op); return err; }; } } return op; } pub fn create(self: *OperationBuilder, state: Operation.State) !*Operation { const op = try self.ir_ctx.createOperation(state); errdefer if (op.getBlock() == null) op.erase(); return try self.insert(op); }};Source: lib/choir/src/root.zig:41
zig
pub const OperationBuilder = ir.OperationBuilder;Also reachable as
backends.wasm.emission.module_encoding.common.ir.OperationBuilder, ir.OperationBuilder.
Complete caller list for OperationBuilder.create
25 direct callers.
lib.choir.src.core.builder.test_OperationBuilder_createBlock_adds_arguments_and_sets_insertion_point[function] — test source atlib/choir/src/core/builder.zig:386in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_insertion_guard_restores_saved_point[function] — test source atlib/choir/src/core/builder.zig:255in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_listener_failure_rolls_insertion_back_transactionally[function] — test source atlib/choir/src/core/builder.zig:329in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_listener_records_inserted_operations_and_blocks[function] — test source atlib/choir/src/core/builder.zig:291in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_save_restore_and_after_insertion_point[function] — test source atlib/choir/src/core/builder.zig:456in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.dialects.spec.operationTemplate.binaryFixedResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:1975in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.binarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:1908in nearest public ownerlib.choir.src.core.dialects.spectiny.choir.ir.dialects.operationTemplate.explicit[function] atlib/choir/src/core/dialects/spec.zig:1758tiny.choir.ir.dialects.operationTemplate.explicitLeaf[function] atlib/choir/src/core/dialects/spec.zig:1682tiny.choir.ir.dialects.operationTemplate.explicitTerminator[function] atlib/choir/src/core/dialects/spec.zig:1847lib.choir.src.core.dialects.spec.operationTemplate.selectSameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2302in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.ternarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2227in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryExplicitTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2142in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryFixedResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2070in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryNoResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2201in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2011in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unarySameTypeStringAttrImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2102in nearest public ownerlib.choir.src.core.dialects.spectiny.choir.ir.ops.BinaryNoResultOp[function] atlib/choir/src/core/ops.zig:117tiny.choir.ir.ops.BinaryOpSameType[function] atlib/choir/src/core/ops.zig:141tiny.choir.ir.ops.BinaryOpWithResultType[function] atlib/choir/src/core/ops.zig:170tiny.choir.ir.ops.NoOperandOp[function] atlib/choir/src/core/ops.zig:8tiny.choir.ir.ops.UnaryNoResultOp[function] atlib/choir/src/core/ops.zig:26tiny.choir.ir.ops.UnaryOpSameType[function] atlib/choir/src/core/ops.zig:64tiny.choir.ir.ops.UnaryOpWithResultType[function] atlib/choir/src/core/ops.zig:88tiny.choir.ir.ops.VariadicNoResultOp[function] atlib/choir/src/core/ops.zig:45
Complete caller list for OperationBuilder.init
28 direct callers.
lib.choir.src.core.builder.test_OperationBuilder_block_listener_failure_restores_its_insertion_point[function] — test source atlib/choir/src/core/builder.zig:362in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_createBlockWithLoc_adds_uniform-location_arguments[function] — test source atlib/choir/src/core/builder.zig:434in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_createBlock_adds_arguments_and_sets_insertion_point[function] — test source atlib/choir/src/core/builder.zig:386in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_createBlock_rejects_mismatched_argument_locations[function] — test source atlib/choir/src/core/builder.zig:413in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_insertion_guard_restores_saved_point[function] — test source atlib/choir/src/core/builder.zig:255in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_listener_failure_rolls_insertion_back_transactionally[function] — test source atlib/choir/src/core/builder.zig:329in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_listener_records_inserted_operations_and_blocks[function] — test source atlib/choir/src/core/builder.zig:291in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_save_restore_and_after_insertion_point[function] — test source atlib/choir/src/core/builder.zig:456in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.dialects.spec.operationTemplate.binaryFixedResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:1975in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.binarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:1908in nearest public ownerlib.choir.src.core.dialects.spectiny.choir.ir.dialects.operationTemplate.explicit[function] atlib/choir/src/core/dialects/spec.zig:1758tiny.choir.ir.dialects.operationTemplate.explicitLeaf[function] atlib/choir/src/core/dialects/spec.zig:1682tiny.choir.ir.dialects.operationTemplate.explicitTerminator[function] atlib/choir/src/core/dialects/spec.zig:1847lib.choir.src.core.dialects.spec.operationTemplate.selectSameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2302in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.ternarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2227in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryExplicitTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2142in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryFixedResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2070in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unaryNoResultImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2201in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unarySameTypeImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2011in nearest public ownerlib.choir.src.core.dialects.speclib.choir.src.core.dialects.spec.operationTemplate.unarySameTypeStringAttrImpl[function] — private source atlib/choir/src/core/dialects/spec.zig:2102in nearest public ownerlib.choir.src.core.dialects.spectiny.choir.ir.ops.BinaryNoResultOp[function] atlib/choir/src/core/ops.zig:117tiny.choir.ir.ops.BinaryOpSameType[function] atlib/choir/src/core/ops.zig:141tiny.choir.ir.ops.BinaryOpWithResultType[function] atlib/choir/src/core/ops.zig:170tiny.choir.ir.ops.NoOperandOp[function] atlib/choir/src/core/ops.zig:8tiny.choir.ir.ops.UnaryNoResultOp[function] atlib/choir/src/core/ops.zig:26tiny.choir.ir.ops.UnaryOpSameType[function] atlib/choir/src/core/ops.zig:64tiny.choir.ir.ops.UnaryOpWithResultType[function] atlib/choir/src/core/ops.zig:88tiny.choir.ir.ops.VariadicNoResultOp[function] atlib/choir/src/core/ops.zig:45
Complete caller list for OperationBuilder.setInsertionPointToEnd
8 direct callers.
tiny.choir.OperationBuilder.createBlock[method] atlib/choir/src/core/builder.zig:141tiny.choir.OperationBuilder.createBlockWithLoc[method] atlib/choir/src/core/builder.zig:160tiny.choir.OperationBuilder.setInsertionPoint[method] atlib/choir/src/core/builder.zig:107tiny.choir.OperationBuilder.setInsertionPointAfter[method] atlib/choir/src/core/builder.zig:121lib.choir.src.core.builder.test_OperationBuilder_block_listener_failure_restores_its_insertion_point[function] — test source atlib/choir/src/core/builder.zig:362in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_insertion_guard_restores_saved_point[function] — test source atlib/choir/src/core/builder.zig:255in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_listener_failure_rolls_insertion_back_transactionally[function] — test source atlib/choir/src/core/builder.zig:329in nearest public ownerlib.choir.src.core.builderlib.choir.src.core.builder.test_OperationBuilder_save_restore_and_after_insertion_point[function] — test source atlib/choir/src/core/builder.zig:456in nearest public ownerlib.choir.src.core.builder
Audit
| Definitions | 27 |
|---|---|
| Public names | 81 |
| Members | 11 |
| Version | 26.7.0 |
| Revision | daab053ee433 |