Skip to documentation
SLOP

tiny.choir.ir.dialects.shape

Reference tiny.choir ir dialects shape

Defined in ir.dialects.

API (10)

Actions

Public operations.

No direct callersNo direct callsir.dialectsshape
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/choir/src/core/dialects/spec.zig:694

zig
pub const shape = struct {    pub fn of(comptime spec: anytype) interfaces.OperationShape {        comptime validateSpec(@TypeOf(spec));        return .{            .operands = field(spec, "operands"),            .results = field(spec, "results"),            .regions = field(spec, "regions"),            .successors = field(spec, "successors"),        };    }    pub fn fixed(        comptime operands: anytype,        comptime results: anytype,        comptime regions: anytype,        comptime successors: anytype,    ) interfaces.OperationShape {        return of(.{            .operands = operands,            .results = results,            .regions = regions,            .successors = successors,        });    }    pub fn leaf(comptime operands: anytype, comptime results: anytype) interfaces.OperationShape {        return of(.{            .operands = operands,            .results = results,            .regions = 0,            .successors = 0,        });    }    pub fn noNested(comptime spec: anytype) interfaces.OperationShape {        comptime validateNoNestedSpec(@TypeOf(spec));        const base = of(spec);        return .{            .operands = base.operands,            .results = base.results,            .regions = interfaces.CountRange.exactly(0),            .successors = interfaces.CountRange.exactly(0),        };    }    pub fn exactly(comptime count: usize) interfaces.CountRange {        return interfaces.CountRange.exactly(count);    }    pub fn atLeast(comptime count: usize) interfaces.CountRange {        return interfaces.CountRange.atLeast(count);    }    pub fn atMost(comptime count: usize) interfaces.CountRange {        return interfaces.CountRange.atMost(count);    }    pub fn between(comptime min: usize, comptime max: usize) interfaces.CountRange {        return interfaces.CountRange.between(min, max);    }    pub fn any() interfaces.CountRange {        return .{};    }    pub fn range(comptime value: anytype) interfaces.CountRange {        return rangeFrom(value);    }    fn field(comptime spec: anytype, comptime name: []const u8) interfaces.CountRange {        if (comptime @hasField(@TypeOf(spec), name)) {            return rangeFrom(@field(spec, name));        }        return .{};    }    fn rangeFrom(comptime value: anytype) interfaces.CountRange {        const Value = @TypeOf(value);        if (Value == interfaces.CountRange) return value;        return switch (@typeInfo(Value)) {            .comptime_int => blk: {                if (value < 0) @compileError("operation shape count cannot be negative");                break :blk interfaces.CountRange.exactly(@as(usize, value));            },            .int => |int_info| blk: {                if (int_info.signedness == .signed and value < 0) {                    @compileError("operation shape count cannot be negative");                }                break :blk interfaces.CountRange.exactly(@intCast(value));            },            .pointer => |pointer_info| switch (pointer_info.size) {                .one => switch (@typeInfo(pointer_info.child)) {                    .array => |array_info| blk: {                        if (array_info.child == u8) {                            @compileError("operation shape fields must use a list of component names, not one component name");                        }                        tryComponentNames(value.*, "shape");                        break :blk interfaces.CountRange.exactly(array_info.len);                    },                    .@"struct" => |struct_info| blk: {                        tryComponentNames(value.*, "shape");                        break :blk interfaces.CountRange.exactly(struct_info.field_names.len);                    },                    else => @compileError("operation shape fields must be integer counts, CountRange values, or component name lists"),                },                .slice => blk: {                    tryComponentNames(value, "shape");                    break :blk interfaces.CountRange.exactly(value.len);                },                else => @compileError("operation shape fields must be integer counts, CountRange values, or component name lists"),            },            .array => |array_info| blk: {                if (array_info.child == u8) {                    @compileError("operation shape fields must use a list of component names, not one component name");                }                tryComponentNames(value, "shape");                break :blk interfaces.CountRange.exactly(array_info.len);            },            .@"struct" => |struct_info| blk: {                tryComponentNames(value, "shape");                break :blk interfaces.CountRange.exactly(struct_info.field_names.len);            },            else => @compileError("operation shape fields must be integer counts or CountRange values"),        };    }    fn validateSpec(comptime Spec: type) void {        switch (@typeInfo(Spec)) {            .@"struct" => |struct_info| {                inline for (struct_info.field_names) |field_name| {                    if (!std.mem.eql(u8, field_name, "operands") and                        !std.mem.eql(u8, field_name, "results") and                        !std.mem.eql(u8, field_name, "regions") and                        !std.mem.eql(u8, field_name, "successors"))                    {                        @compileError("unknown operation shape field: " ++ field_name);                    }                }            },            else => @compileError("operation shape spec must be a struct literal"),        }    }    fn validateNoNestedSpec(comptime Spec: type) void {        validateSpec(Spec);        if (@hasField(Spec, "regions")) @compileError("noNested operation shape cannot specify regions");        if (@hasField(Spec, "successors")) @compileError("noNested operation shape cannot specify successors");    }};

