< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/graphbuilderconf/GraphBuilderConfiguration.java
Print this page
*** 23,68 ****
package org.graalvm.compiler.nodes.graphbuilderconf;
import java.util.Arrays;
import org.graalvm.compiler.core.common.type.StampPair;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaType;
! public class GraphBuilderConfiguration {
public static class Plugins {
private final InvocationPlugins invocationPlugins;
private NodePlugin[] nodePlugins;
private ParameterPlugin[] parameterPlugins;
private TypePlugin[] typePlugins;
private InlineInvokePlugin[] inlineInvokePlugins;
- private LoopExplosionPlugin loopExplosionPlugin;
private ClassInitializationPlugin classInitializationPlugin;
private InvokeDynamicPlugin invokeDynamicPlugin;
private ProfilingPlugin profilingPlugin;
/**
* Creates a copy of a given set of plugins. The {@link InvocationPlugins} in
* {@code copyFrom} become the {@linkplain InvocationPlugins#getParent() default}
* {@linkplain #getInvocationPlugins() invocation plugins} in this object.
*/
! public Plugins(Plugins copyFrom) {
! this.invocationPlugins = new InvocationPlugins(copyFrom.invocationPlugins);
this.nodePlugins = copyFrom.nodePlugins;
this.parameterPlugins = copyFrom.parameterPlugins;
this.typePlugins = copyFrom.typePlugins;
this.inlineInvokePlugins = copyFrom.inlineInvokePlugins;
- this.loopExplosionPlugin = copyFrom.loopExplosionPlugin;
this.classInitializationPlugin = copyFrom.classInitializationPlugin;
this.invokeDynamicPlugin = copyFrom.invokeDynamicPlugin;
this.profilingPlugin = copyFrom.profilingPlugin;
}
/**
* Creates a new set of plugins.
*
* @param invocationPlugins the {@linkplain #getInvocationPlugins() invocation plugins} in
* this object
--- 23,72 ----
package org.graalvm.compiler.nodes.graphbuilderconf;
import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.List;
import org.graalvm.compiler.core.common.type.StampPair;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.ResolvedJavaType;
! public final class GraphBuilderConfiguration {
public static class Plugins {
private final InvocationPlugins invocationPlugins;
private NodePlugin[] nodePlugins;
private ParameterPlugin[] parameterPlugins;
private TypePlugin[] typePlugins;
private InlineInvokePlugin[] inlineInvokePlugins;
private ClassInitializationPlugin classInitializationPlugin;
private InvokeDynamicPlugin invokeDynamicPlugin;
private ProfilingPlugin profilingPlugin;
/**
* Creates a copy of a given set of plugins. The {@link InvocationPlugins} in
* {@code copyFrom} become the {@linkplain InvocationPlugins#getParent() default}
* {@linkplain #getInvocationPlugins() invocation plugins} in this object.
*/
! public Plugins(Plugins copyFrom, InvocationPlugins invocationPlugins) {
! this.invocationPlugins = invocationPlugins != null ? invocationPlugins : new InvocationPlugins(copyFrom.invocationPlugins);
this.nodePlugins = copyFrom.nodePlugins;
this.parameterPlugins = copyFrom.parameterPlugins;
this.typePlugins = copyFrom.typePlugins;
this.inlineInvokePlugins = copyFrom.inlineInvokePlugins;
this.classInitializationPlugin = copyFrom.classInitializationPlugin;
this.invokeDynamicPlugin = copyFrom.invokeDynamicPlugin;
this.profilingPlugin = copyFrom.profilingPlugin;
}
+ public Plugins(Plugins copyFrom) {
+ this(copyFrom, null);
+ }
+
/**
* Creates a new set of plugins.
*
* @param invocationPlugins the {@linkplain #getInvocationPlugins() invocation plugins} in
* this object
*** 153,170 ****
public void clearInlineInvokePlugins() {
inlineInvokePlugins = new InlineInvokePlugin[0];
}
- public LoopExplosionPlugin getLoopExplosionPlugin() {
- return loopExplosionPlugin;
- }
-
- public void setLoopExplosionPlugin(LoopExplosionPlugin plugin) {
- this.loopExplosionPlugin = plugin;
- }
-
public ClassInitializationPlugin getClassInitializationPlugin() {
return classInitializationPlugin;
}
public void setClassInitializationPlugin(ClassInitializationPlugin plugin) {
--- 157,166 ----
*** 196,212 ****
}
return null;
}
}
- private static final ResolvedJavaType[] EMPTY = new ResolvedJavaType[]{};
-
private final boolean eagerResolving;
private final boolean unresolvedIsError;
private final BytecodeExceptionMode bytecodeExceptionMode;
private final boolean omitAssertions;
! private final ResolvedJavaType[] skippedExceptionTypes;
private final boolean insertFullInfopoints;
private final boolean trackNodeSourcePosition;
private final Plugins plugins;
public enum BytecodeExceptionMode {
--- 192,206 ----
}
return null;
}
}
private final boolean eagerResolving;
private final boolean unresolvedIsError;
private final BytecodeExceptionMode bytecodeExceptionMode;
private final boolean omitAssertions;
! private final List<ResolvedJavaType> skippedExceptionTypes;
private final boolean insertFullInfopoints;
private final boolean trackNodeSourcePosition;
private final Plugins plugins;
public enum BytecodeExceptionMode {
*** 227,238 ****
* This mode uses profiling information to decide whether to use explicit exception edges.
*/
Profile
}
! protected GraphBuilderConfiguration(boolean eagerResolving, boolean unresolvedIsError, BytecodeExceptionMode bytecodeExceptionMode, boolean omitAssertions, boolean insertFullInfopoints,
! boolean trackNodeSourcePosition, ResolvedJavaType[] skippedExceptionTypes, Plugins plugins) {
this.eagerResolving = eagerResolving;
this.unresolvedIsError = unresolvedIsError;
this.bytecodeExceptionMode = bytecodeExceptionMode;
this.omitAssertions = omitAssertions;
this.insertFullInfopoints = insertFullInfopoints;
--- 221,238 ----
* This mode uses profiling information to decide whether to use explicit exception edges.
*/
Profile
}
! private GraphBuilderConfiguration(boolean eagerResolving,
! boolean unresolvedIsError,
! BytecodeExceptionMode bytecodeExceptionMode,
! boolean omitAssertions,
! boolean insertFullInfopoints,
! boolean trackNodeSourcePosition,
! List<ResolvedJavaType> skippedExceptionTypes,
! Plugins plugins) {
this.eagerResolving = eagerResolving;
this.unresolvedIsError = unresolvedIsError;
this.bytecodeExceptionMode = bytecodeExceptionMode;
this.omitAssertions = omitAssertions;
this.insertFullInfopoints = insertFullInfopoints;
*** 246,304 ****
* this configuration become the {@linkplain InvocationPlugins#getParent() parent} of the
* {@link InvocationPlugins} in the copy.
*/
public GraphBuilderConfiguration copy() {
Plugins newPlugins = new Plugins(plugins);
! GraphBuilderConfiguration result = new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, bytecodeExceptionMode, omitAssertions, insertFullInfopoints, trackNodeSourcePosition,
! skippedExceptionTypes, newPlugins);
return result;
}
/**
* Set the {@link #unresolvedIsError} flag. This flag can be set independently from
* {@link #eagerResolving}, i.e., even if eager resolving fails execution is assumed to be
* valid. This allows us for example to process unresolved types/methods/fields even when
* eagerly resolving elements.
*/
public GraphBuilderConfiguration withUnresolvedIsError(boolean newUnresolvedIsError) {
! return new GraphBuilderConfiguration(eagerResolving, newUnresolvedIsError, bytecodeExceptionMode, omitAssertions, insertFullInfopoints, trackNodeSourcePosition, skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withEagerResolving(boolean newEagerResolving) {
! return new GraphBuilderConfiguration(newEagerResolving, unresolvedIsError, bytecodeExceptionMode, omitAssertions, insertFullInfopoints, trackNodeSourcePosition, skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withSkippedExceptionTypes(ResolvedJavaType[] newSkippedExceptionTypes) {
! return new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, bytecodeExceptionMode, omitAssertions, insertFullInfopoints, trackNodeSourcePosition, newSkippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withBytecodeExceptionMode(BytecodeExceptionMode newBytecodeExceptionMode) {
! return new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, newBytecodeExceptionMode, omitAssertions, insertFullInfopoints, trackNodeSourcePosition, skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withOmitAssertions(boolean newOmitAssertions) {
! return new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, bytecodeExceptionMode, newOmitAssertions, insertFullInfopoints, trackNodeSourcePosition, skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withFullInfopoints(boolean newInsertFullInfopoints) {
! ResolvedJavaType[] newSkippedExceptionTypes = skippedExceptionTypes == EMPTY ? EMPTY : Arrays.copyOf(skippedExceptionTypes, skippedExceptionTypes.length);
! return new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, bytecodeExceptionMode, omitAssertions, newInsertFullInfopoints, trackNodeSourcePosition, newSkippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withNodeSourcePosition(boolean newTrackNodeSourcePosition) {
! ResolvedJavaType[] newSkippedExceptionTypes = skippedExceptionTypes == EMPTY ? EMPTY : Arrays.copyOf(skippedExceptionTypes, skippedExceptionTypes.length);
! return new GraphBuilderConfiguration(eagerResolving, unresolvedIsError, bytecodeExceptionMode, omitAssertions, insertFullInfopoints, newTrackNodeSourcePosition, newSkippedExceptionTypes,
plugins);
}
! public ResolvedJavaType[] getSkippedExceptionTypes() {
return skippedExceptionTypes;
}
public boolean eagerResolving() {
return eagerResolving;
--- 246,357 ----
* this configuration become the {@linkplain InvocationPlugins#getParent() parent} of the
* {@link InvocationPlugins} in the copy.
*/
public GraphBuilderConfiguration copy() {
Plugins newPlugins = new Plugins(plugins);
! GraphBuilderConfiguration result = new GraphBuilderConfiguration(
! eagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
! newPlugins);
return result;
}
/**
* Set the {@link #unresolvedIsError} flag. This flag can be set independently from
* {@link #eagerResolving}, i.e., even if eager resolving fails execution is assumed to be
* valid. This allows us for example to process unresolved types/methods/fields even when
* eagerly resolving elements.
*/
public GraphBuilderConfiguration withUnresolvedIsError(boolean newUnresolvedIsError) {
! return new GraphBuilderConfiguration(
! eagerResolving,
! newUnresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withEagerResolving(boolean newEagerResolving) {
! return new GraphBuilderConfiguration(
! newEagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withSkippedExceptionTypes(ResolvedJavaType[] newSkippedExceptionTypes) {
! return new GraphBuilderConfiguration(
! eagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! Collections.unmodifiableList(Arrays.asList(newSkippedExceptionTypes)),
plugins);
}
public GraphBuilderConfiguration withBytecodeExceptionMode(BytecodeExceptionMode newBytecodeExceptionMode) {
! return new GraphBuilderConfiguration(eagerResolving,
! unresolvedIsError,
! newBytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withOmitAssertions(boolean newOmitAssertions) {
! return new GraphBuilderConfiguration(
! eagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! newOmitAssertions,
! insertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withFullInfopoints(boolean newInsertFullInfopoints) {
! return new GraphBuilderConfiguration(
! eagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! newInsertFullInfopoints,
! trackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
public GraphBuilderConfiguration withNodeSourcePosition(boolean newTrackNodeSourcePosition) {
! return new GraphBuilderConfiguration(
! eagerResolving,
! unresolvedIsError,
! bytecodeExceptionMode,
! omitAssertions,
! insertFullInfopoints,
! newTrackNodeSourcePosition,
! skippedExceptionTypes,
plugins);
}
! public List<ResolvedJavaType> getSkippedExceptionTypes() {
return skippedExceptionTypes;
}
public boolean eagerResolving() {
return eagerResolving;
*** 319,333 ****
public boolean insertFullInfopoints() {
return insertFullInfopoints;
}
public static GraphBuilderConfiguration getDefault(Plugins plugins) {
! return new GraphBuilderConfiguration(false, false, BytecodeExceptionMode.Profile, false, false, false, EMPTY, plugins);
}
public static GraphBuilderConfiguration getSnippetDefault(Plugins plugins) {
! return new GraphBuilderConfiguration(true, true, BytecodeExceptionMode.OmitAll, false, false, false, EMPTY, plugins);
}
/** Returns {@code true} if it is an error for a class/field/method resolution to fail. */
public boolean unresolvedIsError() {
return unresolvedIsError;
--- 372,402 ----
public boolean insertFullInfopoints() {
return insertFullInfopoints;
}
public static GraphBuilderConfiguration getDefault(Plugins plugins) {
! return new GraphBuilderConfiguration(
! /* eagerResolving: */ false,
! /* unresolvedIsError: */ false,
! BytecodeExceptionMode.Profile,
! /* omitAssertions: */ false,
! /* insertFullInfopoints: */ false,
! /* trackNodeSourcePosition: */ false,
! Collections.emptyList(),
! plugins);
}
public static GraphBuilderConfiguration getSnippetDefault(Plugins plugins) {
! return new GraphBuilderConfiguration(
! /* eagerResolving: */ true,
! /* unresolvedIsError: */ true,
! BytecodeExceptionMode.OmitAll,
! /* omitAssertions: */ false,
! /* insertFullInfopoints: */ false,
! /* trackNodeSourcePosition: */ false,
! Collections.emptyList(),
! plugins);
}
/** Returns {@code true} if it is an error for a class/field/method resolution to fail. */
public boolean unresolvedIsError() {
return unresolvedIsError;
< prev index next >