Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java @ 19410:61d3cb8e1280
Add generic parameter to NodeClass. Change Graph#getNodes(Class) to Graph#getNodes(NodeClass).
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 16 Feb 2015 17:47:43 +0100 |
parents | 2b392a92e27b |
children | b7477f2df553 |
rev | line source |
---|---|
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
1 /* |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
4 * |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
8 * |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
14 * |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
18 * |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
21 * questions. |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
22 */ |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.phases.common.inlining.info; |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
24 |
15957
cf51d3ade2fb
less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15800
diff
changeset
|
25 import java.util.*; |
cf51d3ade2fb
less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15800
diff
changeset
|
26 |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
27 import com.oracle.graal.api.meta.*; |
15957
cf51d3ade2fb
less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15800
diff
changeset
|
28 import com.oracle.graal.graph.*; |
cf51d3ade2fb
less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15800
diff
changeset
|
29 import com.oracle.graal.nodes.*; |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
30 import com.oracle.graal.phases.common.*; |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
31 import com.oracle.graal.phases.common.inlining.*; |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
32 import com.oracle.graal.phases.common.inlining.info.elem.*; |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
33 import com.oracle.graal.phases.tiers.*; |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
34 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
35 public abstract class AbstractInlineInfo implements InlineInfo { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
36 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
37 protected final Invoke invoke; |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
38 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
39 public AbstractInlineInfo(Invoke invoke) { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
40 this.invoke = invoke; |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
41 } |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
42 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
43 @Override |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
44 public StructuredGraph graph() { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
45 return invoke.asNode().graph(); |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
46 } |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
47 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
48 @Override |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
49 public Invoke invoke() { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
50 return invoke; |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
51 } |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
52 |
19250
8ab925a6f724
made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
16176
diff
changeset
|
53 protected static Collection<Node> inline(Invoke invoke, ResolvedJavaMethod concrete, Inlineable inlineable, boolean receiverNullCheck) { |
16176
5785eca138b0
improve tracking of nodes to canonicalize after inlining
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16148
diff
changeset
|
54 List<Node> canonicalizeNodes = new ArrayList<>(); |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
55 if (inlineable instanceof InlineableGraph) { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
56 StructuredGraph calleeGraph = ((InlineableGraph) inlineable).getGraph(); |
16176
5785eca138b0
improve tracking of nodes to canonicalize after inlining
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16148
diff
changeset
|
57 Map<Node, Node> duplicateMap = InliningUtil.inline(invoke, calleeGraph, receiverNullCheck, canonicalizeNodes); |
5785eca138b0
improve tracking of nodes to canonicalize after inlining
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16148
diff
changeset
|
58 getInlinedParameterUsages(canonicalizeNodes, calleeGraph, duplicateMap); |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
59 } else { |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
60 assert inlineable instanceof InlineableMacroNode; |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
61 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
62 Class<? extends FixedWithNextNode> macroNodeClass = ((InlineableMacroNode) inlineable).getMacroNodeClass(); |
15957
cf51d3ade2fb
less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15800
diff
changeset
|
63 FixedWithNextNode macroNode = InliningUtil.inlineMacroNode(invoke, concrete, macroNodeClass); |
16176
5785eca138b0
improve tracking of nodes to canonicalize after inlining
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16148
diff
changeset
|
64 canonicalizeNodes.add(macroNode); |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
65 } |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
66 |
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
67 InliningUtil.InlinedBytecodes.add(concrete.getCodeSize()); |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
68 StructuredGraph graph = invoke.asNode().graph(); |
19346
2b392a92e27b
made it explicit that a StructuredGraph only records method dependencies for inlined methods - the root method is not recorded as it is already available in the 'method' field
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
69 if (graph.isInlinedMethodRecordingEnabled()) { |
2b392a92e27b
made it explicit that a StructuredGraph only records method dependencies for inlined methods - the root method is not recorded as it is already available in the 'method' field
Doug Simon <doug.simon@oracle.com>
parents:
19306
diff
changeset
|
70 graph.getInlinedMethods().add(concrete); |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19250
diff
changeset
|
71 } |
16176
5785eca138b0
improve tracking of nodes to canonicalize after inlining
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16148
diff
changeset
|
72 return canonicalizeNodes; |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
73 } |
15964
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
74 |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
75 public static void getInlinedParameterUsages(Collection<Node> parameterUsages, StructuredGraph calleeGraph, Map<Node, Node> duplicateMap) { |
19410
61d3cb8e1280
Add generic parameter to NodeClass. Change Graph#getNodes(Class) to Graph#getNodes(NodeClass).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19346
diff
changeset
|
76 for (ParameterNode parameter : calleeGraph.getNodes(ParameterNode.TYPE)) { |
15964
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
77 for (Node usage : parameter.usages()) { |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
78 Node node = duplicateMap.get(usage); |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
79 if (node != null && node.isAlive()) { |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
80 parameterUsages.add(node); |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
81 } |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
82 } |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
83 } |
9d7b2134c4ce
less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15957
diff
changeset
|
84 } |
16055
1461d7627707
[inliner] another mutator that finds its way to the class where it belongs
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
15964
diff
changeset
|
85 |
19250
8ab925a6f724
made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
16176
diff
changeset
|
86 public final void populateInlinableElements(HighTierContext context, StructuredGraph caller, CanonicalizerPhase canonicalizer) { |
16055
1461d7627707
[inliner] another mutator that finds its way to the class where it belongs
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
15964
diff
changeset
|
87 for (int i = 0; i < numberOfMethods(); i++) { |
19250
8ab925a6f724
made Assumptions be part of a StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
16176
diff
changeset
|
88 Inlineable elem = Inlineable.getInlineableElement(methodAt(i), invoke, context, canonicalizer); |
16055
1461d7627707
[inliner] another mutator that finds its way to the class where it belongs
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
15964
diff
changeset
|
89 setInlinableElement(i, elem); |
1461d7627707
[inliner] another mutator that finds its way to the class where it belongs
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
15964
diff
changeset
|
90 } |
1461d7627707
[inliner] another mutator that finds its way to the class where it belongs
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
15964
diff
changeset
|
91 } |
16056
61cf8b61ee4e
[inliner] added a factory method in InlineInfo to make code uniform elsewhere
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16055
diff
changeset
|
92 |
16147
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
93 public final int determineNodeCount() { |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
94 int nodes = 0; |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
95 for (int i = 0; i < numberOfMethods(); i++) { |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
96 Inlineable elem = inlineableElementAt(i); |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
97 if (elem != null) { |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
98 nodes += elem.getNodeCount(); |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
99 } |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
100 } |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
101 return nodes; |
f75c23a505e1
[inliner] moved determineNodeCount() to InlineInfo
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
16057
diff
changeset
|
102 } |
15644
cd436bc5d63a
[inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff
changeset
|
103 } |