Skip to content

Define a simplified assembly format #35

Description

@phisiart

Currently when we mlir::debugPrint JSIR, we get the default format, which is pretty verbose:

"jsir.file"() <{comments = []}> ({
  "jsir.program"() <{source_type = "script"}> ({
    %0 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any
    "jshir.if_statement"(%0) ({
      %2 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any
      "jsir.expression_statement"(%2) : (!jsir.any) -> ()
    }, {
    }) : (!jsir.any) -> ()
    %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any
    "jshir.if_statement"(%1) ({
      "jshir.block_statement"() ({
        %2 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any
        "jsir.expression_statement"(%2) : (!jsir.any) -> ()
      }, {
      ^bb0:
      }) : () -> ()
    }, {
      %2 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any
      "jsir.expression_statement"(%2) : (!jsir.any) -> ()
    }) : (!jsir.any) -> ()
  }, {
  ^bb0:
  }) : () -> ()
}) : () -> ()

We should provide a custom, simplified assembly format, like this:

jsir.file {
  jsir.program {source_type = "script"} {
    %0 = jsir.identifier {name = "a"}
    jshir.if_statement(%0) ({
      %2 = jsir.identifier {name = "b"}
      jsir.expression_statement(%2)
    }, {
    })
    %1 = jsir.identifier{name = "a"}
    jshir.if_statement(%1) ({
      jshir.block_statement() ({
        %2 = jsir.identifier {name = "b"}
        jsir.expression_statement(%2)
      }, {
      ^bb0:
      })
    }, {
      %2 = jsir.identifier {name = "c"}
      jsir.expression_statement(%2)
    })
  }, {
  ^bb0:
  })
})

Note: Since JSIR currently doesn't support TypeScript, every expression has the type jsir.any and doesn't have to be spelled out explicitly.

The custom assemblyFormat should be declared in jsir_ops.generated.td and jsir_ops.td. jsir_ops.generated.td is generated by astgen.

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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requesthelp wantedExtra attention is needed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions