public class PiNodeManager extends Object
The work is done in two main steps:
This class can also translate out of Shimple by producing an equivalent Jimple body with all Phi nodes removed.
Note that this is an internal class, understanding it should not be necessary from a user point-of-view and relying on it directly is not recommended.
ShimpleBody
,
Efficiently
Computing Static Single Assignment Form and the Control Dependence
GraphModifier and Type | Field and Description |
---|---|
protected ShimpleBody |
body |
protected ReversibleGraph<Block> |
cfg |
protected DominanceFrontier<Block> |
df |
protected DominatorTree<Block> |
dt |
protected ShimpleFactory |
sf |
protected boolean |
trimmed |
protected MultiMap<Local,Block> |
varToBlocks |
Constructor and Description |
---|
PiNodeManager(ShimpleBody body,
boolean trimmed,
ShimpleFactory sf)
Transforms the provided body to pure SSA form.
|
Modifier and Type | Method and Description |
---|---|
void |
eliminatePiNodes(boolean smart) |
static List<ValueBox> |
getUseBoxesFromBlock(Block block) |
void |
insertPiNodes(Local local,
Block frontierBlock) |
boolean |
insertTrivialPiNodes() |
void |
piHandleIfStmt(Local local,
IfStmt u) |
void |
piHandleSwitchStmt(Local local,
Unit u) |
void |
update() |
protected ShimpleBody body
protected ShimpleFactory sf
protected DominatorTree<Block> dt
protected DominanceFrontier<Block> df
protected ReversibleGraph<Block> cfg
protected boolean trimmed
public PiNodeManager(ShimpleBody body, boolean trimmed, ShimpleFactory sf)