See _(the slide presentation given| http://www.cs.uu.nl/groups/ST/twiki/pub/Ist/ProgramTransformation/IST-PT1.pdf) and _(a recent follow-up paper|http://www.cs.uu.nl/~visser/ftp/Vis03-survey.pdf) by _(Eelco Visser).

From _("A Roadmap to Metacomputation by Supercompilation"
      | http://citeseer.nj.nec.com/uck96roadmap.html):

<table border=1>
  <caption>A taxonomy of transformers.</caption>
<!-- first level header -->
  <tr>
    <th rowspan=2>transformer</th>
    <th rowspan=2>information propagation</th>
    <th rowspan=2>evaluation strategy</th>
  <!----><th colspan=2>control restruct.</th>
    <th rowspan=2>KMP test</th>
    <th rowspan=2>elim struct.</th>
  </tr>
<!-- second level header -->
  <tr><th>variant</th><th>genetic</th></tr>
<!-- row 1 -->
  <tr>
    <td>_(Partial Evaluation) (PE)</td>
    <td>constant</td>
    <td>in-out</td>
    <td>poly</td>
    <td>mono</td>
    <td>-</td>
    <td>-</td>
  </tr>
<!-- row 2 -->
  <tr>
    <td>Deforestation</td>
    <td>constant</td>
    <td>out-in</td>
    <td>poly</td>
    <td>poly</td>
    <td>-</td>
    <td>+</td>
  </tr>
<!-- row 3 -->
  <tr>
    <td>Partial deduction</td>
    <td>unification</td>
    <td>unspecified</td>
    <td>poly</td>
    <td>mono</td>
    <td>+</td>
    <td>-</td>
  </tr>
<!-- row 4 -->
  <tr>
    <td>Positive _(SCP)</td>
    <td>unification</td>
    <td>out-in</td>
    <td>poly</td>
    <td>poly</td>
    <td>+</td>
    <td>+</td>
  </tr>
<!-- row 5 -->
  <tr>
    <td>Perfect _(SCP)</td>
    <td>constraint</td>
    <td>out-in</td>
    <td>poly</td>
    <td>poly</td>
    <td>+</td>
    <td>+</td>
  </tr>
<!-- row 6 -->
  <tr>
    <td>GPC</td>
    <td>constraint</td>
    <td>out-in</td>
    <td>poly</td>
    <td>poly</td>
    <td>+</td>
    <td>+</td>
  </tr>
</table>

<ul>
  <lh>Legenda</lh>
  <li><strong>information propagation</strong>
    <dl>
      <dt>constant propagation:
        </dt><dd>the outcome of tests are ignored;
      </dd><dt>unification-based propagation:
        </dt><dd>substitutions into the transformed terms are used
                 to represent the outcome of tests;
      </dd><dt>constraint-based propagation:
        </dt><dd>the transformer explicitly maintains sets of constraints
                 recording previous tests (restrictions). Depending on the
                 programming language other abstract properties may be propagated;
      </dd>
    </dl>
  </li><li><strong>evaluation strategy</strong>
    <ul>
      <li>inside-out (or call-by-value or applicative order);
      </li><li>outside-in (or call-by-name or normal-order);
      </li>
    </ul>
  </li><li><strong>control restructuring</strong>
    <dl>
      <dt>monovariant:
        </dt><dd>any program point in the subject program gives rise to zero
                 or one program point in the residual program;
      </dd><dt>polyvariant:
        </dt><dd>any program point in the subject program can give rise to one
                 or more program points in the residual program;
      </dd><dt>monogenetic:
        </dt><dd>any program point in the residual program is produced
                 from a single program point of the subject program;
      </dd><dt>polygenetic:
        </dt><dd>any program point in the residual program may be produced
                 from one or more program points of the subject program;
      </dd>
    </dl>
  </li><li><strong>KMP test</strong>
    <ul>  
      <li>- : doesn't pass the test;
      </li><li>+ : pass the test;
      </li>
    </ul> 
  </li><li><strong>eliminate date structures</strong>
    <ul>  
      <li>- : doesn't eliminate;
      </li><li>+ : eliminate;
      </li>
    </ul> 
  </li>
</ul>
