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. Thus, experimental validation is an essential part of discovering techniques that genuinely improve run-time performance. Our experience suggests that an effective transition from research idea to commercial implementation requires good ideas, mutual interest, and a mechanism for transmitting the detailed technical knowledge required for implementation.