It is believed that there are two major challenges in the overall success of multi-threaded architectures: (1) Building multi-threaded systems with off-the-shelf components and, (2) Providing effective programming language and compiler support for common imperative languages (like C and Fortran). At the University of Delaware Gao's research group has successfully built a multi-threaded machine from off-the-shelf components. The remaining challenge is to demonstrate successful use of imperative languages for such architectures. This project proposes to investigate whether aggressive interprocedural analysis and transformations, combined with accurate alias analysis, can be applied to irregular applications coded in imperative languages for compilation and efficient execution on multi-threaded systems. Novel analysis, transformation and code generation techniques are being developed to examine the strengths (and weaknesses) of using imperative languages for multi-threaded systems. The major challenge in generating code is partitioning the sequential code into strands, such that the code for each strand can be executed without requiring any remote memory references. Before strand partitioning, interprocedural code motion and loop transformations will be used to reduce the frequency of off-processor references and enable better strand partitioning. Developing new analyses for these transformations, which take into account the possibility of aliasing and the cost functions for multi-threaded architectures is one of the main focus of this project. Also, since registers are not reallocated during a context switch in these systems, new inter-strand register allocation techniques are also being developed.