Skip to content

Lower operation assembly formats through a shared intermediate representation #160

Description

@jonathanvdc

Problem

Operation assembly-format handling is spread across multiple emitters. TryParseEmitter, BuildCustomAssemblySyntaxEmitter, and EmitterHelpers.AppendBodySyntaxFields each switch over the same assembly-format element kinds and duplicate pieces of directive semantics.

The generator should lower operation assembly formats once into a reusable intermediate representation, then emit parse/build/write code mechanically from that lowered form.

Current Hotspots

  • src/MLIR.Generators/Emitters/AssemblyFormat/TryParseEmitter.cs
  • src/MLIR.Generators/Emitters/AssemblyFormat/BuildCustomAssemblySyntaxEmitter.cs
  • src/MLIR.Generators/Emitters/Common/EmitterHelpers.cs: AppendBodySyntaxFields
  • src/MLIR.Generators/Emitters/Common/AssemblyFormatTraversal.cs
  • src/MLIR.Generators/Emitters/Operations/OperationBodySyntaxEmitter.cs

Proposed Direction

Create a lowering layer that maps ODS assembly-format elements to a shared representation, for example:

public sealed class LoweredFormatElement
{
    public IReadOnlyList<BodySyntaxField> Fields { get; }
    public CodeTemplate Parse { get; }
    public CodeTemplate Build { get; }
    public CodeTemplate Write { get; }
    public CodeTemplate? PresenceCondition { get; }
}

The lowering layer should own directive semantics for literals, variables, attr-dict, prop-dict, regions, operands, successors, type, qualified, results, functional-type, optional groups, and oilists.

Acceptance Criteria

  • Assembly-format directive handling is centralized in one lowering layer.
  • TryParseEmitter and BuildCustomAssemblySyntaxEmitter no longer independently switch over every directive kind.
  • Body syntax field generation consumes the same lowered representation as parse/build emission.
  • Unsupported directives are identified during lowering with clear fallback behavior or diagnostics.
  • Existing generated operation custom assembly parse/build behavior remains stable.

Suggested Tests

  • Generator tests for each supported directive kind.
  • Optional group tests with literal, operand, attribute, unit attribute, and region anchors.
  • Oilist tests with multiple clauses and repeated-clause rejection.
  • Fallback test for an unsupported directive.

Notes

This is the operation-side equivalent of unifying attr/type assembly-format emission. It should make later removal of ad hoc directive hacks much easier.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions