annotate graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java @ 20835:a2cd0e7072e2

added MethodSubstitutionPlugin as (eventual) replacement for @MethodSubstitution mechanism
author Doug Simon <doug.simon@oracle.com>
date Tue, 07 Apr 2015 17:32:26 +0200
parents e807c6f675de
children 2228b4368946
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20162
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.replacements;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
25 import com.oracle.graal.api.code.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
26 import com.oracle.graal.api.meta.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
27 import com.oracle.graal.api.replacements.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
28 import com.oracle.graal.compiler.common.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
29 import com.oracle.graal.compiler.common.type.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
30 import com.oracle.graal.graphbuilderconf.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
31 import com.oracle.graal.graphbuilderconf.InvocationPlugins.Receiver;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
32 import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
33 import com.oracle.graal.nodes.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
34 import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35 import com.oracle.graal.nodes.calc.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
36 import com.oracle.graal.nodes.spi.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
37 import com.oracle.graal.phases.util.*;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
38
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
39 /**
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
40 * Implementation of {@link GraphBuilderContext} used to produce a graph for a method based on an
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
41 * {@link InvocationPlugin} for the method.
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
42 */
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
43 public class IntrinsicGraphBuilder implements GraphBuilderContext, Receiver {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
45 private final Providers providers;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
46 private final SnippetReflectionProvider snippetReflection;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
47 private final StructuredGraph graph;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
48 private final ResolvedJavaMethod method;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
49 private FixedWithNextNode lastInstr;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
50 private ValueNode[] arguments;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
51 private ValueNode returnValue;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
52
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
53 public IntrinsicGraphBuilder(Providers providers, SnippetReflectionProvider snippetReflection, ResolvedJavaMethod method) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
54 this.providers = providers;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
55 this.snippetReflection = snippetReflection;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
56 this.graph = new StructuredGraph(method, AllowAssumptions.YES);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
57 this.method = method;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
58 this.lastInstr = graph.start();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
59
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
60 Signature sig = method.getSignature();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
61 int max = sig.getParameterCount(false);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
62 this.arguments = new ValueNode[max + (method.isStatic() ? 0 : 1)];
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
63
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
64 int javaIndex = 0;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
65 int index = 0;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
66 if (!method.isStatic()) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
67 // add the receiver
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
68 Stamp receiverStamp = StampFactory.declaredNonNull(method.getDeclaringClass());
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
69 FloatingNode receiver = graph.addWithoutUnique(new ParameterNode(javaIndex, receiverStamp));
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
70 arguments[index] = receiver;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
71 javaIndex = 1;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
72 index = 1;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
73 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74 ResolvedJavaType accessingClass = method.getDeclaringClass();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75 for (int i = 0; i < max; i++) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
76 JavaType type = sig.getParameterType(i, accessingClass).resolve(accessingClass);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
77 Kind kind = type.getKind();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
78 Stamp stamp;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79 if (kind == Kind.Object && type instanceof ResolvedJavaType) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
80 stamp = StampFactory.declared((ResolvedJavaType) type);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
81 } else {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
82 stamp = StampFactory.forKind(kind);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
83 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
84 FloatingNode param = graph.addWithoutUnique(new ParameterNode(index, stamp));
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
85 arguments[index] = param;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
86 javaIndex += kind.getSlotCount();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
87 index++;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
88 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
89 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
90
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
91 private <T extends ValueNode> void updateLastInstruction(T v) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
92 if (v instanceof FixedNode) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
93 FixedNode fixedNode = (FixedNode) v;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
94 lastInstr.setNext(fixedNode);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
95 if (fixedNode instanceof FixedWithNextNode) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
96 FixedWithNextNode fixedWithNextNode = (FixedWithNextNode) fixedNode;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
97 assert fixedWithNextNode.next() == null : "cannot append instruction to instruction which isn't end";
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
98 lastInstr = fixedWithNextNode;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
99 } else {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
100 lastInstr = null;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
101 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
102 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
103 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
104
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
105 public <T extends ValueNode> T append(T v) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106 if (v.graph() != null) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
107 return v;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
108 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
109 T added = graph.addOrUnique(v);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
110 if (added == v) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
111 updateLastInstruction(v);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
113 return added;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
114 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116 public <T extends ValueNode> T recursiveAppend(T v) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
117 if (v.graph() != null) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
118 return v;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
119 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
120 T added = graph.addOrUniqueWithInputs(v);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
121 if (added == v) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
122 updateLastInstruction(v);
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
123 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
124 return added;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
125 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
126
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
127 public void push(Kind kind, ValueNode value) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
128 assert kind != Kind.Void;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
129 assert returnValue == null;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
130 returnValue = value;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
131 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
132
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
133 public void handleReplacedInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
134 throw GraalInternalError.shouldNotReachHere();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
135 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
136
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
137 public StampProvider getStampProvider() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
138 return providers.getStampProvider();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
139 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
140
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
141 public MetaAccessProvider getMetaAccess() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
142 return providers.getMetaAccess();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
144
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 public ConstantReflectionProvider getConstantReflection() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
146 return providers.getConstantReflection();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
147 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
148
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
149 public SnippetReflectionProvider getSnippetReflection() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
150 return snippetReflection;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
151 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
152
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
153 public StructuredGraph getGraph() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
154 return graph;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
155 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
156
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
157 public FrameState createStateAfter() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
158 return getGraph().add(new FrameState(BytecodeFrame.BEFORE_BCI));
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
159 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
160
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
161 public GraphBuilderContext getParent() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
162 return null;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
163 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
164
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
165 public ResolvedJavaMethod getMethod() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
166 return method;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
167 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
168
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
169 public int bci() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
170 return -1;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
171 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
172
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
173 public InvokeKind getInvokeKind() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174 return method.isStatic() ? InvokeKind.Static : InvokeKind.Virtual;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
175 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
177 public JavaType getInvokeReturnType() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
178 return method.getSignature().getReturnType(method.getDeclaringClass());
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
179 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
180
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
181 public int getDepth() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
182 return 0;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
183 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
184
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
185 public boolean parsingReplacement() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
186 return true;
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
187 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
188
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
189 public Replacement getReplacement() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
190 throw GraalInternalError.shouldNotReachHere();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
191 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
192
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
193 public BailoutException bailout(String string) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
194 throw GraalInternalError.shouldNotReachHere();
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
195 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
196
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
197 public ValueNode get() {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
198 return arguments[0];
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
199 }
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
200
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
201 public StructuredGraph buildGraph(InvocationPlugin plugin) {
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
202 Receiver receiver = method.isStatic() ? null : this;
20834
e807c6f675de changed InvocationPlugin.execute to be a default method instead of a static method
Doug Simon <doug.simon@oracle.com>
parents: 20168
diff changeset
203 if (plugin.execute(this, method, receiver, arguments)) {
20168
f0f725496f2a account for InvocationPlugins that don't return true when using them for late inlining
Doug Simon <doug.simon@oracle.com>
parents: 20165
diff changeset
204 assert (returnValue != null) == (method.getSignature().getReturnKind() != Kind.Void) : method;
f0f725496f2a account for InvocationPlugins that don't return true when using them for late inlining
Doug Simon <doug.simon@oracle.com>
parents: 20165
diff changeset
205 append(new ReturnNode(returnValue));
f0f725496f2a account for InvocationPlugins that don't return true when using them for late inlining
Doug Simon <doug.simon@oracle.com>
parents: 20165
diff changeset
206 return graph;
f0f725496f2a account for InvocationPlugins that don't return true when using them for late inlining
Doug Simon <doug.simon@oracle.com>
parents: 20165
diff changeset
207 }
f0f725496f2a account for InvocationPlugins that don't return true when using them for late inlining
Doug Simon <doug.simon@oracle.com>
parents: 20165
diff changeset
208 return null;
20162
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
209 }
20835
a2cd0e7072e2 added MethodSubstitutionPlugin as (eventual) replacement for @MethodSubstitution mechanism
Doug Simon <doug.simon@oracle.com>
parents: 20834
diff changeset
210
a2cd0e7072e2 added MethodSubstitutionPlugin as (eventual) replacement for @MethodSubstitution mechanism
Doug Simon <doug.simon@oracle.com>
parents: 20834
diff changeset
211 public void intrinsify(ResolvedJavaMethod targetMethod, ResolvedJavaMethod substitute, ValueNode[] args) {
a2cd0e7072e2 added MethodSubstitutionPlugin as (eventual) replacement for @MethodSubstitution mechanism
Doug Simon <doug.simon@oracle.com>
parents: 20834
diff changeset
212 throw GraalInternalError.shouldNotReachHere();
a2cd0e7072e2 added MethodSubstitutionPlugin as (eventual) replacement for @MethodSubstitution mechanism
Doug Simon <doug.simon@oracle.com>
parents: 20834
diff changeset
213 }
20162
ba0f264a71cf added support for inlining graphs derived from InvocationPlugins
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
214 }