Package soot.jimple.toolkits.scalar.pre
Class BusyCodeMotion
- java.lang.Object
-
- soot.Transformer
-
- soot.BodyTransformer
-
- soot.jimple.toolkits.scalar.pre.BusyCodeMotion
-
public class BusyCodeMotion extends BodyTransformer
Performs a partial redundancy elimination (= code motion). This is done, by moving everycomputation as high as possible (it is easy to show, that they are computationally optimal), and then replacing the original computation by a reference to this new high computation. This implies, that we introduce many new helper-variables (that can easily be eliminated 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 "busy" refers to the fact, that we always move computations as high as possible. Even, if this is not necessary.- See Also:
CriticalEdgeRemover
-
-
Constructor Summary
Constructors Constructor Description BusyCodeMotion(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 busy code motion.static BusyCodeMotionv()-
Methods inherited from class soot.BodyTransformer
transform, transform, transform
-
-
-
-
Constructor Detail
-
BusyCodeMotion
public BusyCodeMotion(Singletons.Global g)
-
-
Method Detail
-
v
public static BusyCodeMotion v()
-
internalTransform
protected void internalTransform(Body b, String phaseName, Map<String,String> opts)
performs the busy 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.
-
-