What makes a good compiler IR? In the context of functional languages, there has been an extensive debate on the advantages and disadvantages of continuation-passing-style (CPS). The consensus seems to be that some form of explicit continuations is necessary to model jumps in a functional style, but that they should have a 2nd-class status, separate from regular functions, to ensure efficient code generation. Building on this observation, a recent study from PLDI 2017 proposed a direct-style IR with explicit join points, which essentially represent continuations that do not return or escape. While the IR works well practically, there still seems to be room for improvements, especially with regard to the complexity of optimization steps.
In this paper, we contribute to the CPS debate by developing a novel IR with the following features. First, we integrate a control operator that behaves like Felleisen’s C, eliminating certain redundant rewrites that would occur in the previous study. Second, we treat the non-returning and non-escaping aspects of continuations separately, allowing efficient compilation of well-behaved functions defined by the user. Third, we define a selective CPS translation of our IR, which erases control operators while preserving the behavior of programs. These features enable optimizations in both direct style and full CPS, as well as in any intermediate style with selectively exposed continuations. Thus, we change the spectrum of available options from “CPS yes or no” to “as much or as little CPS as you want, when you want it”.
Mon 19 Aug
|10:30 - 10:52|
|10:52 - 11:15|
|11:15 - 11:37|
Akimasa MorihataUniversity of Tokyo
|11:37 - 12:00|