tiny.choir.dialects.scf.ScfDialect
Defined in dialects.scf.
API (62)
Actions
Public operations.
ConditionOp.createConditionOp.getArgsConditionOp.getConditionForOp.createForOp.getBodyBlockForOp.getBodyRegionForOp.getInductionVarForOp.getInitArgsForOp.getIterArgsForOp.getLowerBoundForOp.getResultForOp.getStepForOp.getUpperBoundIfOp.createIfOp.createWithoutElseIfOp.getConditionIfOp.getElseBlockIfOp.getElseRegionIfOp.getNumResultsIfOp.getResultIfOp.getThenBlockIfOp.getThenRegionWhileOp.createWhileOp.getAfterBlockWhileOp.getAfterRegionWhileOp.getBeforeBlockWhileOp.getBeforeRegionYieldOp.createYieldOp.getOperands
Types and contracts
Public types and contracts.
Values and defaults
Public values and defaults.
ConditionOp.createTerminatorConditionOp.getOperandConditionOp.operation_nameConditionOp.operation_specForOp.createOperationForOp.getOperandForOp.getRegionForOp.operation_nameForOp.operation_specForOp.verifyForOp.verifyRegionsIfOp.createOperationIfOp.getOperandIfOp.getRegionIfOp.operation_nameIfOp.operation_specIfOp.verifyIfOp.verifyRegionsWhileOp.createOperationWhileOp.getRegionWhileOp.operation_nameWhileOp.operation_specYieldOp.createTerminatorYieldOp.operation_nameYieldOp.operation_specnamespec
Source
Source: lib/choir/src/dialects/scf.zig:6
zig
pub const ScfDialect = struct { pub const name = "scf"; const op_templates = ir.dialects.operationTemplate.dialect(@This()); pub const spec = ir.dialects.dialectSpec(@This(), .{ .op_interface_fallbacks = &.{ .{ .id = ir.interfaces.Evaluatable.id, .fallback = ScfEval.fallback }, }, }); pub const VerifyError = error{ ScfIfMissingCondition, ScfIfMissingThenRegion, ScfIfMissingThenBlock, ScfIfMissingElseRegion, ScfIfMultipleBlocks, ScfIfYieldMissing, ScfIfYieldNotTerminal, ScfIfYieldArityMismatch, ScfIfYieldTypeMismatch, ScfForMissingBounds, ScfForRegionArityMismatch, ScfForMissingBody, ScfForMultipleBlocks, ScfForBlockArgCountMismatch, ScfForResultArityMismatch, ScfForBoundsTypeMismatch, ScfForInductionTypeMismatch, ScfForIterArgTypeMismatch, ScfForResultTypeMismatch, ScfForYieldMissing, ScfForYieldNotTerminal, ScfForYieldArityMismatch, ScfForYieldTypeMismatch, ScfForMultipleYields, }; const yield_vtable = ir.interfaces.YieldOpInterface.VTable{ .getYieldOperandCount = getYieldOperandCount, .getYieldOperand = getYieldOperand, }; const ScfEval = struct { const arith = @import("arith/root.zig"); fn canEval(op_ptr: *const anyopaque) bool { const op: *const ir.Operation = @ptrCast(@alignCast(op_ptr)); if (std.mem.eql(u8, op.name.name, ForOp.operation_name)) { return forInductionBits(op) != null; } return std.mem.eql(u8, op.name.name, IfOp.operation_name) or std.mem.eql(u8, op.name.name, WhileOp.operation_name) or std.mem.eql(u8, op.name.name, ConditionOp.operation_name) or std.mem.eql(u8, op.name.name, YieldOp.operation_name); } /// The x64 guard and increment explicitly distinguish native 32/64-bit homes. fn forInductionBits(op: *const ir.Operation) ?u8 { if (op.operands.items.len < 3) return null; const typ = op.operands.items[0].value.type; if (!typ.eql(op.operands.items[1].value.type) or !typ.eql(op.operands.items[2].value.type)) return null; return switch (arith.scalarKindFromType(typ) orelse return null) { .index, .i64, .u64 => 64, .i32, .u32 => 32, else => null, }; } fn arrayValues(attr: ir.Attribute) ?[]const ir.Attribute { const array_attr = attr.cast(ir.Attribute.ArrayAttr) orelse return null; return array_attr.getValues(); } fn boolValue(attr: ir.Attribute) ?bool { const bool_attr = attr.cast(ir.Attribute.BoolAttr) orelse return null; return bool_attr.getValue(); } fn makeArray(ctx: *ir.Context, values: []const ir.Attribute) ir.interfaces.EvalError!ir.Attribute { return ctx.getArrayAttr(values) catch error.OutOfMemory; } fn makeResults(ctx: *ir.Context, values: []const ir.Attribute, count: usize) ir.interfaces.EvalError!ir.Attribute { if (values.len != count) return error.InvalidOperand; if (count == 1) return values[0]; return makeArray(ctx, values); } fn evaluateIf( op: *const ir.Operation, operands: []const ir.Attribute, eval_ctx: *const ir.interfaces.EvalContext, ) ir.interfaces.EvalError!ir.Attribute { if (operands.len != 1) return error.InvalidOperand; const if_op = IfOp{ .op = @constCast(op) }; const take_then = boolValue(operands[0]) orelse return error.InvalidOperand; try eval_ctx.consumeBranchFuel(eval_ctx.state); const selected = if (take_then) if_op.getThenRegion() else if_op.getElseRegion() orelse { if (op.results.items.len == 0) return makeArray(op.getContext(), &.{}); return error.InvalidOperand; }; const branch_attr = try eval_ctx.evaluateRegion(eval_ctx.state, selected); if (arrayValues(branch_attr)) |values| { return makeResults(op.getContext(), values, op.results.items.len); } return makeResults(op.getContext(), &.{branch_attr}, op.results.items.len); } /// Each signed guard, including the exit guard, consumes both fuel budgets. /// Yield replaces the carried tuple before the wrapping induction increment. fn evaluateFor( op: *const ir.Operation, operands: []const ir.Attribute, eval_ctx: *const ir.interfaces.EvalContext, ) ir.interfaces.EvalError!ir.Attribute { const bits = forInductionBits(op) orelse return error.UnsupportedOperation; verifyForOpInternal(@constCast(op)) catch return error.InvalidOperand; std.debug.assert(operands.len == op.operands.items.len); const body = @constCast(op).getRegion(0) orelse return error.InvalidOperand; const lower = operands[0].cast(ir.Attribute.IntegerAttr) orelse return error.InvalidOperand; const upper = operands[1].cast(ir.Attribute.IntegerAttr) orelse return error.InvalidOperand; const step = operands[2].cast(ir.Attribute.IntegerAttr) orelse return error.InvalidOperand; var induction = arith.scalar.truncate(lower.getValue(), bits); const bound = arith.scalar.truncate(upper.getValue(), bits); const stride = step.getValue(); const current = eval_ctx.allocator.alloc(ir.Attribute, operands.len - 2) catch return error.OutOfMemory; defer eval_ctx.allocator.free(current); const carried = current[1..]; std.debug.assert(carried.len == op.results.items.len); @memcpy(carried, operands[3..]); while (true) { try eval_ctx.consumeIterationFuel(eval_ctx.state); try eval_ctx.consumeBranchFuel(eval_ctx.state); if (induction >= bound) return makeResults(op.getContext(), carried, carried.len); current[0] = op.getContext().getI64Attr(induction) catch return error.OutOfMemory; const result = try eval_ctx.evaluateRegionWithArgs(eval_ctx.state, body, current); const yielded = arrayValues(result) orelse return error.InvalidOperand; if (yielded.len != carried.len) return error.InvalidOperand; @memcpy(carried, yielded); induction = arith.scalar.addWrap(induction, stride, bits); } } fn evaluateWhile( op: *const ir.Operation, operands: []const ir.Attribute, eval_ctx: *const ir.interfaces.EvalContext, ) ir.interfaces.EvalError!ir.Attribute { const while_op = WhileOp{ .op = @constCast(op) }; const result_count = op.results.items.len; if (result_count != operands.len) return error.InvalidOperand; const current = eval_ctx.allocator.alloc(ir.Attribute, operands.len) catch return error.OutOfMemory; defer eval_ctx.allocator.free(current); @memcpy(current, operands); while (true) { try eval_ctx.consumeIterationFuel(eval_ctx.state); const condition_attr = try eval_ctx.evaluateRegionWithArgs(eval_ctx.state, while_op.getBeforeRegion(), current); const condition_values = arrayValues(condition_attr) orelse return error.InvalidOperand; if (condition_values.len != operands.len + 1) return error.InvalidOperand; const keep_going = boolValue(condition_values[0]) orelse return error.InvalidOperand; const carried = condition_values[1..]; if (!keep_going) return makeResults(op.getContext(), carried, result_count); const yield_attr = try eval_ctx.evaluateRegionWithArgs(eval_ctx.state, while_op.getAfterRegion(), carried); const yielded = arrayValues(yield_attr) orelse return error.InvalidOperand; if (yielded.len != operands.len) return error.InvalidOperand; @memcpy(current, yielded); } } fn evaluate( op_ptr: *const anyopaque, operands: []const ir.Attribute, eval_ctx: *const ir.interfaces.EvalContext, ) ir.interfaces.EvalError!ir.Attribute { const op: *const ir.Operation = @ptrCast(@alignCast(op_ptr)); if (std.mem.eql(u8, op.name.name, IfOp.operation_name)) { return evaluateIf(op, operands, eval_ctx); } if (std.mem.eql(u8, op.name.name, ForOp.operation_name)) { return evaluateFor(op, operands, eval_ctx); } if (std.mem.eql(u8, op.name.name, WhileOp.operation_name)) { return evaluateWhile(op, operands, eval_ctx); } if (std.mem.eql(u8, op.name.name, ConditionOp.operation_name)) { if (operands.len == 0) return error.InvalidOperand; return makeArray(op.getContext(), operands); } if (std.mem.eql(u8, op.name.name, YieldOp.operation_name)) { return makeArray(op.getContext(), operands); } return error.UnsupportedOperation; } const vtable = ir.interfaces.Evaluatable.VTable{ .canEval = canEval, .evaluate = evaluate, }; fn fallback(_: *const ir.Operation) ?*const anyopaque { return &vtable; } }; pub const IfOp = struct { op: *ir.Operation, const def = op_templates.explicit(@This(), .{ .mnemonic = "if", .interfaces = &.{effects.EffectOpInterface.entryFor(.{ .capacity = .{ .entries = 1, .per_region = 1, .per_result = 1 }, .enumerate = conditionalEffects, })}, .operands = .{"condition"}, .regions = ir.dialects.shape.atLeast(1), .region_names = .{ "then", "else" }, .successors = 0, .operand_types = &.{ir.dialects.typeConstraint.exact(0, "arith.bool")}, .dynamic_traits = .{ ir.traits.AtLeastNRegions(1), ir.traits.SingleBlock, }, }); pub const operation_spec = def.operation_spec; pub const operation_name = def.operation_name; pub const createOperation = def.createOperation; pub const getOperand = def.getOperand; pub const getRegion = def.getRegion; pub const verify = verifyIfOp; pub const verifyRegions = verifyIfOpRegions; pub fn create( ctx: *ir.Context, loc: ir.Location, condition: *ir.Value, result_types: []const ir.Type, ) !IfOp { try loadSpec(ctx); var then_body = ir.context.initRegion(ctx); defer then_body.deinit(); var then_builder = ir.OperationBuilder.init(ctx); _ = try then_builder.createBlock(&then_body, &.{}, &.{}); var else_body = ir.context.initRegion(ctx); defer else_body.deinit(); var else_builder = ir.OperationBuilder.init(ctx); _ = try else_builder.createBlock(&else_body, &.{}, &.{}); var regions = [_]*ir.Region{ &then_body, &else_body }; return try @This().createOperation(ctx, loc, &.{condition}, result_types, ®ions, &.{}); } pub fn createWithoutElse( ctx: *ir.Context, loc: ir.Location, condition: *ir.Value, ) !IfOp { try loadSpec(ctx); var then_body = ir.context.initRegion(ctx); defer then_body.deinit(); var then_builder = ir.OperationBuilder.init(ctx); _ = try then_builder.createBlock(&then_body, &.{}, &.{}); var regions = [_]*ir.Region{&then_body}; return try @This().createOperation(ctx, loc, &.{condition}, &.{}, ®ions, &.{}); } pub fn getCondition(self: IfOp) *ir.Value { return self.getOperand("condition"); } pub fn getThenRegion(self: IfOp) *ir.Region { return self.getRegion("then"); } pub fn getThenBlock(self: IfOp) *ir.Block { return self.getThenRegion().getEntryBlock().?; } pub fn getElseRegion(self: IfOp) ?*ir.Region { return self.op.getRegion(1); } pub fn getElseBlock(self: IfOp) ?*ir.Block { if (self.getElseRegion()) |region| { return region.getEntryBlock(); } return null; } pub fn getResult(self: *const IfOp, index: usize) ?*ir.Value { return self.op.getResult(index); } pub fn getNumResults(self: IfOp) usize { return self.op.results.items.len; } }; pub const ForOp = struct { op: *ir.Operation, const def = op_templates.explicit(@This(), .{ .mnemonic = "for", .interfaces = &.{effects.EffectOpInterface.entryFor(.{ .capacity = .{ .entries = 1, .per_region = 1, .per_result = 1 }, .enumerate = loopEffects, })}, .operands = ir.dialects.shape.atLeast(3), .operand_names = .{ "lower_bound", "upper_bound", "step" }, .regions = .{"body"}, .successors = 0, .dynamic_traits = .{ ir.traits.OneRegion, ir.traits.SingleBlock }, }); pub const operation_spec = def.operation_spec; pub const operation_name = def.operation_name; pub const createOperation = def.createOperation; pub const getOperand = def.getOperand; pub const getRegion = def.getRegion; pub const verify = verifyForOp; pub const verifyRegions = verifyForOpRegions; pub fn create( ctx: *ir.Context, loc: ir.Location, lower_bound: *ir.Value, upper_bound: *ir.Value, step: *ir.Value, init_args: []const *ir.Value, result_types: []const ir.Type, ) !ForOp { try loadSpec(ctx); var operands: std.ArrayList(*ir.Value) = .empty; const allocator = ir.context.transientAllocator(ctx); defer operands.deinit(allocator); try operands.append(allocator, lower_bound); try operands.append(allocator, upper_bound); try operands.append(allocator, step); for (init_args) |arg| { try operands.append(allocator, arg); } var body = ir.context.initRegion(ctx); defer body.deinit(); var body_builder = ir.OperationBuilder.init(ctx); const body_block = try body_builder.createBlock(&body, &.{}, &.{}); _ = try body_block.addArgument(lower_bound.type, loc); for (init_args) |init_arg| { _ = try body_block.addArgument(init_arg.type, loc); } var regions = [_]*ir.Region{&body}; return try @This().createOperation(ctx, loc, operands.items, result_types, ®ions, &.{}); } pub fn getLowerBound(self: ForOp) *ir.Value { return self.getOperand("lower_bound"); } pub fn getUpperBound(self: ForOp) *ir.Value { return self.getOperand("upper_bound"); } pub fn getStep(self: ForOp) *ir.Value { return self.getOperand("step"); } pub fn getInitArgs(self: ForOp) []const *ir.Value { return self.op.getOperandValues()[3..]; } pub fn getBodyRegion(self: ForOp) *ir.Region { return self.getRegion("body"); } pub fn getBodyBlock(self: ForOp) *ir.Block { return self.getBodyRegion().getEntryBlock().?; } pub fn getInductionVar(self: ForOp) *ir.Value { return self.getBodyBlock().arguments.items[0]; } pub fn getIterArgs(self: ForOp) []*ir.Value { return self.getBodyBlock().arguments.items[1..]; } pub fn getResult(self: *const ForOp, index: usize) ?*ir.Value { return self.op.getResult(index); } }; pub const WhileOp = struct { op: *ir.Operation, const def = op_templates.explicit(@This(), .{ .mnemonic = "while", .interfaces = &.{effects.EffectOpInterface.entryFor(.{ .capacity = .{ .entries = 1, .per_region = 1, .per_result = 1 }, .enumerate = loopEffects, })}, .regions = 2, .region_names = .{ "before", "after" }, .successors = 0, .dynamic_traits = .{ir.traits.SingleBlock}, }); pub const operation_spec = def.operation_spec; pub const operation_name = def.operation_name; pub const createOperation = def.createOperation; pub const getRegion = def.getRegion; pub fn create( ctx: *ir.Context, loc: ir.Location, init_args: []const *ir.Value, result_types: []const ir.Type, ) !WhileOp { try loadSpec(ctx); var operands: std.ArrayList(*ir.Value) = .empty; const allocator = ir.context.transientAllocator(ctx); defer operands.deinit(allocator); for (init_args) |arg| { try operands.append(allocator, arg); } var before_body = ir.context.initRegion(ctx); defer before_body.deinit(); var before_builder = ir.OperationBuilder.init(ctx); const before_block = try before_builder.createBlock(&before_body, &.{}, &.{}); for (init_args) |init_arg| { _ = try before_block.addArgument(init_arg.type, loc); } var after_body = ir.context.initRegion(ctx); defer after_body.deinit(); var after_builder = ir.OperationBuilder.init(ctx); const after_block = try after_builder.createBlock(&after_body, &.{}, &.{}); for (init_args) |init_arg| { _ = try after_block.addArgument(init_arg.type, loc); } var regions = [_]*ir.Region{ &before_body, &after_body }; return try @This().createOperation(ctx, loc, operands.items, result_types, ®ions, &.{}); } pub fn getBeforeRegion(self: WhileOp) *ir.Region { return self.getRegion("before"); } pub fn getAfterRegion(self: WhileOp) *ir.Region { return self.getRegion("after"); } pub fn getBeforeBlock(self: WhileOp) *ir.Block { return self.getBeforeRegion().getEntryBlock().?; } pub fn getAfterBlock(self: WhileOp) *ir.Block { return self.getAfterRegion().getEntryBlock().?; } }; pub const YieldOp = struct { op: *ir.Operation, const term = op_templates.explicitTerminator(@This(), .{ .mnemonic = "yield", .interfaces = &.{ ir.interfaces.YieldOpInterface.entry(&yield_vtable), effects.EffectOpInterface.entryFor(.{}), }, }); pub const operation_spec = term.operation_spec; pub const operation_name = term.operation_name; pub const createTerminator = term.createTerminator; pub fn create( ctx: *ir.Context, loc: ir.Location, results: []const *ir.Value, ) !YieldOp { try loadSpec(ctx); return try @This().createTerminator(ctx, loc, results, &.{}); } pub fn getOperands(self: YieldOp) []const *ir.Value { return self.op.getOperandValues(); } }; pub const ConditionOp = struct { op: *ir.Operation, const term = op_templates.explicitTerminator(@This(), .{ .mnemonic = "condition", .interfaces = &.{effects.EffectOpInterface.entryFor(.{})}, .operands = ir.dialects.shape.atLeast(1), .operand_names = .{"condition"}, .operand_types = &.{ir.dialects.typeConstraint.exact(0, "arith.bool")}, }); pub const operation_spec = term.operation_spec; pub const operation_name = term.operation_name; pub const createTerminator = term.createTerminator; pub const getOperand = term.getOperand; pub fn create( ctx: *ir.Context, loc: ir.Location, condition: *ir.Value, args: []const *ir.Value, ) !ConditionOp { try loadSpec(ctx); var operands: std.ArrayList(*ir.Value) = .empty; const allocator = ir.context.transientAllocator(ctx); defer operands.deinit(allocator); try operands.append(allocator, condition); for (args) |arg| { try operands.append(allocator, arg); } return try @This().createTerminator(ctx, loc, operands.items, &.{}); } pub fn getCondition(self: ConditionOp) *ir.Value { return self.getOperand("condition"); } pub fn getArgs(self: ConditionOp) []const *ir.Value { return self.op.getOperandValues()[1..]; } }; fn loadSpec(ctx: *ir.Context) !void { try ir.dialects.loadDialectSpec(ctx, spec); } fn getYieldOperandCount(op_ptr: *const anyopaque) usize { const op: *const ir.Operation = @ptrCast(@alignCast(op_ptr)); return op.getOperandValues().len; } fn getYieldOperand(op_ptr: *const anyopaque, index: usize) ?*ir.Value { const op: *const ir.Operation = @ptrCast(@alignCast(op_ptr)); return op.getOperand(index); } fn verifyForOp(op_ptr: *const anyopaque) anyerror!void { const op: *ir.Operation = @ptrCast(@alignCast(@constCast(op_ptr))); if (op.operands.items.len < 3) return error.ScfForMissingBounds; if (op.regions.items.len != 1) return error.ScfForRegionArityMismatch; } fn verifyIfOp(op_ptr: *const anyopaque) anyerror!void { const op: *ir.Operation = @ptrCast(@alignCast(@constCast(op_ptr))); if (op.operands.items.len != 1) return error.ScfIfMissingCondition; if (op.regions.items.len < 1) return error.ScfIfMissingThenRegion; if (op.results.items.len > 0 and op.regions.items.len < 2) return error.ScfIfMissingElseRegion; } fn verifyForOpRegions(op_ptr: *const anyopaque) anyerror!void { const op: *ir.Operation = @ptrCast(@alignCast(@constCast(op_ptr))); try verifyForOpInternal(op); } fn verifyIfOpRegions(op_ptr: *const anyopaque) anyerror!void { const op: *ir.Operation = @ptrCast(@alignCast(@constCast(op_ptr))); try verifyIfOpInternal(op); } fn verifyIfOpInternal(op: *ir.Operation) VerifyError!void { if (op.operands.items.len != 1) return error.ScfIfMissingCondition; if (op.regions.items.len < 1) return error.ScfIfMissingThenRegion; const result_count = op.results.items.len; if (result_count == 0) return; if (op.regions.items.len < 2) return error.ScfIfMissingElseRegion; try verifyIfYield(op, op.getRegion(0) orelse return error.ScfIfMissingThenRegion); try verifyIfYield(op, op.getRegion(1) orelse return error.ScfIfMissingElseRegion); } fn verifyIfYield(op: *ir.Operation, region: *ir.Region) VerifyError!void { const block = region.getEntryBlock() orelse return error.ScfIfMissingThenBlock; if (!region.hasOneBlock()) return error.ScfIfMultipleBlocks; var yield_op: ?*ir.Operation = null; var op_iter = block.operations.head; while (op_iter) |opaque_op| { const current: *ir.Operation = @ptrCast(@alignCast(opaque_op)); if (std.mem.eql(u8, current.name.name, YieldOp.operation_name)) { if (current.next_op != null) return error.ScfIfYieldNotTerminal; yield_op = current; } op_iter = current.next_op; } const yield_final = yield_op orelse return error.ScfIfYieldMissing; if (yield_final.operands.items.len != op.results.items.len) return error.ScfIfYieldArityMismatch; for (op.results.items, 0..) |result, index| { const yield_type = yield_final.operands.items[index].value.type; if (!result.type.eql(yield_type)) return error.ScfIfYieldTypeMismatch; } } fn verifyForOpInternal(op: *ir.Operation) VerifyError!void { if (op.operands.items.len < 3) return error.ScfForMissingBounds; if (op.regions.items.len != 1) return error.ScfForRegionArityMismatch; const body_region = op.getRegion(0) orelse return error.ScfForMissingBody; const body_block = body_region.getEntryBlock() orelse return error.ScfForMissingBody; if (!body_region.hasOneBlock()) return error.ScfForMultipleBlocks; const iter_count = op.operands.items.len - 3; if (op.results.items.len != iter_count) return error.ScfForResultArityMismatch; if (body_block.arguments.items.len != iter_count + 1) return error.ScfForBlockArgCountMismatch; const lower_type = op.operands.items[0].value.type; const upper_type = op.operands.items[1].value.type; const step_type = op.operands.items[2].value.type; if (!lower_type.eql(upper_type) or !lower_type.eql(step_type)) { return error.ScfForBoundsTypeMismatch; } if (!body_block.arguments.items[0].type.eql(lower_type)) { return error.ScfForInductionTypeMismatch; } var yield_op: ?*ir.Operation = null; var op_iter = body_block.operations.head; while (op_iter) |opaque_op| { const current: *ir.Operation = @ptrCast(@alignCast(opaque_op)); if (std.mem.eql(u8, current.name.name, YieldOp.operation_name)) { if (yield_op != null) return error.ScfForMultipleYields; if (current.next_op != null) return error.ScfForYieldNotTerminal; yield_op = current; } op_iter = current.next_op; } const yield_final = yield_op orelse return error.ScfForYieldMissing; if (yield_final.operands.items.len != iter_count) return error.ScfForYieldArityMismatch; for (0..iter_count) |i| { const init_type = op.operands.items[3 + i].value.type; const block_type = body_block.arguments.items[1 + i].type; if (!init_type.eql(block_type)) return error.ScfForIterArgTypeMismatch; const result_type = op.results.items[i].type; if (!init_type.eql(result_type)) return error.ScfForResultTypeMismatch; const yield_type = yield_final.operands.items[i].value.type; if (!init_type.eql(yield_type)) return error.ScfForYieldTypeMismatch; } }};Also reachable as
Complete caller list for dialects.ScfDialect.ConditionOp.create
14 direct callers.
lib.accy.src.kernel.model.core.builder.Builder.condition_[method] — private source atlib/accy/src/kernel/model/core/builder.zig:1523in nearest public ownerlib.accy.src.kernel.model.core.builderlib.choir.src.backends.aarch64.backend.blockCondition[function] — private source atlib/choir/src/backends/aarch64/backend.zig:1815in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_loop-invariant_home_survives_body_register_reuse[function] — test source atlib/choir/src/backends/x64/backend.zig:6419in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_high_arity_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2504in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2424in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_result_feeds_post-loop_select[function] — test source atlib/choir/src/backends/x64/backend.zig:2280in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_zero_exit_spills_live_merge_values[function] — test source atlib/choir/src/backends/x64/backend.zig:1784in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf_while_carries_integer_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2197in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.emit.emitWhileCarrying[function] — private source atlib/choir/src/backends/x64/emit.zig:3188in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.backends.x64.emit.test_x86_64_planned_block_argument_homes_use_edge_positions[function] — test source atlib/choir/src/backends/x64/emit.zig:2902in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.dialects.scf.test_ScfDialect.YieldOp_and_ConditionOp_expose_const_operand_slices[function] — test source atlib/choir/src/dialects/scf.zig:829in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf.condition_with_bool_cond_operand_passes_verification[function] — test source atlib/choir/src/dialects/scf.zig:1038in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf.condition_with_non-bool_cond_operand_fails_verification[function] — test source atlib/choir/src/dialects/scf.zig:1015in nearest public ownertiny.choir.dialects.scflib.choir.src.properties.codegen.createWhile[function] — private source atlib/choir/src/properties/codegen.zig:259in nearest public ownerlib.choir.src.properties.codegen
Complete caller list for dialects.ScfDialect.ForOp.create
27 direct callers.
lib.accy.src.kernel.model.core.builder.Builder.for_[method] — private source atlib/accy/src/kernel/model/core/builder.zig:1483in nearest public ownerlib.accy.src.kernel.model.core.builderlib.chant.src.lower.statement.loop.lower[function] — private source atlib/chant/src/lower/statement/loop.zig:13in nearest public ownerlib.chant.src.lower.statement.looplib.choir.src.backends.aarch64.backend.makeCounted[function] — private source atlib/choir/src/backends/aarch64/backend.zig:1924in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_counted_induction_bounds_step_and_empty_yield_match_evaluator[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2301in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_for_parallel_carried_rotations_and_nested_counted_loops[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2210in nearest public ownertiny.choir.backends.aarch64.backendtiny.choir.backends.gpu.cpu.lowering.lowerKernelToHostLoop[function] atlib/choir/src/backends/gpu/cpu/lowering.zig:21lib.choir.src.backends.gpu.spirv.emitter.codegen.test_spirv_codegen_handles_control_flow,_shared_alloc,_and_warp_ops[function] — test source atlib/choir/src/backends/gpu/spirv/emitter/codegen.zig:1505in nearest public ownertiny.choir.backends.gpu.spirv.emitter.codegenlib.choir.src.backends.wasm.emission.owner.test_WASM_module_emitter_handles_structured_control_and_host_memory[function] — test source atlib/choir/src/backends/wasm/emission/owner.zig:732in nearest public ownerlib.choir.src.backends.wasm.emission.ownerlib.choir.src.backends.x64.backend.test_x86_64_f32_dot_product_loop[function] — test source atlib/choir/src/backends/x64/backend.zig:2094in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_float_loop_result_survives_trailing_body_ops[function] — test source atlib/choir/src/backends/x64/backend.zig:6676in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_nested_scf.for_float_accumulator_stays_slot_carried[function] — test source atlib/choir/src/backends/x64/backend.zig:6592in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_packed_vec4xf32_loop_keeps_values_in_xmm_registers[function] — test source atlib/choir/src/backends/x64/backend.zig:6761in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.for_memref_kernel_is_register_allocated_and_correct[function] — test source atlib/choir/src/backends/x64/backend.zig:6514in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.dialects.scf.test_ScfDialect.ForOp_creates_for_loop[function] — test source atlib/choir/src/dialects/scf.zig:787in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_accepts_well-formed_loops[function] — test source atlib/choir/src/dialects/scf.zig:867in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_accepts_zero_iter_args[function] — test source atlib/choir/src/dialects/scf.zig:903in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_rejects_mismatched_yield_arity[function] — test source atlib/choir/src/dialects/scf.zig:937in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf_effect_declarations_distinguish_conditional_and_repeated_execution[function] — test source atlib/choir/src/dialects/scf.zig:1078in nearest public ownertiny.choir.dialects.scflib.choir.src.passes.views.MemrefViewLegalizer.rewriteCopy[method] — private source atlib/choir/src/passes/views.zig:168in nearest public ownertiny.choir.passes.memref_viewslib.choir.src.profiling.versus.core.compile.appendControlLoopOp[function] — private source atlib/choir/src/profiling/versus/core/compile.zig:183in nearest public ownertiny.choir.versus.compilelib.choir.src.profiling.versus.kernels.buildClampsum[function] — private source atlib/choir/src/profiling/versus/kernels.zig:323in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildDot[function] — private source atlib/choir/src/profiling/versus/kernels.zig:104in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildMatmul[function] — private source atlib/choir/src/profiling/versus/kernels.zig:166in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildPolybenchGemm[function] — private source atlib/choir/src/profiling/versus/kernels.zig:219in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildSaxpy[function] — private source atlib/choir/src/profiling/versus/kernels.zig:74in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildStencil3[function] — private source atlib/choir/src/profiling/versus/kernels.zig:286in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildSum[function] — private source atlib/choir/src/profiling/versus/kernels.zig:136in nearest public ownerlib.choir.src.profiling.versus.kernels
Complete caller list for dialects.ScfDialect.IfOp.create
25 direct callers.
lib.accy.src.kernel.model.core.builder.Builder.if_[method] — private source atlib/accy/src/kernel/model/core/builder.zig:1475in nearest public ownerlib.accy.src.kernel.model.core.builderlib.chant.src.lower.statement.branch.lower[function] — private source atlib/chant/src/lower/statement/branch.zig:10in nearest public ownerlib.chant.src.lower.statement.branchlib.choir.src.backends.aarch64.backend.test_aarch64_control_if_and_for_carried_limits_accept_full_and_refuse_one_past[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2150in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_if_selects_both_branches_with_scalar_results[function] — test source atlib/choir/src/backends/aarch64/backend.zig:1826in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_zero_carried_loops_and_resultless_else_regions[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2131in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.gpu.spirv.emitter.codegen.test_spirv_codegen_handles_control_flow,_shared_alloc,_and_warp_ops[function] — test source atlib/choir/src/backends/gpu/spirv/emitter/codegen.zig:1505in nearest public ownertiny.choir.backends.gpu.spirv.emitter.codegenlib.choir.src.backends.wasm.emission.owner.buildNestedIfModule[function] — private source atlib/choir/src/backends/wasm/emission/owner.zig:266in nearest public ownerlib.choir.src.backends.wasm.emission.ownerlib.choir.src.backends.wasm.emission.owner.test_WASM_module_emitter_handles_structured_control_and_host_memory[function] — test source atlib/choir/src/backends/wasm/emission/owner.zig:732in nearest public ownerlib.choir.src.backends.wasm.emission.ownerlib.choir.src.backends.x64.backend.runUnaryFloatInScfIf[function] — private source atlib/choir/src/backends/x64/backend.zig:5771in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.and_/_arith.not_inside_scf.if_body_(emitArithBitwiseBinary_+_emitArithNot_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5916in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.max_(float_branch)_inside_scf.if_body_(emitArithMinMax_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:6034in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.pow_inside_scf.if_body_(emitArithLibmBinary_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5858in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.select_inside_scf.if_body_(dispatchOp_parity)[function] — test source atlib/choir/src/backends/x64/backend.zig:5504in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.shl_inside_scf.if_body_(emitArithShift_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5976in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_backend_canonicalizes_extern_bool_results[function] — test source atlib/choir/src/backends/x64/backend.zig:1572in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_register_allocation_preserves_scf_if_branch_homes[function] — test source atlib/choir/src/backends/x64/backend.zig:1633in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.if_yields_resolve_register-home_swaps[function] — test source atlib/choir/src/backends/x64/backend.zig:1710in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.jit.test_JitRuntime_locates_emission_failures_at_the_innermost_failing_operation[function] — test source atlib/choir/src/backends/x64/jit.zig:1770in nearest public ownerlib.choir.src.backends.x64.jitlib.choir.src.dialects.scf.test_ScfDialect.IfOp_creates_conditional[function] — test source atlib/choir/src/dialects/scf.zig:664in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.IfOp_verifier_accepts_result_yields[function] — test source atlib/choir/src/dialects/scf.zig:737in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.IfOp_verifier_rejects_missing_result_yield[function] — test source atlib/choir/src/dialects/scf.zig:766in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf.if_with_bool_cond_operand_passes_verification[function] — test source atlib/choir/src/dialects/scf.zig:997in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf.if_with_non-bool_cond_operand_fails_verification[function] — test source atlib/choir/src/dialects/scf.zig:974in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_scf_effect_declarations_distinguish_conditional_and_repeated_execution[function] — test source atlib/choir/src/dialects/scf.zig:1078in nearest public ownertiny.choir.dialects.scflib.choir.src.properties.codegen.createIf[function] — private source atlib/choir/src/properties/codegen.zig:295in nearest public ownerlib.choir.src.properties.codegen
Complete caller list for dialects.ScfDialect.WhileOp.create
20 direct callers.
lib.accy.src.kernel.model.core.builder.Builder.while_[method] — private source atlib/accy/src/kernel/model/core/builder.zig:1503in nearest public ownerlib.accy.src.kernel.model.core.builderlib.choir.src.backends.aarch64.backend.makeRotatingWhile[function] — private source atlib/choir/src/backends/aarch64/backend.zig:1952in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.makeWhile[function] — private source atlib/choir/src/backends/aarch64/backend.zig:1864in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_control_rejects_floating_carried_values_and_mismatched_condition_edges_by_name[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2188in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_condition_forwards_computed_exit_and_entry_values[function] — test source atlib/choir/src/backends/aarch64/backend.zig:1906in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_constant_bounded_loop_reaches_its_trap_only_on_iteration_four[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2272in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_pressure_across_back_edges_reaches_frame_bound_and_refuses_one_past[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2007in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_traps_only_in_the_iteration_reaching_an_invalid_domain[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2049in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_while_admits_every_scalar_carried_type[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2114in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_while_zero_one_many_tests_and_nested_loops_match_evaluator[function] — test source atlib/choir/src/backends/aarch64/backend.zig:1877in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.aarch64.backend.test_aarch64_native_control_zero_carried_loops_and_resultless_else_regions[function] — test source atlib/choir/src/backends/aarch64/backend.zig:2131in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_loop-invariant_home_survives_body_register_reuse[function] — test source atlib/choir/src/backends/x64/backend.zig:6419in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_high_arity_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2504in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2424in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_result_feeds_post-loop_select[function] — test source atlib/choir/src/backends/x64/backend.zig:2280in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_zero_exit_spills_live_merge_values[function] — test source atlib/choir/src/backends/x64/backend.zig:1784in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf_while_carries_integer_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2197in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.emit.emitWhileCarrying[function] — private source atlib/choir/src/backends/x64/emit.zig:3188in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.backends.x64.emit.test_x86_64_planned_block_argument_homes_use_edge_positions[function] — test source atlib/choir/src/backends/x64/emit.zig:2902in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.properties.codegen.createWhile[function] — private source atlib/choir/src/properties/codegen.zig:259in nearest public ownerlib.choir.src.properties.codegen
Complete caller list for dialects.ScfDialect.YieldOp.create
47 direct callers.
lib.accy.src.kernel.model.core.builder.Builder.yield_[method] — private source atlib/accy/src/kernel/model/core/builder.zig:1546in nearest public ownerlib.accy.src.kernel.model.core.buildertiny.chant.lower.emit.emitYield[function] atlib/chant/src/lower/emit.zig:21lib.choir.src.backends.aarch64.backend.blockYield[function] — private source atlib/choir/src/backends/aarch64/backend.zig:1810in nearest public ownertiny.choir.backends.aarch64.backendlib.choir.src.backends.gpu.cpu.lowering.cloneBlockIntoHostLoop[function] — private source atlib/choir/src/backends/gpu/cpu/lowering.zig:424in nearest public ownertiny.choir.backends.gpu.cpu.loweringlib.choir.src.backends.gpu.cpu.lowering.cloneBlockIntoVectorHostLoop[function] — private source atlib/choir/src/backends/gpu/cpu/lowering.zig:508in nearest public ownertiny.choir.backends.gpu.cpu.loweringlib.choir.src.backends.gpu.spirv.emitter.codegen.test_spirv_codegen_handles_control_flow,_shared_alloc,_and_warp_ops[function] — test source atlib/choir/src/backends/gpu/spirv/emitter/codegen.zig:1505in nearest public ownertiny.choir.backends.gpu.spirv.emitter.codegenlib.choir.src.backends.wasm.emission.owner.buildNestedIfModule[function] — private source atlib/choir/src/backends/wasm/emission/owner.zig:266in nearest public ownerlib.choir.src.backends.wasm.emission.ownerlib.choir.src.backends.wasm.emission.owner.test_WASM_module_emitter_handles_structured_control_and_host_memory[function] — test source atlib/choir/src/backends/wasm/emission/owner.zig:732in nearest public ownerlib.choir.src.backends.wasm.emission.ownerlib.choir.src.backends.x64.backend.runUnaryFloatInScfIf[function] — private source atlib/choir/src/backends/x64/backend.zig:5771in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.and_/_arith.not_inside_scf.if_body_(emitArithBitwiseBinary_+_emitArithNot_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5916in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.max_(float_branch)_inside_scf.if_body_(emitArithMinMax_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:6034in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.pow_inside_scf.if_body_(emitArithLibmBinary_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5858in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.select_inside_scf.if_body_(dispatchOp_parity)[function] — test source atlib/choir/src/backends/x64/backend.zig:5504in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_arith.shl_inside_scf.if_body_(emitArithShift_via_dispatchOp)[function] — test source atlib/choir/src/backends/x64/backend.zig:5976in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_backend_canonicalizes_extern_bool_results[function] — test source atlib/choir/src/backends/x64/backend.zig:1572in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_f32_dot_product_loop[function] — test source atlib/choir/src/backends/x64/backend.zig:2094in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_float_loop_result_survives_trailing_body_ops[function] — test source atlib/choir/src/backends/x64/backend.zig:6676in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_nested_scf.for_float_accumulator_stays_slot_carried[function] — test source atlib/choir/src/backends/x64/backend.zig:6592in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_packed_vec4xf32_loop_keeps_values_in_xmm_registers[function] — test source atlib/choir/src/backends/x64/backend.zig:6761in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_register_allocation_preserves_scf_if_branch_homes[function] — test source atlib/choir/src/backends/x64/backend.zig:1633in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.for_memref_kernel_is_register_allocated_and_correct[function] — test source atlib/choir/src/backends/x64/backend.zig:6514in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.if_yields_resolve_register-home_swaps[function] — test source atlib/choir/src/backends/x64/backend.zig:1710in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_loop-invariant_home_survives_body_register_reuse[function] — test source atlib/choir/src/backends/x64/backend.zig:6419in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_high_arity_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2504in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_preserves_overlapping_carried_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2424in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_result_feeds_post-loop_select[function] — test source atlib/choir/src/backends/x64/backend.zig:2280in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf.while_zero_exit_spills_live_merge_values[function] — test source atlib/choir/src/backends/x64/backend.zig:1784in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.backend.test_x86_64_scf_while_carries_integer_values[function] — test source atlib/choir/src/backends/x64/backend.zig:2197in nearest public ownerlib.choir.src.backends.x64.backendlib.choir.src.backends.x64.emit.emitWhileCarrying[function] — private source atlib/choir/src/backends/x64/emit.zig:3188in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.backends.x64.emit.test_x86_64_planned_block_argument_homes_use_edge_positions[function] — test source atlib/choir/src/backends/x64/emit.zig:2902in nearest public ownerlib.choir.src.backends.x64.emitlib.choir.src.backends.x64.jit.test_JitRuntime_locates_emission_failures_at_the_innermost_failing_operation[function] — test source atlib/choir/src/backends/x64/jit.zig:1770in nearest public ownerlib.choir.src.backends.x64.jitlib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_accepts_well-formed_loops[function] — test source atlib/choir/src/dialects/scf.zig:867in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_accepts_zero_iter_args[function] — test source atlib/choir/src/dialects/scf.zig:903in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.ForOp_verifier_rejects_mismatched_yield_arity[function] — test source atlib/choir/src/dialects/scf.zig:937in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.IfOp_verifier_accepts_result_yields[function] — test source atlib/choir/src/dialects/scf.zig:737in nearest public ownertiny.choir.dialects.scflib.choir.src.dialects.scf.test_ScfDialect.YieldOp_and_ConditionOp_expose_const_operand_slices[function] — test source atlib/choir/src/dialects/scf.zig:829in nearest public ownertiny.choir.dialects.scflib.choir.src.passes.views.MemrefViewLegalizer.rewriteCopy[method] — private source atlib/choir/src/passes/views.zig:168in nearest public ownertiny.choir.passes.memref_viewslib.choir.src.profiling.versus.core.compile.appendControlLoopOp[function] — private source atlib/choir/src/profiling/versus/core/compile.zig:183in nearest public ownertiny.choir.versus.compilelib.choir.src.profiling.versus.kernels.buildClampsum[function] — private source atlib/choir/src/profiling/versus/kernels.zig:323in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildDot[function] — private source atlib/choir/src/profiling/versus/kernels.zig:104in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildMatmul[function] — private source atlib/choir/src/profiling/versus/kernels.zig:166in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildPolybenchGemm[function] — private source atlib/choir/src/profiling/versus/kernels.zig:219in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildSaxpy[function] — private source atlib/choir/src/profiling/versus/kernels.zig:74in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildStencil3[function] — private source atlib/choir/src/profiling/versus/kernels.zig:286in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.profiling.versus.kernels.buildSum[function] — private source atlib/choir/src/profiling/versus/kernels.zig:136in nearest public ownerlib.choir.src.profiling.versus.kernelslib.choir.src.properties.codegen.createIf[function] — private source atlib/choir/src/properties/codegen.zig:295in nearest public ownerlib.choir.src.properties.codegenlib.choir.src.properties.codegen.createWhile[function] — private source atlib/choir/src/properties/codegen.zig:259in nearest public ownerlib.choir.src.properties.codegen
Audit
| Definitions | 63 |
|---|---|
| Public names | 126 |
| Members | 29 |
| Version | 26.7.0 |
| Revision | daab053ee433 |