--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/Replacements.java Tue Apr 23 14:09:54 2019 -0400
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/spi/Replacements.java Tue Apr 23 22:55:09 2019 +0200
@@ -26,7 +26,6 @@
import org.graalvm.compiler.api.replacements.MethodSubstitution;
import org.graalvm.compiler.api.replacements.SnippetTemplateCache;
-import org.graalvm.compiler.bytecode.Bytecode;
import org.graalvm.compiler.bytecode.BytecodeProvider;
import org.graalvm.compiler.core.common.CompilationIdentifier;
import org.graalvm.compiler.debug.DebugContext;
@@ -34,7 +33,9 @@
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderPlugin;
+import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
+import org.graalvm.compiler.nodes.graphbuilderconf.MethodSubstitutionPlugin;
import org.graalvm.compiler.options.OptionValues;
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -44,7 +45,7 @@
*/
public interface Replacements {
- OptionValues getOptions();
+ CoreProviders getProviders();
/**
* Gets the object managing the various graph builder plugins used by this object when parsing
@@ -60,30 +61,41 @@
/**
* Gets the snippet graph derived from a given method.
*
- * @param args arguments to the snippet if available, otherwise {@code null}
- * @param trackNodeSourcePosition
- * @return the snippet graph, if any, that is derived from {@code method}
- */
- default StructuredGraph getSnippet(ResolvedJavaMethod method, Object[] args, boolean trackNodeSourcePosition, NodeSourcePosition replaceePosition) {
- return getSnippet(method, null, args, trackNodeSourcePosition, replaceePosition);
- }
-
- /**
- * Gets the snippet graph derived from a given method.
- *
* @param recursiveEntry if the snippet contains a call to this method, it's considered as
* recursive call and won't be processed for {@linkplain MethodSubstitution
* substitutions}.
* @param args arguments to the snippet if available, otherwise {@code null}
* @param trackNodeSourcePosition
+ * @param options
* @return the snippet graph, if any, that is derived from {@code method}
*/
- StructuredGraph getSnippet(ResolvedJavaMethod method, ResolvedJavaMethod recursiveEntry, Object[] args, boolean trackNodeSourcePosition, NodeSourcePosition replaceePosition);
+ StructuredGraph getSnippet(ResolvedJavaMethod method, ResolvedJavaMethod recursiveEntry, Object[] args, boolean trackNodeSourcePosition, NodeSourcePosition replaceePosition,
+ OptionValues options);
/**
* Registers a method as snippet.
*/
- void registerSnippet(ResolvedJavaMethod method, ResolvedJavaMethod original, Object receiver, boolean trackNodeSourcePosition);
+ void registerSnippet(ResolvedJavaMethod method, ResolvedJavaMethod original, Object receiver, boolean trackNodeSourcePosition, OptionValues options);
+
+ /**
+ * Gets a graph that is a substitution for a given {@link MethodSubstitutionPlugin plugin} in
+ * the {@link org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext.CompilationContext
+ * context}.
+ *
+ * @param plugin the plugin being substituted
+ * @param original the method being substituted
+ * @param context the kind of inlining to be performed for the substitution
+ * @param allowAssumptions
+ * @param options
+ * @return the method substitution graph, if any, that is derived from {@code method}
+ */
+ StructuredGraph getMethodSubstitution(MethodSubstitutionPlugin plugin, ResolvedJavaMethod original, IntrinsicContext.CompilationContext context,
+ StructuredGraph.AllowAssumptions allowAssumptions, OptionValues options);
+
+ /**
+ * Registers a plugin as a substitution.
+ */
+ void registerMethodSubstitution(MethodSubstitutionPlugin plugin, ResolvedJavaMethod original, IntrinsicContext.CompilationContext context, OptionValues options);
/**
* Gets a graph that is a substitution for a given method.
@@ -91,17 +103,10 @@
* @param invokeBci the call site BCI if this request is made for inlining a substitute
* otherwise {@code -1}
* @param trackNodeSourcePosition
+ * @param options
* @return the graph, if any, that is a substitution for {@code method}
*/
- StructuredGraph getSubstitution(ResolvedJavaMethod method, int invokeBci, boolean trackNodeSourcePosition, NodeSourcePosition replaceePosition);
-
- /**
- * Gets the substitute bytecode for a given method.
- *
- * @return the bytecode to substitute for {@code method} or {@code null} if there is no
- * substitute bytecode for {@code method}
- */
- Bytecode getSubstitutionBytecode(ResolvedJavaMethod method);
+ StructuredGraph getSubstitution(ResolvedJavaMethod method, int invokeBci, boolean trackNodeSourcePosition, NodeSourcePosition replaceePosition, OptionValues options);
/**
* Gets a graph produced from the intrinsic for a given method that can be compiled and
@@ -116,7 +121,7 @@
/**
* Determines if there may be a
- * {@linkplain #getSubstitution(ResolvedJavaMethod, int, boolean, NodeSourcePosition)
+ * {@linkplain #getSubstitution(ResolvedJavaMethod, int, boolean, NodeSourcePosition, OptionValues)
* substitution graph} for a given method.
*
* A call to {@link #getSubstitution} may still return {@code null} for {@code method} and