google / google/jsir

Define a simplified assembly format

Open
#35 0 comments 1 reaction 1 assignee Assigned to @Copilot View on GitHub
enhancement help wanted
Dominant language
C++
Stars
664
Forks
30
Avg merge
4d 9h
Merged PRs (30d)
11

Description

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

```mlir
"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:

```mlir
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](https://mlir.llvm.org/docs/DefiningDialects/Operations/#declarative-assembly-format) should be declared in [jsir_ops.generated.td](https://github.com/google/jsir/blob/main/maldoca/js/ir/jsir_ops.generated.td) and [jsir_ops.td](https://github.com/google/jsir/blob/main/maldoca/js/ir/jsir_ops.td). jsir_ops.generated.td is generated by [astgen](https://github.com/google/jsir/tree/main/maldoca/astgen).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.