Basic Block Versioning (BBV) is a compilation technique for optimizing program execution. It consists in duplicating and specializing basic blocks of code according to the execution contexts of the blocks, up to a version limit. BBV has been used in Just-In-Time (JIT) compilers for reducing the dynamic type checks of dynamic languages. Our work revisits the BBV technique to adapt it to Ahead-of-Time (AOT) compilation. This Static BBV (SBBV) raises new challenges, most importantly how to ensure the convergence of the algorithm when the specializations of the basic blocks are not based on profiled variable values and how to select the good specialization contexts. SBBV opens new opportunities for more precise optimizations as the compiler can explore multiple versions and only keep those within the version limit that yield better generated code.
In this paper, we present the main SBBV algorithm and its use to optimize the dynamic type checks, array bound checks, and mixed-type arithmetic operators often found in dynamic languages. We have implemented SBBV in two AOT compilers for the Scheme programming language that we have used to evaluate the technique’s effectiveness. On a suite of benchmarks, we have observed that even with a low limit of 2 versions, SBBV greatly reduces the number of dynamic type tests (by 54% and 62% on average) and accelerates the execution time (by about 10% on average). Previous work has needed a higher version limit to achieve a similar level of optimization. We also observe a small impact on compilation time and code size (a decrease in some cases).
Mon 16 SepDisplayed time zone: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna change
10:30 - 12:00 | |||
10:30 15mTalk | Static Basic Block Versioning Technical Papers Manuel Serrano Inria; Université Côte d’Azur, Olivier Melançon DIRO, Université de Montréal, Marc Feeley Université de Montréal | ||
10:45 15mTalk | Cross Module Quickening - The Curious Case of C Extensions Technical Papers Felix Berlakovich μCSRL, CODE Research Institute, University of the Bundeswehr Munich, Stefan Brunthaler μCSRL, CODE Research Institute, University of the Bundeswehr Munich | ||
11:00 15mTalk | Compiling with Arrays Technical Papers David Richter Technical University of Darmstadt, Timon Böhler Technical University of Darmstadt, Pascal Weisenburger University of St. Gallen, Mira Mezini TU Darmstadt; hessian.AI; National Research Center for Applied Cybersecurity ATHENE Pre-print | ||
11:15 15mTalk | The Performance Effects of Virtual-Machine Instruction Pointer Updates Technical Papers | ||
11:30 15mTalk | Taking a Closer Look: An Outlier-Driven Approach to Compilation-Time Optimization Technical Papers Florian Huemer JKU Linz, David Leopoldseder Oracle Labs, Aleksandar Prokopec Oracle Labs, Raphael Mosaner JKU Linz, Hanspeter Mössenböck JKU Linz | ||
11:45 15mTalk | Optimizing Layout of Recursive Datatypes with Marmoset Technical Papers Vidush Singhal Purdue University, Chaitanya S. Koparkar Indiana University, Joseph Zullo Purdue University, Artem Pelenitsyn Purdue University, Michael Vollmer University of Kent, Mike Rainey Carnegie Mellon University, Ryan R. Newton Purdue University, Milind Kulkarni Purdue University DOI Pre-print |