tiny.choir.dialects.aarch64.AArch64Dialect
Defined in dialects.aarch64.
API (246)
Actions
Public operations.
AddImmOp.createAddImmOp.getImmAddImmOp.getResultAddImmOp.getSizeAddImmOp.getSrcAddOp.createAddOp.getLhsAddOp.getResultAddOp.getRhsAddOp.getSizeBCondOp.createBCondOp.getConditionBCondOp.getFalseTargetBCondOp.getTrueTargetBOp.createBOp.getTargetBlOp.createCSelOp.createCSelOp.getConditionCSelOp.getResultCSelOp.getRmCSelOp.getRnCSetOp.createCSetOp.getConditionCSetOp.getResultCmpOp.createCopyToFPRegOp.createCopyToFPRegOp.getDestRegCopyToFPRegOp.getFTypeCopyToFPRegOp.getResultCopyToFPRegOp.getSrcCopyToRegOp.createCopyToRegOp.getDestRegCopyToRegOp.getResultCopyToRegOp.getSizeCopyToRegOp.getSrcCopyToSameFPRegAsOp.createCopyToSameFPRegAsOp.getFTypeCopyToSameFPRegAsOp.getResultCopyToSameFPRegAsOp.getSrcCopyToSameFPRegAsOp.getTargetRefCopyToSameRegAsOp.createCopyToSameRegAsOp.getResultCopyToSameRegAsOp.getSizeCopyToSameRegAsOp.getSrcCopyToSameRegAsOp.getTargetRefEpilogueOp.createEpilogueOp.getFrameSizeFAbsOp.createFAbsOp.getResultFAbsOp.getSrcFAddOp.createFAddOp.getResultFCmpOp.createFDivOp.createFDivOp.getResultFMovFromFPROp.createFMovFromFPROp.getResultFMovFromFPROp.getSrcFMovFromGPROp.createFMovFromGPROp.getResultFMovFromGPROp.getSrcFMovImmOp.createFMovImmOp.getImm8FMovImmOp.getResultFMovOp.createFMovOp.getFTypeFMovOp.getResultFMovOp.getSrcFMulOp.createFMulOp.getResultFNegOp.createFNegOp.getResultFNegOp.getSrcFSqrtOp.createFSqrtOp.getResultFSqrtOp.getSrcFSubOp.createFSubOp.getResultGetRegOp.createFPRGetRegOp.createGPRGetRegOp.getFPRGetRegOp.getGPRGetRegOp.getResultLdrOp.createLdrOp.getBaseLdrOp.getOffsetLdrOp.getResultMovOp.createMovOp.getResultMovOp.getSrcMovkOp.createMovkOp.getResultMovkOp.getSrcMovnOp.createMovnOp.getResultMovzOp.createMovzOp.getResultMulOp.createMulOp.getResultPrologueOp.createPrologueOp.getFrameSizeRetOp.createSDivOp.createSDivOp.getResultStrOp.createStrOp.getBaseStrOp.getOffsetStrOp.getValueSubOp.createSubOp.getLhsSubOp.getResultSubOp.getRhsSubOp.getSizeUDivOp.createUDivOp.getResultgetConditionAttrgetConditionValuegetFPRAttrgetFPRTypegetFPRValuegetFrameOffsetAttrgetFrameOffsetValuegetGPRAttrgetGPRSizeAttrgetGPRSizeValuegetGPRTypegetGPRValuegetImm12AttrgetImm12Value
Types and contracts
Public types and contracts.
AddImmOpAddOpBCondOpBOpBlOpCSelOpCSetOpCmpOpCopyToFPRegOpCopyToRegOpCopyToSameFPRegAsOpCopyToSameRegAsOpEpilogueOpFAbsOpFAddOpFCmpOpFDivOpFMovFromFPROpFMovFromGPROpFMovImmOpFMovOpFMulOpFNegOpFSqrtOpFSubOpGetRegOpLdrOpMovOpMovkOpMovnOpMovzOpMulOpPrologueOpRetOpSDivOpStrOpSubOpUDivOp
Values and defaults
Public values and defaults.
AddImmOp.operation_nameAddImmOp.operation_specAddOp.operation_nameAddOp.operation_specBCondOp.operation_nameBCondOp.operation_specBOp.operation_nameBOp.operation_specBlOp.operation_nameBlOp.operation_specCSelOp.operation_nameCSelOp.operation_specCSetOp.operation_nameCSetOp.operation_specCmpOp.operation_nameCmpOp.operation_specCopyToFPRegOp.operation_nameCopyToFPRegOp.operation_specCopyToRegOp.operation_nameCopyToRegOp.operation_specCopyToSameFPRegAsOp.operation_nameCopyToSameFPRegAsOp.operation_specCopyToSameRegAsOp.operation_nameCopyToSameRegAsOp.operation_specEpilogueOp.operation_nameEpilogueOp.operation_specFAbsOp.operation_nameFAbsOp.operation_specFAddOp.operation_nameFAddOp.operation_specFCmpOp.operation_nameFCmpOp.operation_specFDivOp.operation_nameFDivOp.operation_specFMovFromFPROp.operation_nameFMovFromFPROp.operation_specFMovFromGPROp.operation_nameFMovFromGPROp.operation_specFMovImmOp.operation_nameFMovImmOp.operation_specFMovOp.operation_nameFMovOp.operation_specFMulOp.operation_nameFMulOp.operation_specFNegOp.operation_nameFNegOp.operation_specFSqrtOp.operation_nameFSqrtOp.operation_specFSubOp.operation_nameFSubOp.operation_specGetRegOp.operation_nameGetRegOp.operation_specLdrOp.operation_nameLdrOp.operation_specMovOp.operation_nameMovOp.operation_specMovkOp.operation_nameMovkOp.operation_specMovnOp.operation_nameMovnOp.operation_specMovzOp.operation_nameMovzOp.operation_specMulOp.operation_nameMulOp.operation_specPrologueOp.operation_namePrologueOp.operation_specRetOp.operation_nameRetOp.operation_specSDivOp.operation_nameSDivOp.operation_specStrOp.operation_nameStrOp.operation_specSubOp.operation_nameSubOp.operation_specUDivOp.operation_nameUDivOp.operation_specnamespec
Source
Source: lib/choir/src/dialects/aarch64.zig:30
zig
pub const AArch64Dialect = struct { pub const name = "aarch64"; const op_specs = ir.dialects.opSpec.dialect(@This()); pub const spec = ir.dialects.dialectSpec(@This(), .{ .types = ir.dialects.typeNames(type_names), }); pub const GetRegOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "get_reg", .required_attrs = &.{"reg"}, }); pub const operation_name = operation_spec.name; pub fn createGPR(ctx: *ir.Context, loc: ir.Location, reg: GPR) !GetRegOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("reg", try getGPRAttr(ctx, reg)); return .{ .op = op }; } pub fn createFPR(ctx: *ir.Context, loc: ir.Location, reg: FPR) !GetRegOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{fpr_type}); const op = try builder.create(state); try op.setAttr("reg", try getFPRAttr(ctx, reg)); return .{ .op = op }; } pub fn getResult(self: *const GetRegOp) *ir.Value { return self.op.getResult(0).?; } pub fn getGPR(self: GetRegOp) ?GPR { if (self.op.getAttr("reg")) |attr| { return getGPRValue(attr); } return null; } pub fn getFPR(self: GetRegOp) ?FPR { if (self.op.getAttr("reg")) |attr| { return getFPRValue(attr); } return null; } }; pub const AddOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "add", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !AddOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const AddOp) *ir.Value { return self.op.getResult(0).?; } pub fn getLhs(self: AddOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getRhs(self: AddOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getSize(self: AddOp) GPRSize { if (self.op.getAttr("size")) |attr| { return getGPRSizeValue(attr) orelse .x; } return .x; } }; pub const AddImmOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "add_imm", .required_attrs = &.{ "imm", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, imm: u12, size: GPRSize) !AddImmOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("imm", try getImm12Attr(ctx, imm)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const AddImmOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: AddImmOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getImm(self: AddImmOp) u12 { if (self.op.getAttr("imm")) |attr| { return getImm12Value(attr) orelse 0; } return 0; } pub fn getSize(self: AddImmOp) GPRSize { if (self.op.getAttr("size")) |attr| { return getGPRSizeValue(attr) orelse .x; } return .x; } }; pub const SubOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "sub", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !SubOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const SubOp) *ir.Value { return self.op.getResult(0).?; } pub fn getLhs(self: SubOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getRhs(self: SubOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getSize(self: SubOp) GPRSize { if (self.op.getAttr("size")) |attr| { return getGPRSizeValue(attr) orelse .x; } return .x; } }; pub const MulOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "mul", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !MulOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const MulOp) *ir.Value { return self.op.getResult(0).?; } }; pub const SDivOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "sdiv", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !SDivOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const SDivOp) *ir.Value { return self.op.getResult(0).?; } }; pub const UDivOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "udiv", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !UDivOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const UDivOp) *ir.Value { return self.op.getResult(0).?; } }; pub const CmpOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "cmp", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, size: GPRSize) !CmpOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } }; pub const CSetOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "cset", .required_attrs = &.{ "cond", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, cond: Condition, size: GPRSize) !CSetOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("cond", try getConditionAttr(ctx, cond)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const CSetOp) *ir.Value { return self.op.getResult(0).?; } pub fn getCondition(self: CSetOp) Condition { if (self.op.getAttr("cond")) |attr| { return getConditionValue(attr) orelse .al; } return .al; } }; pub const CSelOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "csel", .required_attrs = &.{ "cond", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, rn: *ir.Value, rm: *ir.Value, cond: Condition, size: GPRSize) !CSelOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ rn, rm }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("cond", try getConditionAttr(ctx, cond)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const CSelOp) *ir.Value { return self.op.getResult(0).?; } pub fn getRn(self: CSelOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getRm(self: CSelOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getCondition(self: CSelOp) Condition { if (self.op.getAttr("cond")) |attr| { return getConditionValue(attr) orelse .al; } return .al; } }; pub const FAddOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fadd", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, ftype: encoding.FP2Source.FPType) !FAddOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FAddOp) *ir.Value { return self.op.getResult(0).?; } }; pub const FSubOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fsub", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, ftype: encoding.FP2Source.FPType) !FSubOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FSubOp) *ir.Value { return self.op.getResult(0).?; } }; pub const FMulOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fmul", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, ftype: encoding.FP2Source.FPType) !FMulOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FMulOp) *ir.Value { return self.op.getResult(0).?; } }; pub const FDivOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fdiv", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, ftype: encoding.FP2Source.FPType) !FDivOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FDivOp) *ir.Value { return self.op.getResult(0).?; } }; pub const FCmpOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fcmp", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, lhs: *ir.Value, rhs: *ir.Value, ftype: encoding.FP2Source.FPType) !FCmpOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ lhs, rhs }); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } }; pub const FMovImmOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fmov_imm", .required_attrs = &.{ "ftype", "imm8" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, imm8: u8, ftype: encoding.FP2Source.FPType) !FMovImmOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const imm_payload = [_]u8{imm8}; try op.setAttr("imm8", try ctx.getDialectAttr(attr_names.imm8, &imm_payload)); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FMovImmOp) *ir.Value { return self.op.getResult(0).?; } pub fn getImm8(self: *const FMovImmOp) u8 { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "imm8")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return dialect_attr.payload[0]; } } return 0; } }; pub const FMovFromGPROp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fmov_gpr", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FMovFromGPROp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FMovFromGPROp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FMovFromGPROp) *ir.Value { return self.op.getOperand(0).?; } }; pub const FMovFromFPROp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fmov_fpr", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FMovFromFPROp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FMovFromFPROp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FMovFromFPROp) *ir.Value { return self.op.getOperand(0).?; } }; pub const FMovOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fmov", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FMovOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FMovOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FMovOp) *ir.Value { return self.op.getOperand(0).?; } pub fn getFType(self: FMovOp) encoding.FP2Source.FPType { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "ftype")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return @fromBackingInt(@intCast(dialect_attr.payload[0])); } } return .single; } }; pub const FSqrtOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fsqrt", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FSqrtOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FSqrtOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FSqrtOp) *ir.Value { return self.op.getOperand(0).?; } }; pub const FNegOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fneg", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FNegOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FNegOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FNegOp) *ir.Value { return self.op.getOperand(0).?; } }; pub const FAbsOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "fabs", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, ftype: encoding.FP2Source.FPType) !FAbsOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const FAbsOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const FAbsOp) *ir.Value { return self.op.getOperand(0).?; } }; pub const LdrOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "ldr", .required_attrs = &.{ "offset", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, base: *ir.Value, offset: u12, size: GPRSize) !LdrOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{base}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("offset", try getImm12Attr(ctx, offset)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const LdrOp) *ir.Value { return self.op.getResult(0).?; } pub fn getBase(self: LdrOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getOffset(self: LdrOp) u12 { if (self.op.getAttr("offset")) |attr| { return getImm12Value(attr) orelse 0; } return 0; } }; pub const StrOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "str", .required_attrs = &.{ "offset", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, value: *ir.Value, base: *ir.Value, offset: u12, size: GPRSize) !StrOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ value, base }); const op = try builder.create(state); try op.setAttr("offset", try getImm12Attr(ctx, offset)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getValue(self: StrOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getBase(self: StrOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getOffset(self: StrOp) u12 { if (self.op.getAttr("offset")) |attr| { return getImm12Value(attr) orelse 0; } return 0; } }; pub const BOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "b" }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, target: *ir.Block) !BOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addSuccessors(&.{target}); const op = try builder.create(state); return .{ .op = op }; } pub fn getTarget(self: BOp) *ir.Block { return self.op.getSuccessor(0).?; } }; pub const BCondOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "b_cond", .required_attrs = &.{"cond"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, cond: Condition, true_target: *ir.Block, false_target: *ir.Block) !BCondOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addSuccessors(&.{ true_target, false_target }); const op = try builder.create(state); try op.setAttr("cond", try getConditionAttr(ctx, cond)); return .{ .op = op }; } pub fn getCondition(self: BCondOp) Condition { if (self.op.getAttr("cond")) |attr| { return getConditionValue(attr) orelse .al; } return .al; } pub fn getTrueTarget(self: BCondOp) *ir.Block { return self.op.getSuccessor(0).?; } pub fn getFalseTarget(self: BCondOp) *ir.Block { return self.op.getSuccessor(1).?; } }; pub const RetOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "ret" }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location) !RetOp { var builder = ir.OperationBuilder.init(ctx); const state = op_specs.state(@This(), loc); const op = try builder.create(state); return .{ .op = op }; } }; pub const BlOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "bl", .required_attrs = &.{"callee"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, callee: []const u8, args: []const *ir.Value, result_types: []const ir.Type) !BlOp { var builder = ir.OperationBuilder.init(ctx); var state = op_specs.state(@This(), loc); state.addOperands(args); state.addTypes(result_types); const op = try builder.create(state); const name_attr = try ctx.getDialectAttr("choir.string", callee); try op.setAttr("callee", name_attr); return .{ .op = op }; } }; pub const PrologueOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "prologue", .required_attrs = &.{"frame_size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, frame_size: i32) !PrologueOp { try loadSpec(ctx); var builder = ir.OperationBuilder.init(ctx); const state = op_specs.state(@This(), loc); const op = try builder.create(state); try op.setAttr("frame_size", try getFrameOffsetAttr(ctx, frame_size)); return .{ .op = op }; } pub fn getFrameSize(self: PrologueOp) i32 { if (self.op.getAttr("frame_size")) |attr| { return getFrameOffsetValue(attr) orelse 0; } return 0; } }; pub const EpilogueOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "epilogue", .required_attrs = &.{"frame_size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, frame_size: i32) !EpilogueOp { var builder = ir.OperationBuilder.init(ctx); const state = op_specs.state(@This(), loc); const op = try builder.create(state); try op.setAttr("frame_size", try getFrameOffsetAttr(ctx, frame_size)); return .{ .op = op }; } pub fn getFrameSize(self: EpilogueOp) i32 { if (self.op.getAttr("frame_size")) |attr| { return getFrameOffsetValue(attr) orelse 0; } return 0; } }; pub const MovOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "mov", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, size: GPRSize) !MovOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const MovOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: MovOp) *ir.Value { return self.op.operands.items[0].value; } }; pub const MovzOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "movz", .required_attrs = &.{ "imm", "shift", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, imm: u16, shift: u2, size: GPRSize) !MovzOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{gpr_type}); const op = try builder.create(state); var buf: [8]u8 = undefined; const imm_payload = try ir.format.intPayload(buf[0..], imm); try op.setAttr("imm", try ctx.getDialectAttr(attr_names.imm16, imm_payload)); const shift_payload = [_]u8{shift}; try op.setAttr("shift", try ctx.getDialectAttr("aarch64.shift", &shift_payload)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const MovzOp) *ir.Value { return self.op.getResult(0).?; } }; pub const MovnOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "movn", .required_attrs = &.{ "imm", "shift", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, imm: u16, shift: u2, size: GPRSize) !MovnOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addTypes(&.{gpr_type}); const op = try builder.create(state); var buf: [8]u8 = undefined; const imm_payload = try ir.format.intPayload(buf[0..], imm); try op.setAttr("imm", try ctx.getDialectAttr(attr_names.imm16, imm_payload)); const shift_payload = [_]u8{shift}; try op.setAttr("shift", try ctx.getDialectAttr("aarch64.shift", &shift_payload)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const MovnOp) *ir.Value { return self.op.getResult(0).?; } }; pub const MovkOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "movk", .required_attrs = &.{ "imm", "shift", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, imm: u16, shift: u2, size: GPRSize) !MovkOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); var buf: [8]u8 = undefined; const imm_payload = try ir.format.intPayload(buf[0..], imm); try op.setAttr("imm", try ctx.getDialectAttr(attr_names.imm16, imm_payload)); const shift_payload = [_]u8{shift}; try op.setAttr("shift", try ctx.getDialectAttr("aarch64.shift", &shift_payload)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const MovkOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: *const MovkOp) *ir.Value { return self.op.getOperand(0).?; } }; pub const CopyToRegOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "copy_to_reg", .required_attrs = &.{ "dest_reg", "size" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, dest_reg: u8, size: GPRSize) !CopyToRegOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{gpr_type}); const op = try builder.create(state); const reg_payload = [_]u8{dest_reg}; try op.setAttr("dest_reg", try ctx.getDialectAttr("aarch64.reg_num", ®_payload)); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const CopyToRegOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: CopyToRegOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getDestReg(self: CopyToRegOp) u8 { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "dest_reg")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return dialect_attr.payload[0]; } } return 0; } pub fn getSize(self: CopyToRegOp) GPRSize { if (self.op.getAttr("size")) |attr| { return getGPRSizeValue(attr) orelse .x; } return .x; } }; pub const CopyToSameRegAsOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "copy_to_same_reg", .required_attrs = &.{"size"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, target_ref: *ir.Value, size: GPRSize) !CopyToSameRegAsOp { var builder = ir.OperationBuilder.init(ctx); const gpr_type = try getGPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ src, target_ref }); state.addTypes(&.{gpr_type}); const op = try builder.create(state); try op.setAttr("size", try getGPRSizeAttr(ctx, size)); return .{ .op = op }; } pub fn getResult(self: *const CopyToSameRegAsOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: CopyToSameRegAsOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getTargetRef(self: CopyToSameRegAsOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getSize(self: CopyToSameRegAsOp) GPRSize { if (self.op.getAttr("size")) |attr| { return getGPRSizeValue(attr) orelse .x; } return .x; } }; pub const CopyToSameFPRegAsOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "copy_to_same_fpreg", .required_attrs = &.{"ftype"}, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, target_ref: *ir.Value, ftype: encoding.FP2Source.FPType) !CopyToSameFPRegAsOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{ src, target_ref }); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const CopyToSameFPRegAsOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: CopyToSameFPRegAsOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getTargetRef(self: CopyToSameFPRegAsOp) *ir.Value { return self.op.operands.items[1].value; } pub fn getFType(self: CopyToSameFPRegAsOp) encoding.FP2Source.FPType { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "ftype")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return @fromBackingInt(@intCast(dialect_attr.payload[0])); } } return .single; } }; pub const CopyToFPRegOp = struct { op: *ir.Operation, pub const operation_spec = op_specs.define(.{ .mnemonic = "copy_to_fpreg", .required_attrs = &.{ "dest_reg", "ftype" }, }); pub const operation_name = operation_spec.name; pub fn create(ctx: *ir.Context, loc: ir.Location, src: *ir.Value, dest_reg: u8, ftype: encoding.FP2Source.FPType) !CopyToFPRegOp { var builder = ir.OperationBuilder.init(ctx); const fpr_type = try getFPRType(ctx); var state = op_specs.state(@This(), loc); state.addOperands(&.{src}); state.addTypes(&.{fpr_type}); const op = try builder.create(state); const reg_payload = [_]u8{dest_reg}; try op.setAttr("dest_reg", try ctx.getDialectAttr("aarch64.fpreg_num", ®_payload)); const type_payload = [_]u8{@backingInt(ftype)}; try op.setAttr("ftype", try ctx.getDialectAttr(attr_names.fp_type, &type_payload)); return .{ .op = op }; } pub fn getResult(self: *const CopyToFPRegOp) *ir.Value { return self.op.getResult(0).?; } pub fn getSrc(self: CopyToFPRegOp) *ir.Value { return self.op.operands.items[0].value; } pub fn getDestReg(self: CopyToFPRegOp) u8 { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "dest_reg")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return dialect_attr.payload[0]; } } return 0; } pub fn getFType(self: CopyToFPRegOp) encoding.FP2Source.FPType { if (self.op.getAttrAs(ir.Attribute.DialectAttr, "ftype")) |dialect_attr| { if (dialect_attr.payload.len > 0) { return @fromBackingInt(@intCast(dialect_attr.payload[0])); } } return .single; } }; fn loadSpec(ctx: *ir.Context) !void { try ir.dialects.loadDialectSpec(ctx, spec); } pub fn getGPRType(ctx: *ir.Context) !ir.Type { try loadSpec(ctx); return ctx.getDialectTypeFromName(type_names.gpr); } pub fn getFPRType(ctx: *ir.Context) !ir.Type { try loadSpec(ctx); return ctx.getDialectTypeFromName(type_names.fpr); } pub fn getGPRAttr(ctx: *ir.Context, reg: GPR) !ir.Attribute { var buf: [4]u8 = undefined; const payload = try ir.format.intPayload(buf[0..], @backingInt(reg)); return ctx.getDialectAttr(attr_names.gpr_reg, payload); } pub fn getGPRValue(attr: ir.Attribute) ?GPR { if (!std.mem.eql(u8, attr.abstract.name, attr_names.gpr_reg)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; const val = std.fmt.parseInt(u5, dialect_attr.payload, 10) catch return null; return @fromBackingInt(@intCast(val)); } pub fn getFPRAttr(ctx: *ir.Context, reg: FPR) !ir.Attribute { var buf: [4]u8 = undefined; const payload = try ir.format.intPayload(buf[0..], @backingInt(reg)); return ctx.getDialectAttr(attr_names.fpr_reg, payload); } pub fn getFPRValue(attr: ir.Attribute) ?FPR { if (!std.mem.eql(u8, attr.abstract.name, attr_names.fpr_reg)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; const val = std.fmt.parseInt(u5, dialect_attr.payload, 10) catch return null; return @fromBackingInt(@intCast(val)); } pub fn getImm12Attr(ctx: *ir.Context, value: u12) !ir.Attribute { var buf: [8]u8 = undefined; const payload = try ir.format.intPayload(buf[0..], value); return ctx.getDialectAttr(attr_names.imm12, payload); } pub fn getImm12Value(attr: ir.Attribute) ?u12 { if (!std.mem.eql(u8, attr.abstract.name, attr_names.imm12)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; return std.fmt.parseInt(u12, dialect_attr.payload, 10) catch null; } pub fn getConditionAttr(ctx: *ir.Context, cond: Condition) !ir.Attribute { var buf: [4]u8 = undefined; const payload = try ir.format.intPayload(buf[0..], @backingInt(cond)); return ctx.getDialectAttr(attr_names.condition, payload); } pub fn getConditionValue(attr: ir.Attribute) ?Condition { if (!std.mem.eql(u8, attr.abstract.name, attr_names.condition)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; const val = std.fmt.parseInt(u4, dialect_attr.payload, 10) catch return null; return @fromBackingInt(@intCast(val)); } pub fn getGPRSizeAttr(ctx: *ir.Context, size: GPRSize) !ir.Attribute { const payload = [_]u8{@backingInt(size)}; return ctx.getDialectAttr(attr_names.gpr_size, &payload); } pub fn getGPRSizeValue(attr: ir.Attribute) ?GPRSize { if (!std.mem.eql(u8, attr.abstract.name, attr_names.gpr_size)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; if (dialect_attr.payload.len != 1) return null; return @fromBackingInt(@intCast(dialect_attr.payload[0])); } pub fn getFrameOffsetAttr(ctx: *ir.Context, offset: i32) !ir.Attribute { var buf: [16]u8 = undefined; const payload = try ir.format.intPayload(buf[0..], offset); return ctx.getDialectAttr(attr_names.frame_offset, payload); } pub fn getFrameOffsetValue(attr: ir.Attribute) ?i32 { if (!std.mem.eql(u8, attr.abstract.name, attr_names.frame_offset)) return null; const dialect_attr = attr.cast(ir.Attribute.DialectAttr) orelse return null; return std.fmt.parseInt(i32, dialect_attr.payload, 10) catch null; }};Also reachable as
Complete caller list for dialects.AArch64Dialect.getFPRType
13 direct callers.
tiny.choir.dialects.AArch64Dialect.CopyToFPRegOp.create[function] atlib/choir/src/dialects/aarch64.zig:1234tiny.choir.dialects.AArch64Dialect.CopyToSameFPRegAsOp.create[function] atlib/choir/src/dialects/aarch64.zig:1190tiny.choir.dialects.AArch64Dialect.FAbsOp.create[function] atlib/choir/src/dialects/aarch64.zig:726tiny.choir.dialects.AArch64Dialect.FAddOp.create[function] atlib/choir/src/dialects/aarch64.zig:396tiny.choir.dialects.AArch64Dialect.FDivOp.create[function] atlib/choir/src/dialects/aarch64.zig:477tiny.choir.dialects.AArch64Dialect.FMovFromGPROp.create[function] atlib/choir/src/dialects/aarch64.zig:562tiny.choir.dialects.AArch64Dialect.FMovImmOp.create[function] atlib/choir/src/dialects/aarch64.zig:525tiny.choir.dialects.AArch64Dialect.FMovOp.create[function] atlib/choir/src/dialects/aarch64.zig:624tiny.choir.dialects.AArch64Dialect.FMulOp.create[function] atlib/choir/src/dialects/aarch64.zig:450tiny.choir.dialects.AArch64Dialect.FNegOp.create[function] atlib/choir/src/dialects/aarch64.zig:695tiny.choir.dialects.AArch64Dialect.FSqrtOp.create[function] atlib/choir/src/dialects/aarch64.zig:664tiny.choir.dialects.AArch64Dialect.FSubOp.create[function] atlib/choir/src/dialects/aarch64.zig:423tiny.choir.dialects.AArch64Dialect.GetRegOp.createFPR[function] atlib/choir/src/dialects/aarch64.zig:57
Complete caller list for dialects.AArch64Dialect.getGPRSizeAttr
17 direct callers.
tiny.choir.dialects.AArch64Dialect.AddImmOp.create[function] atlib/choir/src/dialects/aarch64.zig:137tiny.choir.dialects.AArch64Dialect.AddOp.create[function] atlib/choir/src/dialects/aarch64.zig:96tiny.choir.dialects.AArch64Dialect.CSelOp.create[function] atlib/choir/src/dialects/aarch64.zig:354tiny.choir.dialects.AArch64Dialect.CSetOp.create[function] atlib/choir/src/dialects/aarch64.zig:321tiny.choir.dialects.AArch64Dialect.CmpOp.create[function] atlib/choir/src/dialects/aarch64.zig:301tiny.choir.dialects.AArch64Dialect.CopyToRegOp.create[function] atlib/choir/src/dialects/aarch64.zig:1101tiny.choir.dialects.AArch64Dialect.CopyToSameRegAsOp.create[function] atlib/choir/src/dialects/aarch64.zig:1149tiny.choir.dialects.AArch64Dialect.LdrOp.create[function] atlib/choir/src/dialects/aarch64.zig:757tiny.choir.dialects.AArch64Dialect.MovOp.create[function] atlib/choir/src/dialects/aarch64.zig:976tiny.choir.dialects.AArch64Dialect.MovkOp.create[function] atlib/choir/src/dialects/aarch64.zig:1066tiny.choir.dialects.AArch64Dialect.MovnOp.create[function] atlib/choir/src/dialects/aarch64.zig:1036tiny.choir.dialects.AArch64Dialect.MovzOp.create[function] atlib/choir/src/dialects/aarch64.zig:1006tiny.choir.dialects.AArch64Dialect.MulOp.create[function] atlib/choir/src/dialects/aarch64.zig:223tiny.choir.dialects.AArch64Dialect.SDivOp.create[function] atlib/choir/src/dialects/aarch64.zig:249tiny.choir.dialects.AArch64Dialect.StrOp.create[function] atlib/choir/src/dialects/aarch64.zig:795tiny.choir.dialects.AArch64Dialect.SubOp.create[function] atlib/choir/src/dialects/aarch64.zig:182tiny.choir.dialects.AArch64Dialect.UDivOp.create[function] atlib/choir/src/dialects/aarch64.zig:275
Complete caller list for dialects.AArch64Dialect.getGPRType
17 direct callers.
tiny.choir.dialects.AArch64Dialect.AddImmOp.create[function] atlib/choir/src/dialects/aarch64.zig:137tiny.choir.dialects.AArch64Dialect.AddOp.create[function] atlib/choir/src/dialects/aarch64.zig:96tiny.choir.dialects.AArch64Dialect.CSelOp.create[function] atlib/choir/src/dialects/aarch64.zig:354tiny.choir.dialects.AArch64Dialect.CSetOp.create[function] atlib/choir/src/dialects/aarch64.zig:321tiny.choir.dialects.AArch64Dialect.CopyToRegOp.create[function] atlib/choir/src/dialects/aarch64.zig:1101tiny.choir.dialects.AArch64Dialect.CopyToSameRegAsOp.create[function] atlib/choir/src/dialects/aarch64.zig:1149tiny.choir.dialects.AArch64Dialect.FMovFromFPROp.create[function] atlib/choir/src/dialects/aarch64.zig:593tiny.choir.dialects.AArch64Dialect.GetRegOp.createGPR[function] atlib/choir/src/dialects/aarch64.zig:46tiny.choir.dialects.AArch64Dialect.LdrOp.create[function] atlib/choir/src/dialects/aarch64.zig:757tiny.choir.dialects.AArch64Dialect.MovOp.create[function] atlib/choir/src/dialects/aarch64.zig:976tiny.choir.dialects.AArch64Dialect.MovkOp.create[function] atlib/choir/src/dialects/aarch64.zig:1066tiny.choir.dialects.AArch64Dialect.MovnOp.create[function] atlib/choir/src/dialects/aarch64.zig:1036tiny.choir.dialects.AArch64Dialect.MovzOp.create[function] atlib/choir/src/dialects/aarch64.zig:1006tiny.choir.dialects.AArch64Dialect.MulOp.create[function] atlib/choir/src/dialects/aarch64.zig:223tiny.choir.dialects.AArch64Dialect.SDivOp.create[function] atlib/choir/src/dialects/aarch64.zig:249tiny.choir.dialects.AArch64Dialect.SubOp.create[function] atlib/choir/src/dialects/aarch64.zig:182tiny.choir.dialects.AArch64Dialect.UDivOp.create[function] atlib/choir/src/dialects/aarch64.zig:275
Audit
| Definitions | 247 |
|---|---|
| Public names | 494 |
| Members | 38 |
| Version | 26.7.0 |
| Revision | daab053ee433 |