Mercurial > hg > truffle
annotate graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java @ 16970:818844f7224d
extract TypedNodeIterator to separate file and rename (workaround for javac bug)
author | Michael Haupt <michael.haupt@oracle.com> |
---|---|
date | Wed, 27 Aug 2014 11:56:35 +0200 |
parents | d569f2fafb6a |
children | 81c9a1fc9072 |
rev | line source |
---|---|
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
23 package com.oracle.graal.graph; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
16919
0fe4732e5181
made use of generated Node classes predicated on value of graal.useGeneratedNodes system property (default is false)
Doug Simon <doug.simon@oracle.com>
parents:
16897
diff
changeset
|
25 import static com.oracle.graal.graph.Node.*; |
0fe4732e5181
made use of generated Node classes predicated on value of graal.useGeneratedNodes system property (default is false)
Doug Simon <doug.simon@oracle.com>
parents:
16897
diff
changeset
|
26 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
27 import java.util.*; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
28 |
15193
96bb07a5d667
Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents:
15146
diff
changeset
|
29 import com.oracle.graal.compiler.common.*; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
30 import com.oracle.graal.debug.*; |
14991
64dcb92ee75a
Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14904
diff
changeset
|
31 import com.oracle.graal.graph.Node.ValueNumberable; |
16206
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
32 import com.oracle.graal.graph.NodeClass.NodeClassIterator; |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
33 import com.oracle.graal.graph.iterators.*; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
34 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
35 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
36 * This class is a graph container, it contains the set of nodes that belong to this graph. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
37 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
38 public class Graph { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
39 |
5361
dec5a35ddbe2
lowering checkcasts with Java snippets (incomplete)
Doug Simon <doug.simon@oracle.com>
parents:
5061
diff
changeset
|
40 public final String name; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
41 |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
42 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
43 * The set of nodes in the graph, ordered by {@linkplain #register(Node) registration} time. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
44 */ |
16948
d569f2fafb6a
more refactorings to workaround javac symbol issue (JDK-7101822)
Doug Simon <doug.simon@oracle.com>
parents:
16925
diff
changeset
|
45 Node[] nodes; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
46 |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
47 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
48 * The number of valid entries in {@link #nodes}. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
49 */ |
16948
d569f2fafb6a
more refactorings to workaround javac symbol issue (JDK-7101822)
Doug Simon <doug.simon@oracle.com>
parents:
16925
diff
changeset
|
50 int nodesSize; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
51 |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
52 /** |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
53 * Records the modification count for nodes. This is only used in assertions. |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
54 */ |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
55 private int[] nodeModCounts; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
56 |
11528
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
57 /** |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
58 * Records the modification count for nodes' usage lists. This is only used in assertions. |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
59 */ |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
60 private int[] nodeUsageModCounts; |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
61 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
62 // these two arrays contain one entry for each NodeClass, indexed by NodeClass.iterableId. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
63 // they contain the first and last pointer to a linked list of all nodes with this type. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
64 private final ArrayList<Node> nodeCacheFirst; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
65 private final ArrayList<Node> nodeCacheLast; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
66 private int nodesDeletedSinceLastCompression; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
67 private int nodesDeletedBeforeLastCompression; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
68 |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
69 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
70 * The number of times this graph has been compressed. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
71 */ |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
72 int compressions; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
73 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
74 NodeEventListener nodeEventListener; |
4142
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
75 private final HashMap<CacheEntry, Node> cachedNodes = new HashMap<>(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
76 |
13744
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
77 /* |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
78 * Indicates that the graph should no longer be modified. Frozen graphs can be used my multiple |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
79 * threads so it's only safe to read them. |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
80 */ |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
81 private boolean isFrozen = false; |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
82 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
83 private static final class CacheEntry { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
84 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
85 private final Node node; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
86 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
87 public CacheEntry(Node node) { |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
88 assert node.getNodeClass().valueNumberable(); |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
89 assert node.isLeafNode(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
90 this.node = node; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
91 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
92 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
93 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
94 public int hashCode() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
95 return node.getNodeClass().valueNumber(node); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
96 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
97 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
98 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
99 public boolean equals(Object obj) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
100 if (obj == this) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
101 return true; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
102 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
103 if (obj instanceof CacheEntry) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
104 CacheEntry other = (CacheEntry) obj; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
105 NodeClass nodeClass = node.getNodeClass(); |
11666
3967f9f306f8
Factor usages of getNodeClass().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11654
diff
changeset
|
106 if (other.node.getClass() == node.getClass()) { |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
107 return nodeClass.valueEqual(node, other.node); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
108 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
109 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
110 return false; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
111 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
112 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
113 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
114 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
115 * Creates an empty Graph with no name. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
116 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
117 public Graph() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
118 this(null); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
119 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
120 |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
121 public static final boolean MODIFICATION_COUNTS_ENABLED = assertionsEnabled(); |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
122 |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
123 /** |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
124 * Determines if assertions are enabled for the {@link Graph} class. |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
125 */ |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
126 @SuppressWarnings("all") |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
127 private static boolean assertionsEnabled() { |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
128 boolean enabled = false; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
129 assert enabled = true; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
130 return enabled; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
131 } |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
132 |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
133 private static final int INITIAL_NODES_SIZE = 32; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
134 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
135 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
136 * Creates an empty Graph with a given name. |
14904 | 137 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
138 * @param name the name of the graph, used for debugging purposes |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
139 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
140 public Graph(String name) { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
141 nodes = new Node[INITIAL_NODES_SIZE]; |
4142
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
142 nodeCacheFirst = new ArrayList<>(NodeClass.cacheSize()); |
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
143 nodeCacheLast = new ArrayList<>(NodeClass.cacheSize()); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
144 this.name = name; |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
145 if (MODIFICATION_COUNTS_ENABLED) { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
146 nodeModCounts = new int[INITIAL_NODES_SIZE]; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
147 nodeUsageModCounts = new int[INITIAL_NODES_SIZE]; |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
148 } |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
149 } |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
150 |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
151 int extractOriginalNodeId(Node node) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
152 int id = node.id; |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
153 if (id <= Node.DELETED_ID_START) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
154 id = Node.DELETED_ID_START - id; |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
155 } |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
156 return id; |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
157 } |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
158 |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
159 int modCount(Node node) { |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
160 int id = extractOriginalNodeId(node); |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
161 if (id >= 0 && id < nodeModCounts.length) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
162 return nodeModCounts[id]; |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
163 } |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
164 return 0; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
165 } |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
166 |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
167 void incModCount(Node node) { |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
168 int id = extractOriginalNodeId(node); |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
169 if (id >= 0) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
170 if (id >= nodeModCounts.length) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
171 nodeModCounts = Arrays.copyOf(nodeModCounts, id + 30); |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
172 } |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
173 nodeModCounts[id]++; |
11524
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
174 } else { |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
175 assert false; |
dede53632f3e
removed Node.modCount field (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11437
diff
changeset
|
176 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
177 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
178 |
11528
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
179 int usageModCount(Node node) { |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
180 int id = extractOriginalNodeId(node); |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
181 if (id >= 0 && id < nodeUsageModCounts.length) { |
11555
8d52ef9ab876
Graph: fix index of array access in usageModCount()
Bernhard Urban <bernhard.urban@jku.at>
parents:
11540
diff
changeset
|
182 return nodeUsageModCounts[id]; |
11528
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
183 } |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
184 return 0; |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
185 } |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
186 |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
187 void incUsageModCount(Node node) { |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
188 int id = extractOriginalNodeId(node); |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
189 if (id >= 0) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
190 if (id >= nodeUsageModCounts.length) { |
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
191 nodeUsageModCounts = Arrays.copyOf(nodeUsageModCounts, id + 30); |
11528
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
192 } |
11540
601755e6848b
Allow getting modCount fo deleted nodes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11528
diff
changeset
|
193 nodeUsageModCounts[id]++; |
11528
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
194 } else { |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
195 assert false; |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
196 } |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
197 } |
8f500c7a510a
inlined NodeUsageList into Node (GRAAL-452)
Doug Simon <doug.simon@oracle.com>
parents:
11524
diff
changeset
|
198 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
199 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
200 * Creates a copy of this graph. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
201 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
202 public Graph copy() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
203 return copy(name); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
204 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
205 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
206 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
207 * Creates a copy of this graph. |
14904 | 208 * |
5711
4d7175cf3526
enabled Eclipse/JDT javadoc checking and fixed resulting warnings
Doug Simon <doug.simon@oracle.com>
parents:
5608
diff
changeset
|
209 * @param newName the name of the copy, used for debugging purposes (can be null) |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
210 */ |
4142
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
211 public Graph copy(String newName) { |
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
212 Graph copy = new Graph(newName); |
11675
77d9f12797c5
Use NodeMap in inlining utility when number of nodes is high.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11671
diff
changeset
|
213 copy.addDuplicates(getNodes(), this, this.getNodeCount(), (Map<Node, Node>) null); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
214 return copy; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
215 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
216 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
217 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
218 public String toString() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
219 return name == null ? super.toString() : "Graph " + name; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
220 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
221 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
222 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
223 * Gets the number of live nodes in this graph. That is the number of nodes which have been |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
224 * added to the graph minus the number of deleted nodes. |
14904 | 225 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
226 * @return the number of live nodes in this graph |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
227 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
228 public int getNodeCount() { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
229 return nodesSize - getNodesDeletedSinceLastCompression(); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
230 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
231 |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
232 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
233 * Gets the number of times this graph has been {@linkplain #maybeCompress() compressed}. Node |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
234 * identifiers are only stable between compressions. To ensure this constraint is observed, any |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
235 * entity relying upon stable node identifiers should use {@link NodeIdAccessor}. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
236 */ |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
237 public int getCompressions() { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
238 return compressions; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
239 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
240 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
241 /** |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
242 * Gets the number of nodes which have been deleted from this graph since it was last |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
243 * {@linkplain #maybeCompress() compressed}. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
244 */ |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
245 public int getNodesDeletedSinceLastCompression() { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
246 return nodesDeletedSinceLastCompression; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
247 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
248 |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
249 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
250 * Gets the total number of nodes which have been deleted from this graph. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
251 */ |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
252 public int getTotalNodesDeleted() { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
253 return nodesDeletedSinceLastCompression + nodesDeletedBeforeLastCompression; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
254 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
255 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
256 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
257 * Adds a new node to the graph. |
14904 | 258 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
259 * @param node the node to be added |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
260 * @return the node which was added to the graph |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
261 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
262 public <T extends Node> T add(T node) { |
11652
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
263 if (node.getNodeClass().valueNumberable()) { |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
264 throw new IllegalStateException("Using add for value numberable node. Consider using either unique or addWithoutUnique."); |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
265 } |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
266 return addHelper(node); |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
267 } |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
268 |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
269 public <T extends Node> T addWithoutUnique(T node) { |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
270 return addHelper(node); |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
271 } |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
272 |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
273 public <T extends Node> T addOrUnique(T node) { |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
274 if (node.getNodeClass().valueNumberable()) { |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
275 return uniqueHelper(node, true); |
11652
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
276 } |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
277 return add(node); |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
278 } |
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
279 |
16206
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
280 public <T extends Node> T addOrUniqueWithInputs(T node) { |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
281 NodeClassIterator iterator = node.inputs().iterator(); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
282 while (iterator.hasNext()) { |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
283 Position pos = iterator.nextPosition(); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
284 Node input = pos.get(node); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
285 if (input != null && !input.isAlive()) { |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
286 assert !input.isDeleted(); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
287 pos.initialize(node, addOrUniqueWithInputs(input)); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
288 } |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
289 } |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
290 if (node.getNodeClass().valueNumberable()) { |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
291 return uniqueHelper(node, true); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
292 } |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
293 return add(node); |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
294 } |
2a1f3a8f76f1
handle Canonicalizable.Unary/Binary in CanonicalizerPhase and EquationalReasoner
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16135
diff
changeset
|
295 |
11652
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
296 private <T extends Node> T addHelper(T node) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
297 node.initialize(this); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
298 return node; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
299 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
300 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
301 /** |
16295
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
302 * The type of events sent to a {@link NodeEventListener}. |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
303 */ |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
304 public enum NodeEvent { |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
305 /** |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
306 * A node's input is changed. |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
307 */ |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
308 INPUT_CHANGED, |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
309 |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
310 /** |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
311 * A node's {@linkplain Node#usages() usages} count dropped to zero. |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
312 */ |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
313 ZERO_USAGES, |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
314 |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
315 /** |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
316 * A node was added to a graph. |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
317 */ |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
318 NODE_ADDED; |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
319 } |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
320 |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
321 /** |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
322 * Client interested in one or more node related events. |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
323 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
324 public interface NodeEventListener { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
325 |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
326 /** |
16295
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
327 * Default handler for events. |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
328 * |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
329 * @param e an event |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
330 * @param node the node related to {@code e} |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
331 */ |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
332 default void event(NodeEvent e, Node node) { |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
333 } |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
334 |
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
335 /** |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
336 * Notifies this listener of a change in a node's inputs. |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
337 * |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
338 * @param node a node who has had one of its inputs changed |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
339 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
340 default void inputChanged(Node node) { |
16295
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
341 event(NodeEvent.INPUT_CHANGED, node); |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
342 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
343 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
344 /** |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
345 * Notifies this listener of a node becoming unused. |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
346 * |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
347 * @param node a node whose {@link Node#usages()} just became empty |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
348 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
349 default void usagesDroppedToZero(Node node) { |
16295
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
350 event(NodeEvent.ZERO_USAGES, node); |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
351 } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
352 |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
353 /** |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
354 * Notifies this listener of an added node. |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
355 * |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
356 * @param node a node that was just added to the graph |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
357 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
358 default void nodeAdded(Node node) { |
16295
d9de8f5197e1
simplified NodeEventListener implementations by having all events routed to a single method by default
Doug Simon <doug.simon@oracle.com>
parents:
16293
diff
changeset
|
359 event(NodeEvent.NODE_ADDED, node); |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
360 } |
5419
3c16d338888e
Merge Canonicalizer and GVN Phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5380
diff
changeset
|
361 } |
3c16d338888e
Merge Canonicalizer and GVN Phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5380
diff
changeset
|
362 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
363 /** |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
364 * Registers a given {@link NodeEventListener} with the enclosing graph until this object is |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
365 * {@linkplain #close() closed}. |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
366 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
367 public final class NodeEventScope implements AutoCloseable { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
368 NodeEventScope(NodeEventListener listener) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
369 if (nodeEventListener == null) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
370 nodeEventListener = listener; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
371 } else { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
372 nodeEventListener = new ChainedNodeEventListener(listener, nodeEventListener); |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
373 } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
374 } |
11735
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
375 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
376 public void close() { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
377 assert nodeEventListener != null; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
378 if (nodeEventListener instanceof ChainedNodeEventListener) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
379 nodeEventListener = ((ChainedNodeEventListener) nodeEventListener).next; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
380 } else { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
381 nodeEventListener = null; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
382 } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
383 } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
384 } |
11735
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
385 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
386 private static class ChainedNodeEventListener implements NodeEventListener { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
387 |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
388 NodeEventListener head; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
389 NodeEventListener next; |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
390 |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
391 ChainedNodeEventListener(NodeEventListener head, NodeEventListener next) { |
11735
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
392 this.head = head; |
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
393 this.next = next; |
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
394 } |
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
395 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
396 public void nodeAdded(Node node) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
397 head.nodeAdded(node); |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
398 next.nodeAdded(node); |
11735
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
399 } |
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
400 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
401 public void inputChanged(Node node) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
402 head.inputChanged(node); |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
403 next.inputChanged(node); |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
404 } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
405 |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
406 public void usagesDroppedToZero(Node node) { |
16296
f2d75b3b3963
fixed incorrect forwarding of ZERO_USAGEs event in ChainedNodeEventListener
Doug Simon <doug.simon@oracle.com>
parents:
16295
diff
changeset
|
407 head.usagesDroppedToZero(node); |
f2d75b3b3963
fixed incorrect forwarding of ZERO_USAGEs event in ChainedNodeEventListener
Doug Simon <doug.simon@oracle.com>
parents:
16295
diff
changeset
|
408 next.usagesDroppedToZero(node); |
11735
9c9683970656
Allow multiple NodeChangedListeners.
Roland Schatz <roland.schatz@oracle.com>
parents:
11728
diff
changeset
|
409 } |
4614
a3882fd1ae61
Make it possible to have multiple LoopEnds per LoopBegin
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4411
diff
changeset
|
410 } |
a3882fd1ae61
Make it possible to have multiple LoopEnds per LoopBegin
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
4411
diff
changeset
|
411 |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
412 /** |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
413 * Registers a given {@link NodeEventListener} with this graph. This should be used in |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
414 * conjunction with try-with-resources statement as follows: |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
415 * |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
416 * <pre> |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
417 * try (NodeEventScope nes = graph.trackNodeEvents(listener)) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
418 * // make changes to the graph |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
419 * } |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
420 * </pre> |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
421 */ |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
422 public NodeEventScope trackNodeEvents(NodeEventListener listener) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
423 return new NodeEventScope(listener); |
9331
199c77760850
Rename InputChangedListener => NodeChangedListener. Add event for usage count of a node dropping to 0.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8327
diff
changeset
|
424 } |
199c77760850
Rename InputChangedListener => NodeChangedListener. Add event for usage count of a node dropping to 0.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8327
diff
changeset
|
425 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
426 /** |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
427 * Looks for a node <i>similar</i> to {@code node} and returns it if found. Otherwise |
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
428 * {@code node} is added to this graph and returned. |
14904 | 429 * |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
430 * @return a node similar to {@code node} if one exists, otherwise {@code node} |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
431 */ |
14904 | 432 public <T extends Node & ValueNumberable> T unique(T node) { |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
433 return uniqueHelper(node, true); |
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
434 } |
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
435 |
11652
f091e0d6f4f3
Disallow add for global value numberable node types. Introduce addWithoutUnique.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11631
diff
changeset
|
436 @SuppressWarnings("unchecked") |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
437 <T extends Node> T uniqueHelper(T node, boolean addIfMissing) { |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
438 assert node.getNodeClass().valueNumberable(); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
439 Node other = this.findDuplicate(node); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
440 if (other != null) { |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
441 return (T) other; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
442 } else { |
12655
2c4aa758ee18
made ConstantNodes external to a Graph (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
12570
diff
changeset
|
443 Node result = addIfMissing ? addHelper(node) : node; |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
444 if (node.isLeafNode()) { |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
445 putNodeIntoCache(result); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
446 } |
4646
75dcf829cfdc
experimental: "next" successor on all nodes
Lukas Stadler <lukas.stadler@jku.at>
parents:
4614
diff
changeset
|
447 return (T) result; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
448 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
449 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
450 |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
451 void putNodeIntoCache(Node node) { |
13327
c258331fdde6
removed support for external nodes (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
13140
diff
changeset
|
452 assert node.graph() == this || node.graph() == null; |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
453 assert node.getNodeClass().valueNumberable(); |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
454 assert node.isLeafNode() : node.getClass(); |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
455 cachedNodes.put(new CacheEntry(node), node); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
456 } |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
457 |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
458 Node findNodeInCache(Node node) { |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
459 CacheEntry key = new CacheEntry(node); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
460 Node result = cachedNodes.get(key); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
461 if (result != null && result.isDeleted()) { |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
462 cachedNodes.remove(key); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
463 return null; |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
464 } |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
465 return result; |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
466 } |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
467 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
468 public Node findDuplicate(Node node) { |
11654
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
469 NodeClass nodeClass = node.getNodeClass(); |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
470 assert nodeClass.valueNumberable(); |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
471 if (node.isLeafNode()) { |
11653
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
472 Node cachedNode = findNodeInCache(node); |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
473 if (cachedNode != null) { |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
474 return cachedNode; |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
475 } else { |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
476 return null; |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
477 } |
64a9ed9f1e8d
Introduce NodeClass.isLeafNode(). Avoid cloning of leaf nodes if equal node is found in destination graph.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11652
diff
changeset
|
478 } else { |
11654
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
479 |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
480 int minCount = Integer.MAX_VALUE; |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
481 Node minCountNode = null; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
482 for (Node input : node.inputs()) { |
12570
af39ea2dc39d
made ConstantNodes (optionally) not record their usages (GRAAL-508)
Doug Simon <doug.simon@oracle.com>
parents:
11755
diff
changeset
|
483 if (input != null && input.recordsUsages()) { |
11654
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
484 int estimate = input.getUsageCountUpperBound(); |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
485 if (estimate == 0) { |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
486 return null; |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
487 } else if (estimate < minCount) { |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
488 minCount = estimate; |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
489 minCountNode = input; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
490 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
491 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
492 } |
11654
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
493 if (minCountNode != null) { |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
494 for (Node usage : minCountNode.usages()) { |
11666
3967f9f306f8
Factor usages of getNodeClass().
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11654
diff
changeset
|
495 if (usage != node && nodeClass == usage.getNodeClass() && nodeClass.valueEqual(node, usage) && nodeClass.edgesEqual(node, usage)) { |
11654
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
496 return usage; |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
497 } |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
498 } |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
499 return null; |
317036da1f29
Improve global value numbering algorithm.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11653
diff
changeset
|
500 } |
5446
fafab5f0507d
Fix findDuplicate for nodes with no inputs
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5427
diff
changeset
|
501 return null; |
fafab5f0507d
Fix findDuplicate for nodes with no inputs
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5427
diff
changeset
|
502 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
503 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
504 |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
505 public boolean isNew(Mark mark, Node node) { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
506 return node.id >= mark.getValue(); |
11728
7778a0f2999a
Run partial escape analysis on Truffle cache methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11675
diff
changeset
|
507 } |
7778a0f2999a
Run partial escape analysis on Truffle cache methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11675
diff
changeset
|
508 |
5361
dec5a35ddbe2
lowering checkcasts with Java snippets (incomplete)
Doug Simon <doug.simon@oracle.com>
parents:
5061
diff
changeset
|
509 /** |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
510 * A snapshot of the {@linkplain Graph#getNodeCount() live node count} in a graph. |
5361
dec5a35ddbe2
lowering checkcasts with Java snippets (incomplete)
Doug Simon <doug.simon@oracle.com>
parents:
5061
diff
changeset
|
511 */ |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
512 public static class Mark extends NodeIdAccessor { |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
513 private final int value; |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
514 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
515 Mark(Graph graph) { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
516 super(graph); |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
517 this.value = graph.nodeIdCount(); |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
518 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
519 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
520 @Override |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
521 public boolean equals(Object obj) { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
522 if (obj instanceof Mark) { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
523 Mark other = (Mark) obj; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
524 return other.getValue() == getValue() && other.getGraph() == getGraph(); |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
525 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
526 return false; |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
527 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
528 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
529 @Override |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
530 public int hashCode() { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
531 return value ^ (epoch + 11); |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
532 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
533 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
534 /** |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
535 * Determines if this mark is positioned at the first live node in the graph. |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
536 */ |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
537 public boolean isStart() { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
538 return value == 0; |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
539 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
540 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
541 /** |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
542 * Gets the {@linkplain Graph#getNodeCount() live node count} of the associated graph when |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
543 * this object was created. |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
544 */ |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
545 int getValue() { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
546 return value; |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
547 } |
16133
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
548 |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
549 /** |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
550 * Determines if this mark still represents the {@linkplain Graph#getNodeCount() live node |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
551 * count} of the graph. |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
552 */ |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
553 public boolean isCurrent() { |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
554 return value == graph.nodeIdCount(); |
d568574e6448
reduce allocations of NodeIterables by Graph.getNewNodes()
Doug Simon <doug.simon@oracle.com>
parents:
15956
diff
changeset
|
555 } |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
556 } |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
557 |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
558 /** |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
559 * Gets a mark that can be used with {@link #getNewNodes}. |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
560 */ |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
561 public Mark getMark() { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
562 return new Mark(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
563 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
564 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
565 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
566 * Returns an {@link Iterable} providing all nodes added since the last {@link Graph#getMark() |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
567 * mark}. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
568 */ |
12686
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
569 public NodeIterable<Node> getNewNodes(Mark mark) { |
ca8ab182026f
abstracted a graph mark as a Mark object (hiding the node index)
Doug Simon <doug.simon@oracle.com>
parents:
12655
diff
changeset
|
570 final int index = mark.getValue(); |
15146
65efd2eeea1b
Remove AbstractNodeIterable, move its methods to default methods on NodeIterable.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
14991
diff
changeset
|
571 return new NodeIterable<Node>() { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
572 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
573 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
574 public Iterator<Node> iterator() { |
16948
d569f2fafb6a
more refactorings to workaround javac symbol issue (JDK-7101822)
Doug Simon <doug.simon@oracle.com>
parents:
16925
diff
changeset
|
575 return new GraphNodeIterator(Graph.this, index); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
576 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
577 }; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
578 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
579 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
580 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
581 * Returns an {@link Iterable} providing all the live nodes. |
14904 | 582 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
583 * @return an {@link Iterable} providing all the live nodes. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
584 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
585 public NodeIterable<Node> getNodes() { |
15146
65efd2eeea1b
Remove AbstractNodeIterable, move its methods to default methods on NodeIterable.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
14991
diff
changeset
|
586 return new NodeIterable<Node>() { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
587 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
588 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
589 public Iterator<Node> iterator() { |
16948
d569f2fafb6a
more refactorings to workaround javac symbol issue (JDK-7101822)
Doug Simon <doug.simon@oracle.com>
parents:
16925
diff
changeset
|
590 return new GraphNodeIterator(Graph.this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
591 } |
5488
21cab9000931
.filter() on Graph.getNode now tries to use the fast node iterator if possible
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5478
diff
changeset
|
592 |
5810
bc237d8b6f99
Add binary graph dumping to compiler (-G:+PrintBinaryGraphs)
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5806
diff
changeset
|
593 @Override |
bc237d8b6f99
Add binary graph dumping to compiler (-G:+PrintBinaryGraphs)
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5806
diff
changeset
|
594 public int count() { |
bc237d8b6f99
Add binary graph dumping to compiler (-G:+PrintBinaryGraphs)
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5806
diff
changeset
|
595 return getNodeCount(); |
bc237d8b6f99
Add binary graph dumping to compiler (-G:+PrintBinaryGraphs)
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5806
diff
changeset
|
596 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
597 }; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
598 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
599 |
16843
52aa237f233d
workaround for javac issue
Doug Simon <doug.simon@oracle.com>
parents:
16841
diff
changeset
|
600 // Fully qualified annotation name is required to satisfy javac |
52aa237f233d
workaround for javac issue
Doug Simon <doug.simon@oracle.com>
parents:
16841
diff
changeset
|
601 @com.oracle.graal.nodeinfo.NodeInfo |
16822
5d468add216f
added @NodeInfo annotations to all Node classes
Doug Simon <doug.simon@oracle.com>
parents:
16296
diff
changeset
|
602 static class PlaceHolderNode extends Node { |
16895
06c15e88d383
added factory method to all Node classes; replaced Node classes instantiation with calls to factory methods; replaced identity tests on Node classes with ' == <node class>.getGenClass()' idiom
Doug Simon <doug.simon@oracle.com>
parents:
16843
diff
changeset
|
603 public static PlaceHolderNode create() { |
16919
0fe4732e5181
made use of generated Node classes predicated on value of graal.useGeneratedNodes system property (default is false)
Doug Simon <doug.simon@oracle.com>
parents:
16897
diff
changeset
|
604 return new PlaceHolderNode(); |
16895
06c15e88d383
added factory method to all Node classes; replaced Node classes instantiation with calls to factory methods; replaced identity tests on Node classes with ' == <node class>.getGenClass()' idiom
Doug Simon <doug.simon@oracle.com>
parents:
16843
diff
changeset
|
605 } |
16822
5d468add216f
added @NodeInfo annotations to all Node classes
Doug Simon <doug.simon@oracle.com>
parents:
16296
diff
changeset
|
606 |
16895
06c15e88d383
added factory method to all Node classes; replaced Node classes instantiation with calls to factory methods; replaced identity tests on Node classes with ' == <node class>.getGenClass()' idiom
Doug Simon <doug.simon@oracle.com>
parents:
16843
diff
changeset
|
607 PlaceHolderNode() { |
06c15e88d383
added factory method to all Node classes; replaced Node classes instantiation with calls to factory methods; replaced identity tests on Node classes with ' == <node class>.getGenClass()' idiom
Doug Simon <doug.simon@oracle.com>
parents:
16843
diff
changeset
|
608 } |
16822
5d468add216f
added @NodeInfo annotations to all Node classes
Doug Simon <doug.simon@oracle.com>
parents:
16296
diff
changeset
|
609 } |
5d468add216f
added @NodeInfo annotations to all Node classes
Doug Simon <doug.simon@oracle.com>
parents:
16296
diff
changeset
|
610 |
16970
818844f7224d
extract TypedNodeIterator to separate file and rename (workaround for javac bug)
Michael Haupt <michael.haupt@oracle.com>
parents:
16948
diff
changeset
|
611 static final Node PLACE_HOLDER = USE_GENERATED_NODES ? new Graph_PlaceHolderNodeGen() : new PlaceHolderNode(); |
7332
c5a9bcd9493d
Support sub-types for typed node iterators
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
7124
diff
changeset
|
612 |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
613 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
614 * When the percent of live nodes in {@link #nodes} fall below this number, a call to |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
615 * {@link #maybeCompress()} will actually do compression. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
616 */ |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
617 public static final int COMPRESSION_THRESHOLD = Integer.getInteger("graal.graphCompressionThreshold", 70); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
618 |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
619 private static final DebugMetric GraphCompressions = Debug.metric("GraphCompressions"); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
620 |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
621 /** |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
622 * If the {@linkplain #COMPRESSION_THRESHOLD compression threshold} is met, the list of nodes is |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
623 * compressed such that all non-null entries precede all null entries while preserving the |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
624 * ordering between the nodes within the list. |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
625 */ |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
626 public boolean maybeCompress() { |
13323
48e821e409eb
Add Debug.isDumpEnabledForMethod() and Debug.isLogEnabledForMethod() use it to diable graph compression and enable guard-id-as-debug-id
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13140
diff
changeset
|
627 if (Debug.isDumpEnabledForMethod() || Debug.isLogEnabledForMethod()) { |
12700
4b053442b9d1
Do not compress graph when debug is enabled
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
12687
diff
changeset
|
628 return false; |
4b053442b9d1
Do not compress graph when debug is enabled
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
12687
diff
changeset
|
629 } |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
630 int liveNodeCount = getNodeCount(); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
631 int liveNodePercent = liveNodeCount * 100 / nodesSize; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
632 if (COMPRESSION_THRESHOLD == 0 || liveNodePercent >= COMPRESSION_THRESHOLD) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
633 return false; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
634 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
635 GraphCompressions.increment(); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
636 int nextId = 0; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
637 for (int i = 0; nextId < liveNodeCount; i++) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
638 Node n = nodes[i]; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
639 if (n != null) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
640 assert n.id == i; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
641 if (i != nextId) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
642 assert n.id > nextId; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
643 n.id = nextId; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
644 nodes[nextId] = n; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
645 nodes[i] = null; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
646 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
647 nextId++; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
648 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
649 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
650 if (MODIFICATION_COUNTS_ENABLED) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
651 // This will cause any current iteration to fail with an assertion |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
652 Arrays.fill(nodeModCounts, 0); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
653 Arrays.fill(nodeUsageModCounts, 0); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
654 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
655 nodesSize = nextId; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
656 compressions++; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
657 nodesDeletedBeforeLastCompression += nodesDeletedSinceLastCompression; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
658 nodesDeletedSinceLastCompression = 0; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
659 return true; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
660 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
661 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
662 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
663 * Returns an {@link Iterable} providing all the live nodes whose type is compatible with |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
664 * {@code type}. |
14904 | 665 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
666 * @param type the type of node to return |
11631
1aed684853f6
refactored IterableNodeType into a top level type to avoid problems it was causing for javac and JDT (CR-1408)
Doug Simon <doug.simon@oracle.com>
parents:
11556
diff
changeset
|
667 * @return an {@link Iterable} providing all the matching nodes |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
668 */ |
11631
1aed684853f6
refactored IterableNodeType into a top level type to avoid problems it was causing for javac and JDT (CR-1408)
Doug Simon <doug.simon@oracle.com>
parents:
11556
diff
changeset
|
669 public <T extends Node & IterableNodeType> NodeIterable<T> getNodes(final Class<T> type) { |
7332
c5a9bcd9493d
Support sub-types for typed node iterators
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
7124
diff
changeset
|
670 final NodeClass nodeClass = NodeClass.get(type); |
15146
65efd2eeea1b
Remove AbstractNodeIterable, move its methods to default methods on NodeIterable.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
14991
diff
changeset
|
671 return new NodeIterable<T>() { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
672 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
673 @Override |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
674 public Iterator<T> iterator() { |
16970
818844f7224d
extract TypedNodeIterator to separate file and rename (workaround for javac bug)
Michael Haupt <michael.haupt@oracle.com>
parents:
16948
diff
changeset
|
675 return new TypedGraphNodeIterator<>(nodeClass, Graph.this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
676 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
677 }; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
678 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
679 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
680 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
681 * Returns whether the graph contains at least one node of the given type. |
14904 | 682 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
683 * @param type the type of node that is checked for occurrence |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
684 * @return whether there is at least one such node |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
685 */ |
11631
1aed684853f6
refactored IterableNodeType into a top level type to avoid problems it was causing for javac and JDT (CR-1408)
Doug Simon <doug.simon@oracle.com>
parents:
11556
diff
changeset
|
686 public <T extends Node & IterableNodeType> boolean hasNode(final Class<T> type) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
687 return getNodes(type).iterator().hasNext(); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
688 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
689 |
16970
818844f7224d
extract TypedNodeIterator to separate file and rename (workaround for javac bug)
Michael Haupt <michael.haupt@oracle.com>
parents:
16948
diff
changeset
|
690 Node getStartNode(int iterableId) { |
7332
c5a9bcd9493d
Support sub-types for typed node iterators
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
7124
diff
changeset
|
691 Node start = nodeCacheFirst.size() <= iterableId ? null : nodeCacheFirst.get(iterableId); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
692 return start; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
693 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
694 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
695 public NodeBitMap createNodeBitMap() { |
15955
3f48e9a1016c
NodeBitMap refactoring
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15890
diff
changeset
|
696 return new NodeBitMap(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
697 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
698 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
699 public <T> NodeMap<T> createNodeMap() { |
15890
f4510fd9e8b3
Removed unused grow functionality on NodeMap.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15196
diff
changeset
|
700 return new NodeMap<>(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
701 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
702 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
703 public NodeFlood createNodeFlood() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
704 return new NodeFlood(this); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
705 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
706 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
707 public NodeWorkList createNodeWorkList() { |
15956
edc33e8715d5
NodeWorkList refactoring
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15955
diff
changeset
|
708 return new NodeWorkList.SingletonNodeWorkList(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
709 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
710 |
15956
edc33e8715d5
NodeWorkList refactoring
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15955
diff
changeset
|
711 public NodeWorkList createIterativeNodeWorkList(boolean fill, int iterationLimitPerNode) { |
edc33e8715d5
NodeWorkList refactoring
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15955
diff
changeset
|
712 return new NodeWorkList.IterativeNodeWorkList(this, fill, iterationLimitPerNode); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
713 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
714 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
715 void register(Node node) { |
13744
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
716 assert !isFrozen(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
717 assert node.id() == Node.INITIAL_ID; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
718 if (nodes.length == nodesSize) { |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
719 nodes = Arrays.copyOf(nodes, (nodesSize * 2) + 1); |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
720 } |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
721 int id = nodesSize; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
722 nodes[id] = node; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
723 nodesSize++; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
724 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
725 int nodeClassId = node.getNodeClass().iterableId(); |
16897
f90dcdbbb75e
switched to using new NodeFieldIterator and NodeFieldIterable for traversing Node inputs and successors
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
726 if (nodeClassId != Node.NOT_ITERABLE) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
727 while (nodeCacheFirst.size() <= nodeClassId) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
728 nodeCacheFirst.add(null); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
729 nodeCacheLast.add(null); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
730 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
731 Node prev = nodeCacheLast.get(nodeClassId); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
732 if (prev != null) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
733 prev.typeCacheNext = node; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
734 } else { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
735 nodeCacheFirst.set(nodeClassId, node); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
736 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
737 nodeCacheLast.set(nodeClassId, node); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
738 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
739 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
740 node.id = id; |
16241
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
741 if (nodeEventListener != null) { |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
742 nodeEventListener.nodeAdded(node); |
c6ebc1997a55
added listener for nodes being added to a graph; consolidated all node event listeners into new NodeEventListener interface and made registering such listeners work in a try-with-resources statement so that de-registration is automatic
Doug Simon <doug.simon@oracle.com>
parents:
16206
diff
changeset
|
743 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
744 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
745 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
746 void unregister(Node node) { |
13744
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
747 assert !isFrozen(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
748 assert !node.isDeleted() : "cannot delete a node twice! node=" + node; |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
749 nodes[node.id] = null; |
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
750 nodesDeletedSinceLastCompression++; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
751 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
752 // nodes aren't removed from the type cache here - they will be removed during iteration |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
753 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
754 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
755 public boolean verify() { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
756 for (Node node : getNodes()) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
757 try { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
758 try { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
759 assert node.verify(); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
760 } catch (AssertionError t) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
761 throw new GraalInternalError(t); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
762 } catch (RuntimeException t) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
763 throw new GraalInternalError(t); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
764 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
765 } catch (GraalInternalError e) { |
15196
593f7d0a6f50
GraalGraphInternalError: improve method names and documentation.
Josef Eisl <josef.eisl@jku.at>
parents:
15193
diff
changeset
|
766 throw GraalGraphInternalError.transformAndAddContext(e, node).addContext(this); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
767 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
768 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
769 return true; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
770 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
771 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
772 Node getNode(int i) { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
773 return nodes[i]; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
774 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
775 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
776 /** |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
777 * Returns the number of node ids generated so far. |
14904 | 778 * |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
779 * @return the number of node ids generated so far |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
780 */ |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
781 int nodeIdCount() { |
12687
43301f080126
added graph compression (GRAAL-571)
Doug Simon <doug.simon@oracle.com>
parents:
12686
diff
changeset
|
782 return nodesSize; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
783 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
784 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
785 /** |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
786 * Adds duplicates of the nodes in {@code nodes} to this graph. This will recreate any edges |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
787 * between the duplicate nodes. The {@code replacement} map can be used to replace a node from |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
788 * the source graph by a given node (which must already be in this graph). Edges between |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
789 * duplicate and replacement nodes will also be recreated so care should be taken regarding the |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
790 * matching of node types in the replacement map. |
14904 | 791 * |
4142
bc8527f3071c
Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3733
diff
changeset
|
792 * @param newNodes the nodes to be duplicated |
5711
4d7175cf3526
enabled Eclipse/JDT javadoc checking and fixed resulting warnings
Doug Simon <doug.simon@oracle.com>
parents:
5608
diff
changeset
|
793 * @param replacementsMap the replacement map (can be null if no replacement is to be performed) |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
794 * @return a map which associates the original nodes from {@code nodes} to their duplicates |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
795 */ |
11675
77d9f12797c5
Use NodeMap in inlining utility when number of nodes is high.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11671
diff
changeset
|
796 public Map<Node, Node> addDuplicates(Iterable<Node> newNodes, final Graph oldGraph, int estimatedNodeCount, Map<Node, Node> replacementsMap) { |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
797 DuplicationReplacement replacements; |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
798 if (replacementsMap == null) { |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
799 replacements = null; |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
800 } else { |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
801 replacements = new MapReplacement(replacementsMap); |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
802 } |
11675
77d9f12797c5
Use NodeMap in inlining utility when number of nodes is high.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11671
diff
changeset
|
803 return addDuplicates(newNodes, oldGraph, estimatedNodeCount, replacements); |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
804 } |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
805 |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
806 public interface DuplicationReplacement { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
807 |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
808 Node replacement(Node original); |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
809 } |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
810 |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
811 private static final class MapReplacement implements DuplicationReplacement { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
812 |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
813 private final Map<Node, Node> map; |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
814 |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
815 public MapReplacement(Map<Node, Node> map) { |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
816 this.map = map; |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
817 } |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7332
diff
changeset
|
818 |
5478
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
819 @Override |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
820 public Node replacement(Node original) { |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
821 Node replacement = map.get(original); |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
822 return replacement != null ? replacement : original; |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
823 } |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
824 |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
825 } |
4a99bfc329f0
Add posibility to provide a replacement function instead of map for duplication.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
5446
diff
changeset
|
826 |
5427
441cf24df453
correctly handle null for replacements parameter in Graph.addDuplicates()
Doug Simon <doug.simon@oracle.com>
parents:
5419
diff
changeset
|
827 @SuppressWarnings("all") |
11675
77d9f12797c5
Use NodeMap in inlining utility when number of nodes is high.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11671
diff
changeset
|
828 public Map<Node, Node> addDuplicates(Iterable<Node> newNodes, final Graph oldGraph, int estimatedNodeCount, DuplicationReplacement replacements) { |
77d9f12797c5
Use NodeMap in inlining utility when number of nodes is high.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
11671
diff
changeset
|
829 return NodeClass.addGraphDuplicate(this, oldGraph, estimatedNodeCount, newNodes, replacements); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
830 } |
13744
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
831 |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
832 public boolean isFrozen() { |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
833 return isFrozen; |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
834 } |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
835 |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
836 public void freeze() { |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
837 this.isFrozen = true; |
d96dbd96bb45
Always copy method substitutions. Add some assertion checking for it.
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13329
diff
changeset
|
838 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
839 } |