Julia Introduces UnifiedIR to Merge Parser, Lowering and Optimizer IRs
Julia's compiler team unifies parsing, lowering and optimization under one IR, UnifiedIR, with a shared kind registry and source provenance tracking.
Julia's compiler team has introduced UnifiedIR, a single intermediate representation intended to span parsing (JuliaSyntax), lowering (JuliaLowering), and optimization instead of relying on separate IR formats at each stage. Built as a flat statement table with hybrid regions over a shared AttrGraph storage core, it has zero dependencies and ships with a verifier, printer/parser, reference interpreter, and GC-like compaction via compact_graph!/collect_syntax!.
JuliaSyntax's SyntaxGraph now wraps UnifiedIR.AttrGraph directly, and all components share one namespaced kind registry with statically reserved dialect ids (JuliaSyntax, JuliaLowering, formatter, core). JuliaLowering adds an additive UnifiedBackend that emits structured region-based IR — if/loop/try regions with sealed terminators — instead of traditional goto-linear IR, attaching provenance metadata so diagnostics can trace optimized statements back to exact source locations.
On the compiler side, a package-mode-only inference and optimizer port runs natively on UnifiedIR, validated to match or improve on the stock pipeline's return types, and includes SROA, inlining, ADCE, structurization, and cell-promotion passes. For engineers, this points toward a simplified compiler internals story — one canonical, traceable IR instead of ad hoc conversions between disparate representations — along with new REPL tooling like @code_unified for direct inspection.