Results 11 -
12 of
12
Bidirectional liveness analysis, or how less than half of the Alpha’s registers are used
"... 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 ..."
Abstract
- Add to MetaCart
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 stateof-the-art liveness analysis. With the improved analysis, we are able to show that on 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. Key words: data flow analysis, interprocedural, bidirectional, binary code, architecture, register use 1
POST-PASS
"... Seeking to resolve many of the problems related to code size in traditional program development environments. In the Java world, libraries are usually available in a bytecode representation that provides high-level semantic information, such as type information. This information is exploited by Java ..."
Abstract
- Add to MetaCart
Seeking to resolve many of the problems related to code size in traditional program development environments. In the Java world, libraries are usually available in a bytecode representation that provides high-level semantic information, such as type information. This information is exploited by Java application extractors, as discussed in the article “Extracting Library-based Java Applications ” in this section. By contrast, reusable code in the C/C++ world often is only distributed in the form of native machine code in object archives. Therefore, we cannot rely on the same techniques to avoid code reuse overhead in C/C++ programs.

