public abstract class AnalysisPolicy extends Object
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
aliasArrayTypeFlows |
protected org.graalvm.compiler.options.OptionValues |
options |
protected boolean |
relaxTypeFlowConstraints |
protected boolean |
removeSaturatedTypeFlows |
protected int |
typeFlowSaturationCutoff |
| Constructor and Description |
|---|
AnalysisPolicy(org.graalvm.compiler.options.OptionValues options) |
| Modifier and Type | Method and Description |
|---|---|
abstract boolean |
addOriginalObserver(PointsToAnalysis bb,
TypeFlow<?> flow,
TypeFlow<?> observer) |
abstract boolean |
addOriginalUse(PointsToAnalysis bb,
TypeFlow<?> flow,
TypeFlow<?> use) |
boolean |
aliasArrayTypeFlows() |
abstract AnalysisContext |
allocationContext(PointsToAnalysis bb,
MethodFlowsGraph callerGraph) |
abstract TypeState |
cloneState(PointsToAnalysis bb,
TypeState currentState,
TypeState inputState,
BytecodePosition cloneSite,
AnalysisContext allocationContext)
Create type state for clone.
|
abstract ArrayElementsTypeStore |
createArrayElementsTypeStore(AnalysisObject object,
AnalysisUniverse universe) |
abstract AnalysisObject |
createConstantObject(PointsToAnalysis bb,
JavaConstant constant,
AnalysisType exactType)
Create a constant object abstraction.
|
abstract FieldTypeStore |
createFieldTypeStore(AnalysisObject object,
AnalysisField field,
AnalysisUniverse universe) |
abstract AnalysisObject |
createHeapObject(PointsToAnalysis bb,
AnalysisType objectType,
BytecodePosition allocationSite,
AnalysisContext allocationContext)
Create a heap allocated object abstraction.
|
abstract MethodTypeFlow |
createMethodTypeFlow(PointsToAnalysisMethod method) |
abstract AbstractSpecialInvokeTypeFlow |
createSpecialInvokeTypeFlow(BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn)
Provides implementation for the special invoke type flow.
|
abstract AbstractStaticInvokeTypeFlow |
createStaticInvokeTypeFlow(BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn)
Provides implementation for the static invoke type flow.
|
abstract AbstractVirtualInvokeTypeFlow |
createVirtualInvokeTypeFlow(BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn)
Provides implementation for the virtual invoke type flow.
|
abstract TypeState |
doIntersection(PointsToAnalysis bb,
MultiTypeState s1,
MultiTypeState s2) |
abstract TypeState |
doIntersection(PointsToAnalysis bb,
MultiTypeState s1,
SingleTypeState s2) |
TypeState |
doIntersection(PointsToAnalysis bb,
SingleTypeState s1,
MultiTypeState s2) |
TypeState |
doIntersection(PointsToAnalysis bb,
SingleTypeState s1,
SingleTypeState s2) |
abstract TypeState |
doSubtraction(PointsToAnalysis bb,
MultiTypeState s1,
MultiTypeState s2) |
abstract TypeState |
doSubtraction(PointsToAnalysis bb,
MultiTypeState s1,
SingleTypeState s2) |
TypeState |
doSubtraction(PointsToAnalysis bb,
SingleTypeState s1,
MultiTypeState s2) |
TypeState |
doSubtraction(PointsToAnalysis bb,
SingleTypeState s1,
SingleTypeState s2) |
abstract TypeState |
doUnion(PointsToAnalysis bb,
MultiTypeState s1,
MultiTypeState s2) |
abstract TypeState |
doUnion(PointsToAnalysis bb,
MultiTypeState s1,
SingleTypeState s2) |
abstract TypeState |
doUnion(PointsToAnalysis bb,
SingleTypeState s1,
SingleTypeState s2) |
abstract TypeState |
dynamicNewInstanceState(PointsToAnalysis bb,
TypeState currentState,
TypeState newState,
BytecodePosition allocationSite,
AnalysisContext allocationContext)
Create type state for dynamic new instance.
|
abstract TypeState |
forContextInsensitiveTypeState(PointsToAnalysis bb,
TypeState state)
Simplifies a type state by replacing all context sensitive objects with context insensitive
objects.
|
abstract boolean |
isContextSensitiveAllocation(PointsToAnalysis bb,
AnalysisType type,
AnalysisContext allocationContext)
Specifies if an allocation site should be modeled context sensitively.
|
abstract boolean |
isContextSensitiveAnalysis() |
abstract boolean |
isMergingEnabled()
Check if merging is enabled.
|
abstract boolean |
isSummaryObject(AnalysisObject object)
In some analysis policies some objects can summarize others.
|
abstract void |
linkActualReturn(PointsToAnalysis bb,
boolean isStatic,
InvokeTypeFlow invoke) |
abstract void |
linkClonedObjects(PointsToAnalysis bb,
TypeFlow<?> inputFlow,
CloneTypeFlow cloneFlow,
BytecodePosition source)
Link the elements of the cloned objects (array flows or field flows) to the elements of the
source objects.
|
int |
makeProperties(BigBang bb,
AnalysisObject... objects) |
int |
makePropertiesForUnion(TypeState s1,
TypeState s2) |
abstract MultiTypeState |
multiTypeState(PointsToAnalysis bb,
boolean canBeNull,
int properties,
BitSet typesBitSet,
AnalysisObject... objects) |
abstract boolean |
needsConstantCache()
Specifies if this policy models constants objects context sensitively, i.e., by creating a
different abstraction for each JavaConstant of the same type, and thus needs a constants
cache.
|
abstract void |
noteMerge(PointsToAnalysis bb,
AnalysisObject... a)
Note analysis object state merge.
|
abstract void |
noteMerge(PointsToAnalysis bb,
AnalysisObject o)
Note analysis object state merge.
|
abstract void |
noteMerge(PointsToAnalysis bb,
TypeState t)
Note type state merge.
|
abstract TypeFlow<?> |
proxy(BytecodePosition source,
TypeFlow<?> input) |
abstract void |
registerAsImplementationInvoked(InvokeTypeFlow invoke,
MethodFlowsGraph calleeFlows) |
boolean |
relaxTypeFlowConstraints() |
boolean |
removeSaturatedTypeFlows() |
abstract SingleTypeState |
singleTypeState(PointsToAnalysis bb,
boolean canBeNull,
int properties,
AnalysisType type,
AnalysisObject... objects) |
abstract MethodFlowsGraph |
staticRootMethodGraph(PointsToAnalysis bb,
PointsToAnalysisMethod pointsToMethod) |
int |
typeFlowSaturationCutoff() |
protected final org.graalvm.compiler.options.OptionValues options
protected final boolean aliasArrayTypeFlows
protected final boolean relaxTypeFlowConstraints
protected final boolean removeSaturatedTypeFlows
protected final int typeFlowSaturationCutoff
public AnalysisPolicy(org.graalvm.compiler.options.OptionValues options)
public abstract boolean isContextSensitiveAnalysis()
public boolean aliasArrayTypeFlows()
public boolean relaxTypeFlowConstraints()
public boolean removeSaturatedTypeFlows()
public int typeFlowSaturationCutoff()
public abstract MethodTypeFlow createMethodTypeFlow(PointsToAnalysisMethod method)
public abstract boolean needsConstantCache()
public abstract boolean isSummaryObject(AnalysisObject object)
public abstract boolean isMergingEnabled()
public abstract void noteMerge(PointsToAnalysis bb, TypeState t)
public abstract void noteMerge(PointsToAnalysis bb, AnalysisObject... a)
public abstract void noteMerge(PointsToAnalysis bb, AnalysisObject o)
public abstract boolean isContextSensitiveAllocation(PointsToAnalysis bb, AnalysisType type, AnalysisContext allocationContext)
public abstract AnalysisObject createHeapObject(PointsToAnalysis bb, AnalysisType objectType, BytecodePosition allocationSite, AnalysisContext allocationContext)
public abstract AnalysisObject createConstantObject(PointsToAnalysis bb, JavaConstant constant, AnalysisType exactType)
public abstract TypeState dynamicNewInstanceState(PointsToAnalysis bb, TypeState currentState, TypeState newState, BytecodePosition allocationSite, AnalysisContext allocationContext)
public abstract TypeState cloneState(PointsToAnalysis bb, TypeState currentState, TypeState inputState, BytecodePosition cloneSite, AnalysisContext allocationContext)
public abstract void linkClonedObjects(PointsToAnalysis bb, TypeFlow<?> inputFlow, CloneTypeFlow cloneFlow, BytecodePosition source)
public abstract FieldTypeStore createFieldTypeStore(AnalysisObject object, AnalysisField field, AnalysisUniverse universe)
public abstract ArrayElementsTypeStore createArrayElementsTypeStore(AnalysisObject object, AnalysisUniverse universe)
public abstract AbstractVirtualInvokeTypeFlow createVirtualInvokeTypeFlow(BytecodePosition invokeLocation, AnalysisType receiverType, PointsToAnalysisMethod targetMethod, TypeFlow<?>[] actualParameters, ActualReturnTypeFlow actualReturn)
public abstract AbstractSpecialInvokeTypeFlow createSpecialInvokeTypeFlow(BytecodePosition invokeLocation, AnalysisType receiverType, PointsToAnalysisMethod targetMethod, TypeFlow<?>[] actualParameters, ActualReturnTypeFlow actualReturn)
public abstract AbstractStaticInvokeTypeFlow createStaticInvokeTypeFlow(BytecodePosition invokeLocation, AnalysisType receiverType, PointsToAnalysisMethod targetMethod, TypeFlow<?>[] actualParameters, ActualReturnTypeFlow actualReturn)
public abstract MethodFlowsGraph staticRootMethodGraph(PointsToAnalysis bb, PointsToAnalysisMethod pointsToMethod)
public abstract AnalysisContext allocationContext(PointsToAnalysis bb, MethodFlowsGraph callerGraph)
public abstract boolean addOriginalUse(PointsToAnalysis bb, TypeFlow<?> flow, TypeFlow<?> use)
public abstract boolean addOriginalObserver(PointsToAnalysis bb, TypeFlow<?> flow, TypeFlow<?> observer)
public abstract void linkActualReturn(PointsToAnalysis bb, boolean isStatic, InvokeTypeFlow invoke)
public abstract void registerAsImplementationInvoked(InvokeTypeFlow invoke, MethodFlowsGraph calleeFlows)
public int makeProperties(BigBang bb, AnalysisObject... objects)
public abstract TypeState forContextInsensitiveTypeState(PointsToAnalysis bb, TypeState state)
public abstract SingleTypeState singleTypeState(PointsToAnalysis bb, boolean canBeNull, int properties, AnalysisType type, AnalysisObject... objects)
public abstract MultiTypeState multiTypeState(PointsToAnalysis bb, boolean canBeNull, int properties, BitSet typesBitSet, AnalysisObject... objects)
public abstract TypeState doUnion(PointsToAnalysis bb, SingleTypeState s1, SingleTypeState s2)
public abstract TypeState doUnion(PointsToAnalysis bb, MultiTypeState s1, SingleTypeState s2)
public abstract TypeState doUnion(PointsToAnalysis bb, MultiTypeState s1, MultiTypeState s2)
public final TypeState doIntersection(PointsToAnalysis bb, SingleTypeState s1, SingleTypeState s2)
public final TypeState doIntersection(PointsToAnalysis bb, SingleTypeState s1, MultiTypeState s2)
public abstract TypeState doIntersection(PointsToAnalysis bb, MultiTypeState s1, SingleTypeState s2)
public abstract TypeState doIntersection(PointsToAnalysis bb, MultiTypeState s1, MultiTypeState s2)
public final TypeState doSubtraction(PointsToAnalysis bb, SingleTypeState s1, SingleTypeState s2)
public final TypeState doSubtraction(PointsToAnalysis bb, SingleTypeState s1, MultiTypeState s2)
public abstract TypeState doSubtraction(PointsToAnalysis bb, MultiTypeState s1, SingleTypeState s2)
public abstract TypeState doSubtraction(PointsToAnalysis bb, MultiTypeState s1, MultiTypeState s2)