enso/docs/runtime/compiler-ir.md
Pavel Marek f0de43a970
Add org.enso.compiler.dumpIr system prop (#10740)
Working on compiler IR is a daunting task. I have therefore added a new system property `enso.compiler.dumpIr` that will help with that. It dumps the encountered IRs to `ir-dumps` directory in the [GraphViz](www.graphviz.org) format. More info in updated docs.

Note that all the functionality to dump IRs to `dot` files was already implemented. This PR just adds the command line option and updates docs.

# Important Notes
- `--dump-graphs` cmd line option is removed as per [Jaroslav's request](https://github.com/enso-org/enso/pull/10740#pullrequestreview-2216676140).
- To dump graphs, use `-Dgraal.Dump=Truffle:2` system property passed via `JAVA_OPTS` env var.

If you run `env JAVA_OPTS='-Denso.compiler.dumpIr=true' enso --run tmp.enso` where `tmp.enso` is, e.g.:
```
from Standard.Base import all
main = 42
```
You will then have something like:
```
$ ls ir-dumps
Standard.Base.Data.Filter_Condition.dot     Standard.Base.Data.Time.dot              Standard.Base.System.Advanced.dot       Standard.Base.Warning.dot
Standard.Base.Data.Locale.dot               Standard.Base.Enso_Cloud.Enso_File.dot   Standard.Base.System.File.Advanced.dot  tmp.dot
Standard.Base.Data.Numeric.dot              Standard.Base.Errors.dot                 Standard.Base.System.File.dot
Standard.Base.Data.Numeric.Internal.dot     Standard.Base.Network.HTTP.Internal.dot  Standard.Base.System.File.Generic.dot
Standard.Base.Data.Text.Regex.Internal.dot  Standard.Base.Runtime.dot                Standard.Base.System.Internal.dot
```
You can then visualize any of these with `dot -Tsvg -O ir-dumps/tmp.dot`.

An example how that could look like is
![image.svg](https://github.com/user-attachments/assets/26ab8415-72cf-46da-bc63-f475e9fa628e)
2024-08-06 12:00:27 +00:00

1.1 KiB

Enso Compiler IR

Enso IR, currently implemented in Scala, with base class org.enso.compiler.core.IR, is created from the output of the native parser. The IR is an immutable annotated AST subjected to multiple passes. Every pass is a class implementing the org.enso.compiler.pass.IRPass interface.

See Runtime roadmap - static analysis for future goals.

Visualization

The IR can be visualized using -Denso.compiler.dumpIr system property. This will output a .dot file in GraphViz format in the ir-dumps directory for each IR in the program. The dot file format is a minimal textual format, that can be converted to a graphical representation using the dot command from the GraphViz package. For example, on Ubuntu, install dot with sudo apt install graphviz. Then, convert the .dot file to a .svg image with dot -Tsvg -o <output>.svg <input>.dot. An example is: image.svg

See org.enso.compiler.dump.IRDumper.