Peephole Transformations

The name peephole optimizer comes from the image of sliding a small window over the target code attempting to replace patterns of instructions by better ones. If we have a look at the code generated in the previous phase for the input a = 5-b*2 we see that produces:
$N1 = b * 2
$N2 = 5 - $N1
a = $N2
PIR allows memory instructions involving three arguments like a = b + c. This fact and the observation that $N2 is used only once lead us to conclude that the former translation can be changed to:
$N1 = b * 2
a = 5 - $N1
Perl regular expressions constitute a formidable tool to implement peephole optimization. The regexp below finds patterns
$N# = something
IDENT = $N#
and substitutes them by IDENT = something:
sub peephole_optimization {
  $_[0] =~ 
   s{(\$N\d+)\s*=\s*(.*\n)\s*
     ([a-zA-Z_]\w*)\s*=\s*\1}
    {$3 = $2}gx;
}



Procesadores de Lenguaje 2007-03-01