public abstract class PureFunctionMacroNode extends MacroStateSplitNode implements Canonicalizable
MacroNodes for simple pure functions like
System.identityHashCode(Object).Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberableCanonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Unary<T extends Node>MemoryCheckpoint.Multi, MemoryCheckpoint.Single, MemoryCheckpoint.TypeAssertion| Modifier and Type | Field and Description |
|---|---|
static NodeClass<PureFunctionMacroNode> |
TYPE |
stateAfterarguments, bci, invokeKind, returnType, targetMethodnextNODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Constructor and Description |
|---|
PureFunctionMacroNode(NodeClass<? extends MacroNode> c,
CallTargetNode.InvokeKind invokeKind,
ResolvedJavaMethod targetMethod,
int bci,
JavaType returnType,
ValueNode... arguments) |
| Modifier and Type | Method and Description |
|---|---|
Node |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
protected abstract JavaConstant |
evaluate(JavaConstant param,
MetaAccessProvider metaAccess)
This method should return either a constant that represents the result of the function, or
null if no such result could be determined.
|
getLocationIdentity, hasSideEffect, replaceSnippetInvokes, setStateAfter, stateAftercreateInvoke, getBci, getLoweredSnippetGraph, getLoweredSubstitutionGraph, getReturnType, getTargetMethod, lower, lowerReplacement, replaceWithInvokeasNode, next, setNextasConstant, asJavaConstant, getKind, graph, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStampacceptInputs, acceptSuccessors, afterClone, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearSuccessors, copyWithInputs, copyWithInputs, equals, fail, formatTo, getDebugProperties, getDebugProperties, getId, getNodeClass, getUsageAt, getUsageCount, hashCode, hasNoUsages, hasUsages, inputs, isAlive, isDeleted, markDeleted, modCount, newIdentityMap, newIdentityMap, newIdentityMap, newMap, newMap, newMap, newSet, newSet, predecessor, pushInputs, removeUsage, replaceAndDelete, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceFirstInput, replaceFirstSuccessor, safeDelete, simplify, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputsclone, finalize, getClass, notify, notifyAll, wait, wait, waitasNodestatespublic static final NodeClass<PureFunctionMacroNode> TYPE
public PureFunctionMacroNode(NodeClass<? extends MacroNode> c, CallTargetNode.InvokeKind invokeKind, ResolvedJavaMethod targetMethod, int bci, JavaType returnType, ValueNode... arguments)
protected abstract JavaConstant evaluate(JavaConstant param, MetaAccessProvider metaAccess)
public Node canonical(CanonicalizerTool tool)
Canonicalizablenull will delete the current node and replace it with null at
all usages. Note that it is not necessary to delete floating nodes that have no more usages
this way - they will be deleted automatically.canonical in interface Canonicalizabletool - provides access to runtime interfaces like MetaAccessProvider