Source: lib/choir/src/core/dialects/root.zig:46

zig
pub const shape = spec.shape;
Called byCallsNo direct callstest sourcelib.choir.src.core.dialects.spectest: operationTemplate explicit leaf...ir.dialects.shapeany
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.choir.src.core.dialects.spectest: opSpec names components indepen...test sourcelib.choir.src.core.dialects.spectest: operationTemplate explicit leaf...test sourcelib.choir.src.core.dialects.spectest: operationTemplate explicit term...test sourcelib.choir.src.core.dialects.spectest: operation descriptor DSL derive...test sourcelib.choir.src.core.dialects.spectest: shape DSL maps integers and cou...ir.dialects.shapeatLeast
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.choir.src.core.dialects.spectest: opSpec names components indepen...test sourcelib.choir.src.core.dialects.spectest: operationTemplate explicit leaf...test sourcelib.choir.src.core.dialects.spectest: operation descriptor DSL builds...test sourcelib.choir.src.core.dialects.spectest: operation descriptor DSL export...test sourcelib.choir.src.core.dialects.spectest: operation segment helpers set a...+2 moreir.dialects.shapeatMost
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.choir.src.core.dialects.spectest: opSpec names components indepen...test sourcelib.choir.src.core.dialects.spectest: operation segment helpers set a...test sourcelib.choir.src.core.dialects.spectest: shape DSL maps integers and cou...ir.dialects.shapebetween
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callersir.dialects.shapeofir.dialects.shapefixed
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsprivate sourcelib.choir.src.core.dialects.spec.operationTem...binaryFixedResultImplprivate sourcelib.choir.src.core.dialects.spec.operationTem...binarySameTypeImplprivate sourcelib.choir.src.core.dialects.spec.operationTem...selectSameTypeImplprivate sourcelib.choir.src.core.dialects.spec.operationTem...ternarySameTypeImplprivate sourcelib.choir.src.core.dialects.spec.operationTem...unaryExplicitTypeImpl+5 moreir.dialects.shapeofir.dialects.shapeleaf
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callersir.dialects.shapeofprivate sourcelib.choir.src.core.dialects.spec.shapevalidateNoNestedSpecir.dialects.shapenoNested
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsprivate sourcelib.choir.src.core.dialects.spec.opSpecshapeFromValueir.dialects.shapefixedir.dialects.shapeleafir.dialects.shapenoNestedtest sourcelib.choir.src.core.dialects.spectest: shape DSL maps integers and cou...private sourcelib.choir.src.core.dialects.spec.shapefieldprivate sourcelib.choir.src.core.dialects.spec.shapevalidateSpecir.dialects.shapeof
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsprivate sourcelib.choir.src.core.dialects.spec.segmentsrangesFromArrayprivate sourcelib.choir.src.core.dialects.spec.segmentsrangesFromSliceprivate sourcelib.choir.src.core.dialects.spec.segmentsrangesFromTupleprivate sourcelib.choir.src.core.dialects.spec.shaperangeFromir.dialects.shaperange
Static calls · unresolved targets: 0 · external targets: 0.

Also reachable as

backends.wasm.emission.module_encoding.common.ir.dialects.shape.

Complete caller list for ir.dialects.shape.atMost

7 direct callers.

Complete caller list for ir.dialects.shape.leaf

10 direct callers.

Audit

Definitions11
Public names22
Members0
Version26.7.0
Revisiondaab053ee433