The GraalVM Intermediate Representation (IR) is a sophisticated graph structure
that is designed to support implementation of efficient code optimizing transformations
(see graph1 for an example graph).
A side-effect-free expression is represented by a data-flow subgraph that is acyclic (i.e. it is a DAG),
so that common subexpressions are represented by shared subgraphs
(instead of by value numbering in traditional SSA form).
This has the advantage that data-flow dependencies are explicitly represented in the graph [1]}.
Expressions with potentially observable side-effects, such as method invocations or field accesses,
are incorporated into the control-flow graph.
