We believe that algorithm development and experimentation are integral parts of developing better compiler technology. The first step in most of our investigations is to examine the output of the compiler and to understand what improvement is possible. This usually leads to a protracted cycle of refinement, reimplementation, and experimentation. We tend to recommend a technique only when we would be happy to buy a compiler that used it.
Experimentation is critical to our work.
Many of the interesting problems in compilation are, in essence, resource allocation problems. Compilers are, in general, constrained to using polynomial-time algorithms. This has two key consequences. First, compilers cannot afford to discover guaranteed optimal solutions to these problems. Second, ideas that look good at the blackboard often fall apart in practice.