A Modern Look at GRIN, an Optimizing Functional Language Back End

Keywords: compiler, intermediate representation, whole program optimization, data-flow analysis, interprocedural analysis, dead code elimination, grin, llvm


GRIN is short for Graph Reduction Intermediate Notation, a modern back end for lazy functional languages. Most of the currently available compilers for such languages share a common flaw: they can only optimize programs on a per-module basis. The GRIN framework allows for interprocedural whole program analysis, enabling optimizing code transformations across functions and modules as well.

Some implementations of GRIN already exist, but most of them were developed only for experimentation purposes. Thus, they either compromise on low-level efficiency or contain ad hoc modifications compared to the original specification.

Our goal is to provide a full-fledged implementation of GRIN by combining the currently available best technologies like LLVM, and evaluate the framework's effectiveness by measuring how the optimizer improves the performance of certain programs. We also present some improvements to the already existing components of the framework. Some of these improvements include a typed representation for the intermediate language and an interprocedural program optimization, the dead data elimination.


Download data is not yet available.
How to Cite
Podlovics, P., Hruska, C., & Pénzes, A. (2021). A Modern Look at GRIN, an Optimizing Functional Language Back End. Acta Cybernetica, 25(4), 847-876. https://doi.org/10.14232/actacyb.282969