Converting Intermediate Code to Assembly Code Using Declarative
Writing an optimizing back end is expensive, in part because it
mastery of both a target machine and a compiler's internals.
We separate these concerns by isolating target-machine
knowledge in declarative machine descriptions.
We then analyze these descriptions to automatically
components of the back end.
In this work, we
generate a recognizer;
this component, which identifies register transfers
that correspond to target-machine instructions, plays a key role
in instruction selection
in such compilers as vpo, gcc and Quick C--.
We present analyses and transformations that address the major challenge in generating
accounting for compile-time abstractions not present in a machine
description, including variables, pseudo-registers, stack
slots, and labels.
The paper is available as
US Letter PostScript (205K),
US Letter PDF (117K),
US Letter TeX DVI (70K).