Reprinted from the Proceedings of the GCC Developers’ Summit June 17th–19th, 2008 Ottawa, Ontario Canada Conference Organizers Andrew J. Hutton, Steamballoon, Inc., Linux Symposium, Thin Lines Mountaineering C. Craig Ross, Linux Symposium Review Committee Andrew J. Hutton, Steamballoon, Inc., Linux Symposium, Thin Lines Mountaineering Ben Elliston, IBM Janis Johnson, IBM Mark Mitchell, CodeSourcery Toshi Morita Diego Novillo, Google Gerald Pfeifer, Novell Ian Lance Taylor, Google C. Craig Ross, Linux Symposium Proceedings Formatting Team John W. Lockhart, Red Hat, Inc. Authors retain copyright to all submitted papers, but have granted unlimited redistribution rights to all as a condition of submission. A Superoptimizer Analysis of Multiway Branch Code Generation Roger Anthony Sayle OpenEye Scientific Software
[email protected] Abstract Over the last 25 years, microprocessor architecture has advanced considerably, the cycle penalties of memory The high level of abstraction of the multi-way branch, latency and branch misprediction have changed, and exemplified by C/C++’s switch statement, Pascal/Ada’s several novel implementations have been proposed. case, and FORTRAN’s computed GOTO and SELECT, allows an optimizing compiler a large degree of free- 2 Definitions dom in its implementation. Typically compilers gener- ate code selected from a few common patterns, such as A switch statement (or multiway branch) is a con- jump tables and/or trees of conditional branches. How- struct found in most high-level languages for selecting ever, for most switch statements there exists a vast num- from one of several possible blocks of code or branch ber of possible implementations. destinations depending on the value of an index expres- To assess the relative merits of these alternatives, and sion.