Abstract

Many fields of study in compilers give rise to the concept of  a join point — a place where different execution paths come together.   While they have often been treated by representing them as functions or  continuations, we believe it is time to study them in their own right. We show  that adding them to a direct-style functional intermediate language allows new optimizations to be performed, including a functional version of  loop-invariant code motion. Finally, we report on recent work on the Glasgow  Haskell Compiler which added join points to the Core language.