Interprocedural data flow analyses of executable programs suffer from the conservative assumptions that need to be made because no precise control flow graph is available and because registers are spilled onto the stack. This paper discusses the exploitation of calling-conventions in executable code data flow analyses to avoid the propagation of the conservative assumptions throughout a program. Based on this exploitation, the existing backward liveness analyses are improved, and a complementary forward liveness analysis is proposed. For the SPECint2000 programs compiled for the Alpha architecture, the combined forward and improved backward analysis on average finds 62% more free registers than the existing state-of-the-art liveness analysis. With the improved analysis, we are able to show that on an average less than half of the registers of the RISC Alpha architecture are used. This contradicts the common wisdom that compilers can exploit large, uniform register files as found on RISC architectures. © 2006 Elsevier B.V. All rights reserved.
De Sutter, B., De Bus, B., & De Bosschere, K. (2006). Bidirectional liveness analysis, or how less than half of the Alpha’s registers are used. Journal of Systems Architecture, 52(10), 535–548. https://doi.org/10.1016/j.sysarc.2006.03.001