Package soot.shimple.toolkits.scalar
Class SConstantPropagatorAndFolder
- java.lang.Object
-
- soot.Transformer
-
- soot.BodyTransformer
-
- soot.shimple.toolkits.scalar.SConstantPropagatorAndFolder
-
public class SConstantPropagatorAndFolder extends BodyTransformer
A powerful constant propagator and folder based on an algorithm sketched by Cytron et al that takes conditional control flow into account. This optimization demonstrates some of the benefits of SSA -- particularly the fact that Phi nodes represent natural merge points in the control flow.- Author:
- Navindra Umanee
- See Also:
- Efficiently Computing Static Single Assignment Form and the Control Dependence Graph
-
-
Field Summary
Fields Modifier and Type Field Description protected booleandebugprotected ShimpleBodysb
-
Constructor Summary
Constructors Constructor Description SConstantPropagatorAndFolder(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> options)This method is called to perform the transformation itself.protected voidpropagateResults(Map<Local,Constant> localToConstant)Propagates constants to the definition and uses of the relevant locals given a mapping.protected voidremoveStmts(List<IfStmt> deadStmts)Removes the given list of fall through IfStmts from the body.protected voidreplaceStmts(Map<Stmt,GotoStmt> stmtsToReplace)Replaces conditional branches by unconditional branches as given by the mapping.static SConstantPropagatorAndFolderv()-
Methods inherited from class soot.BodyTransformer
transform, transform, transform
-
-
-
-
Field Detail
-
sb
protected ShimpleBody sb
-
debug
protected boolean debug
-
-
Constructor Detail
-
SConstantPropagatorAndFolder
public SConstantPropagatorAndFolder(Singletons.Global g)
-
-
Method Detail
-
v
public static SConstantPropagatorAndFolder v()
-
internalTransform
protected void internalTransform(Body b, String phaseName, Map<String,String> options)
Description copied from class:BodyTransformerThis method is called to perform the transformation itself. It is declared abstract; subclasses must implement this method by making it the entry point to their actual Body transformation.- Specified by:
internalTransformin classBodyTransformer- Parameters:
b- the body on which to apply the transformationphaseName- the phasename for this transform; not typically used by implementations.options- the actual computed options; a combination of default options and Scene specified options.
-
propagateResults
protected void propagateResults(Map<Local,Constant> localToConstant)
Propagates constants to the definition and uses of the relevant locals given a mapping. Notice that we use the Shimple implementation of LocalDefs and LocalUses.
-
removeStmts
protected void removeStmts(List<IfStmt> deadStmts)
Removes the given list of fall through IfStmts from the body.
-
-