This project consists of three sections. The first is the examination of algorithms which integrate code ordering and register allocation.. In this, expressions are translated into interlock-free code using the minimum number of registers possible. Next, probabilistic techniques will be used to handle global register allocation. And, the role of call frequency analysis and specialization in reducing call overhead will be studied.