|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcom.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder
com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder
public abstract class SSAPropagationCallGraphBuilder
This abstract base class provides the general algorithm for a call graph builder that relies on propagation through an iterative dataflow solver, and constraints generated by statements in SSA form. TODO: This implementation currently keeps all points to sets live ... even those for local variables that do not span interprocedural boundaries. This may be too space-inefficient .. we can consider recomputing local sets on demand.
| Nested Class Summary | |
|---|---|
protected class |
SSAPropagationCallGraphBuilder.ConstraintVisitor
A visitor that generates constraints based on statements in SSA form. |
protected static class |
SSAPropagationCallGraphBuilder.InterestingVisitor
|
| Field Summary | |
|---|---|
static boolean |
PERIODIC_WIPE_SOFT_CACHES
Should we periodically clear out soft reference caches in an attempt to help the GC? |
protected static boolean |
SHORT_CIRCUIT_SINGLE_USES
An optimization: if we can locally determine that a particular pointer p has exactly one use, then we don't actually create the points-to-set for p, but instead short-circuit by propagating the final solution to the unique use. |
static int |
WIPE_SOFT_CACHE_INTERVAL
Interval which defines the period to clear soft reference caches |
| Fields inherited from class com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder |
|---|
assignOperator, callGraph, cha, contextSelector, CUTOFF, DEBUG_GENERAL, entrypointCallSites, filterOperator, instanceKeyFactory, inverseFilterOperator, options, pointerKeyFactory, system, THROWABLE_SET |
| Constructor Summary | |
|---|---|
protected |
SSAPropagationCallGraphBuilder(ClassHierarchy cha,
WarningSet warnings,
AnalysisOptions options,
PointerKeyFactory pointerKeyFactory)
|
| Method Summary | |
|---|---|
protected void |
addBlockInstructionConstraints(CGNode node,
ControlFlowGraph cfg,
SSACFG.BasicBlock b,
SSAPropagationCallGraphBuilder.ConstraintVisitor v)
Add constraints for a particular basic block. |
protected boolean |
addConstraintsFromNode(CGNode node)
Visit all instructions in a node, and add dataflow constraints induced by each statement in the SSA form. |
protected void |
addNodeInstructionConstraints(CGNode node,
IR ir,
DefUse du)
Add pointer flow constraints based on instructions in a given node |
protected void |
addNodePassthruExceptionConstraints(CGNode node,
IR ir,
DefUse du)
Add constraints to represent the flow of exceptions to the exceptional return value for this node |
protected boolean |
contentsAreInvariant(SymbolTable symbolTable,
DefUse du,
int valueNumber)
A value is "invariant" if we can figure out the instances it can ever point to locally, without resorting to propagation. |
static java.util.Set<TypeReference> |
getCaughtExceptionTypes(SSAGetCaughtExceptionInstruction instruction,
IR ir)
|
SSAContextInterpreter |
getCFAContextInterpreter()
|
static java.util.List<ProgramCounter> |
getIncomingPEIs(IR ir,
IBasicBlock bb)
|
InstanceKey |
getInstanceKeyForPEI(CGNode node,
ProgramCounter instr,
TypeReference type)
|
static InstanceKey |
getInstanceKeyForPEI(CGNode node,
ProgramCounter x,
TypeReference type,
InstanceKeyFactory ikFactory)
|
protected InstanceKey[] |
getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm)
precondition:contentsAreInvariant(valueNumber) |
protected InstanceKey[] |
getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm,
boolean ensureIndexes)
|
protected PointerKey |
getUniqueCatchKey(SSAAbstractInvokeInstruction call,
IR ir,
CGNode node)
precondition: hasUniqueCatchBlock(call,node,cg) |
boolean |
hasNoInterestingUses(int vn,
DefUse du)
|
protected static boolean |
hasUniqueCatchBlock(SSAAbstractInvokeInstruction call,
IR ir)
|
protected boolean |
isConstantRef(SymbolTable symbolTable,
int valueNumber)
|
java.util.Iterator |
iteratePointerKeys()
|
protected SSAPropagationCallGraphBuilder.InterestingVisitor |
makeInterestingVisitor(int vn)
|
protected IPointsToSolver |
makeSolver()
|
protected SSAPropagationCallGraphBuilder.ConstraintVisitor |
makeVisitor(ExplicitCallGraph.ExplicitNode node,
IR ir,
DefUse du,
ExplicitCallGraph callGraph)
|
protected boolean |
unconditionallyAddConstraintsFromNode(CGNode node)
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.HeapModel |
|---|
getClassHierarchy |
| Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory |
|---|
getInstanceKeyForAllocation, getInstanceKeyForClassObject, getInstanceKeyForConstant, getInstanceKeyForMultiNewArray, getStringConstantForInstanceKey |
| Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory |
|---|
getFilteredPointerKeyForLocal, getPointerKeyForArrayContents, getPointerKeyForExceptionalReturnValue, getPointerKeyForInstanceField, getPointerKeyForLocal, getPointerKeyForReturnValue, getPointerKeyForStaticField |
| Field Detail |
|---|
public static final boolean PERIODIC_WIPE_SOFT_CACHES
public static final int WIPE_SOFT_CACHE_INTERVAL
protected static final boolean SHORT_CIRCUIT_SINGLE_USES
| Constructor Detail |
|---|
protected SSAPropagationCallGraphBuilder(ClassHierarchy cha,
WarningSet warnings,
AnalysisOptions options,
PointerKeyFactory pointerKeyFactory)
| Method Detail |
|---|
public SSAContextInterpreter getCFAContextInterpreter()
public static InstanceKey getInstanceKeyForPEI(CGNode node,
ProgramCounter x,
TypeReference type,
InstanceKeyFactory ikFactory)
node - x - type -
java.lang.IllegalArgumentException - if ikFactory is nullprotected boolean addConstraintsFromNode(CGNode node)
addConstraintsFromNode in class PropagationCallGraphBuilderPropagationCallGraphBuilder.addConstraintsFromNode(com.ibm.wala.ipa.callgraph.CGNode)protected boolean unconditionallyAddConstraintsFromNode(CGNode node)
unconditionallyAddConstraintsFromNode in class PropagationCallGraphBuildernode -
protected SSAPropagationCallGraphBuilder.ConstraintVisitor makeVisitor(ExplicitCallGraph.ExplicitNode node,
IR ir,
DefUse du,
ExplicitCallGraph callGraph)
node - ir - callGraph -
protected void addNodeInstructionConstraints(CGNode node,
IR ir,
DefUse du)
node - ir -
protected void addBlockInstructionConstraints(CGNode node,
ControlFlowGraph cfg,
SSACFG.BasicBlock b,
SSAPropagationCallGraphBuilder.ConstraintVisitor v)
node - cfg - b - v -
protected void addNodePassthruExceptionConstraints(CGNode node,
IR ir,
DefUse du)
node - ir -
protected static boolean hasUniqueCatchBlock(SSAAbstractInvokeInstruction call,
IR ir)
call - ir -
protected PointerKey getUniqueCatchKey(SSAAbstractInvokeInstruction call,
IR ir,
CGNode node)
public static java.util.List<ProgramCounter> getIncomingPEIs(IR ir,
IBasicBlock bb)
java.lang.IllegalArgumentException - if ir is null
public boolean hasNoInterestingUses(int vn,
DefUse du)
protected SSAPropagationCallGraphBuilder.InterestingVisitor makeInterestingVisitor(int vn)
protected boolean contentsAreInvariant(SymbolTable symbolTable,
DefUse du,
int valueNumber)
valueNumber -
protected InstanceKey[] getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm)
valueNumber -
protected InstanceKey[] getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm,
boolean ensureIndexes)
protected boolean isConstantRef(SymbolTable symbolTable,
int valueNumber)
public java.util.Iterator iteratePointerKeys()
iteratePointerKeys in interface HeapModel
public static java.util.Set<TypeReference> getCaughtExceptionTypes(SSAGetCaughtExceptionInstruction instruction,
IR ir)
public InstanceKey getInstanceKeyForPEI(CGNode node,
ProgramCounter instr,
TypeReference type)
getInstanceKeyForPEI in interface InstanceKeyFactoryprotected IPointsToSolver makeSolver()
makeSolver in class PropagationCallGraphBuilder
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||