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)
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:
See org.enso.compiler.dump.IRDumper
.