Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Define a simplified assembly format #35

@phisiart

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.

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