Skeleton for a top-down, recursive,
IEGeneric optimizer. Expressions are provided in
depth-first, pre-order way: parent expressions are provided before their constituting children.
IEStatements are not candidates for optimization (although they can be).
IEStatements should be optimized via the use an
This field holds a reference to the top-level parent statement of the expression currently
Do not process left-side of
statement. Exception: If the left-side is an
IEMem, the memory reference is processed.
Default value: false.
Optimize only the constituents of the IRE statements, not the statements themselves.
Default value: true.
Optimize a single expression. The default implementation does nothing and returns null.
||IR expression to optimize
||helper routine context
- non-null if the expression was optimized; null otherwise
||the target expression to be matched and modified
||a list of candidate substitutions
- null if no substitution was performed, else the new expression
Attempt to optimize expressions. Sub-expressions may be examined. The implementor should not
attempt to modify parent or cousins expressions.
- the new (optimized) expression as well as DFA update hints, or null if the expression
could not be optimized
Perform the optimization pass. The caller may request that data chains not be updated,
whenever possible. (They may be updated internally by the optimizer, which has the final say
as to how and when DFA calculations should be run.)
The above means that data chains after running this method may or may not have been modified,
and may or may not be in a consistent state with the optimized CFG.
||must be true / this parameter will be deprecated (previously was: if true,
update data chains according to the optimizer's policy; if false, the optimizer
should not perform final DFA computations if needed)
- the result of a call to one of
postPerform(...) or a negative number
indicating an error has occurred and the optimizing process should be aborted