Package soot.jimple.toolkits.scalar.pre
Class LazyCodeMotion
- java.lang.Object
-
- soot.Transformer
-
- soot.BodyTransformer
-
- soot.jimple.toolkits.scalar.pre.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
-
-
Constructor Summary
Constructors Constructor Description LazyCodeMotion(Singletons.Global g)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidinternalTransform(Body b, String phaseName, Map<String,String> opts)performs the lazy code motion.static LazyCodeMotionv()-
Methods inherited from class soot.BodyTransformer
transform, transform, transform
-
-
-
-
Constructor Detail
-
LazyCodeMotion
public LazyCodeMotion(Singletons.Global g)
-
-
Method Detail
-
v
public static LazyCodeMotion v()
-
internalTransform
protected void internalTransform(Body b, String phaseName, Map<String,String> opts)
performs the lazy code motion.- Specified by:
internalTransformin classBodyTransformer- Parameters:
b- the body on which to apply the transformationphaseName- the phasename for this transform; not typically used by implementations.opts- the actual computed options; a combination of default options and Scene specified options.
-
-