Dynamic compilation enables optimizations based on the values of invar
iant data computed at run-time. Using the values of these runtime cons
tants, a dynamic compiler can eliminate their memory loads, perform co
nstant propagation and folding, remove branches they determine, and fu
lly unroll loops they bound. However, the performance benefits of the
more efficient, dynamically-compiled code are offset by the run-time c
ost of the dynamic compile. Our approach to dynamic compilation strive
s for both fast dynamic compilation and high-quality dynamically-compi
led code: the programmer annotates regions of the programs that should
be compiled dynamically; a static, optimizing compiler automatically
produces pre-optimized machine-code templates, using a pair of dataflo
w analyses that identify which variables will be constant at run-time;
and a simple, dynamic compiler copies the templates, patching in the
computed values of the run-time constants, to produce optimized, execu
table code. Our work targets general purpose, imperative programming l
anguages, initially C. Initial experiments applying dynamic compilatio
n to C programs have produced speedups ranging from 1.2 to 1.8.