PACKAGE
Regex::Optimize
ABSTRACT
Optimize a sequence of list ops.
INTERNAL ROUTINES
- method label_indices(op) Figure out which arguments of an op are labels, and return an array of their indices.
- method combineLabels(label1, label2, ...) Creates a new label to represent a group of label objects. Also remembers what the original names are so a comment giving them can be generated later.
- method optimize(ops...)
1. Merge equivalent labels 2. Jump threading: Replace goto X; ...; X: goto Y; with goto Y. 3. Eliminate unreachable code. 4. Eliminate jumps to the following address. 5. Eliminate unused labels.TODO:
1. I would like to optimize
B1: sub x, 1
goto S0
B2: sub x, 1
goto B1
B3: sub x, 1
goto B2
to
B1: sub x, 1
goto S0
B2: sub x, 2
goto S0
B3: sub x, 3
goto S0
since this commonly occurs in regex code, due to sequence of single-character matches (eg /a[bB]c/).But perhaps this should be handled in the Tree -> List rewrite??# Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: