|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--soot.tagkit.AbstractHost | +--soot.Body | +--soot.jimple.StmtBody | +--soot.shimple.ShimpleBody
Implementation of the Body class for the Shimple (SSA Jimple) IR. This class provides methods for maintaining SSA form as well as eliminating SSA form.
We decided to hide all the intelligence in internal.ShimpleBodyBuilder for clarity of API. Eventually we will likely switch to an explicit Strategy pattern that will allow us to select different SSA behaviours and algorithms.
ShimpleBodyBuilder
,
Efficiently
Computing Static Single Assignment Form and the Control Dependence
Graph, Serialized FormField Summary | |
protected boolean |
isSSA
Set isSSA boolean to indicate whether a ShimpleBody is still in SSA form or not. |
protected ShimpleLocalDefs |
localDefs
|
protected LocalUses |
localUses
|
protected ShimpleOptions |
options
Holds our options map... |
Fields inherited from class soot.Body |
localChain,
method,
trapChain,
unitChain |
Method Summary | |
java.lang.Object |
clone()
Returns a copy of the current ShimpleBody. |
void |
eliminatePhiNodes()
Remove Phi nodes from body. |
boolean |
getIsSSA()
Returns value of, optional, user-maintained SSA boolean. |
ShimpleLocalDefs |
getLocalDefs()
Returns a ShimpleLocalDefs interface for this body. |
LocalUses |
getLocalUses()
Returns a LocalUses interface for this body. |
ShimpleOptions |
getOptions()
Returns the Shimple options applicable to this body. |
void |
makeUniqueLocalNames()
Make sure the locals in this body all have unique String names. |
void |
rebuild()
Recompute SSA form. |
void |
rebuild(boolean hasPhiNodes)
Rebuild SSA form. |
void |
setIsSSA(boolean isSSA)
Sets a flag that indicates whether ShimpleBody is still in SSA form after a transformation or not. |
JimpleBody |
toJimpleBody()
Returns an equivalent unbacked JimpleBody of the current Body by eliminating the Phi nodes. |
Methods inherited from class soot.Body |
getAllUnitBoxes,
getDefBoxes,
getLocalCount,
getLocals,
getMethod,
getParameterLocal,
getThisLocal,
getTraps,
getUnitBoxes,
getUnits,
getUseAndDefBoxes,
getUseBoxes,
importBodyContentsFrom,
setMethod,
validate,
validateLocals,
validateTraps,
validateUnitBoxes,
validateUses |
Methods inherited from class soot.tagkit.AbstractHost |
addAllTagsOf,
addTag,
getTag,
getTags,
hasTag,
removeAllTags,
removeTag |
Methods inherited from class java.lang.Object |
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
Field Detail |
protected ShimpleOptions options
protected ShimpleLocalDefs localDefs
protected LocalUses localUses
protected boolean isSSA
Method Detail |
public void rebuild()
Note: assumes presence of Phi nodes in body that require elimination. If you *know* there are no Phi nodes present, you may prefer to use rebuild(false) in order to skip some transformations during the Phi elimination process.
public void rebuild(boolean hasPhiNodes)
If there are Phi nodes already present in the body, it is imperative that we specify this so that the algorithm can eliminate them before rebuilding SSA.
The eliminate Phi nodes stage is harmless, but if you *know* that no Phi nodes are present and you wish to avoid the transformations involved in eliminating Phi nodes, use rebuild(false).
public JimpleBody toJimpleBody()
Currently available option is "naive-phi-elimination", typically specified in the "shimple" phase (eg, -p shimple naive-phi-elimination) which skips the dead code elimination and register allocation phase before eliminating Phi nodes. This can be useful for understanding the effect of analyses.
Remember to setActiveBody() if necessary in your SootMethod.
eliminatePhiNodes()
public void eliminatePhiNodes()
Currently available option is "naive-phi-elimination", typically specified in the "shimple" phase (eg, -p shimple naive-phi-elimination) which skips the dead code elimination and register allocation phase before eliminating Phi nodes. This can be useful for understanding the effect of analyses.
toJimpleBody()
public java.lang.Object clone()
public ShimpleLocalDefs getLocalDefs()
public LocalUses getLocalUses()
public void setIsSSA(boolean isSSA)
public boolean getIsSSA()
setIsSSA(boolean)
public ShimpleOptions getOptions()
public void makeUniqueLocalNames()
LocalNameStandardizer
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |