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 S0since 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: