Profile-driven compiler optimizations take advantage of information
gathered at runtime to re-compile programs into more efficient code.
Such optimizations appear to be more easily incorporated within a
semantics-directed compiler structure than within traditional
compiler structure. We present a case study in which a metacomputation-based
reference compiler for a small imperative language converts easily
into a compiler which performs a particular profile-driven optimization:
local register allocation. Our reference compiler is implemented in the
staged, functional language
MetaML and takes full advantage of the synergy between
metacomputation-style
language definitions and the staging constructs of MetaML. We believe
that the approach to implementing profile-driven optimizations presented
here suggests a useful, formal model for dynamically adaptable
software.