Class LazyCodeMotion


  • public class LazyCodeMotion
    extends BodyTransformer
    Performs a partial redundancy elimination (= code motion). This is done, by introducing helper-vars, that store an already computed value, or if a computation only arrives partially (not from all predecessors) inserts a new computation on these paths afterwards).

    In order to catch every redundant expression, this transformation must be done on a graph without critical edges. Therefore the first thing we do, is removing them. A subsequent pass can then easily remove the synthetic nodes we have introduced.

    The term "lazy" refers to the fact, that we move computations only if necessary.

    See Also:
    CriticalEdgeRemover
    • Method Detail

      • internalTransform

        protected void internalTransform​(Body b,
                                         String phaseName,
                                         Map<String,​String> opts)
        performs the lazy code motion.
        Specified by:
        internalTransform in class BodyTransformer
        Parameters:
        b - the body on which to apply the transformation
        phaseName - the phasename for this transform; not typically used by implementations.
        opts - the actual computed options; a combination of default options and Scene specified options.