| Run-time specialization of programs can potentially improve execution time by exploiting the (semi-) invariance of values. Several research prototypes have been developed that enable the user to apply run-time specialization using annotations in the source code. While they were a great improvement over previous manual systems, in reality their use has been limited because writing annotations that achieve good program speedups is a challenging task for humans, requiring a deep understanding of the program's characteristics and of the applicable run-time optimizations and their effects on the underlying computer architecture.; In this dissertation I show that the major obstacle to the general application of such systems can be eliminated by automating the generation of annotations that drive a dynamic compiler. I demonstrate that a judicious combination of a novel static program analysis with run-time information about the program obtained by value profiling can achieve the same speedups as annotations written by human programmers and in a fraction of the time. I evaluate the concepts developed in this dissertation with a prototype system named Calpa . The prototype comprises algorithms and tools to gather run-time information about programs and static analysis algorithms to generate annotations to drive the DyC compiler, previously developed at the UW.; Moreover, I also show how combining run-time information with static analysis can be useful in other contexts, by demonstrating the benefits of using dynamic pointer information in software engineering and improving the effectiveness of a program slicing tool. |