annotate graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java @ 18995:a2cb19764970

Rename MergeNode to AbstractMergeNode.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Wed, 28 Jan 2015 01:04:20 +0100
parents e349dfa54db1
children c6b2677bcbef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
1 /*
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
2 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
4 *
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
8 *
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
13 * accompanied this code).
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
14 *
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
18 *
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
21 * questions.
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
22 */
6525
2c913b643422 rename packages in graal.phases to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6522
diff changeset
23 package com.oracle.graal.phases.util;
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
24
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
25 import java.util.*;
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
26
15193
96bb07a5d667 Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents: 15192
diff changeset
27 import com.oracle.graal.compiler.common.*;
15192
644dfe49c0f4 Move packages com.oracle.graal.cfg to com.oracle.graal.compiler.common.cfg.
Josef Eisl <josef.eisl@jku.at>
parents: 15157
diff changeset
28 import com.oracle.graal.compiler.common.cfg.*;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
29 import com.oracle.graal.graph.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
30 import com.oracle.graal.nodes.*;
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
31 import com.oracle.graal.nodes.VirtualState.NodeClosure;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
32 import com.oracle.graal.nodes.cfg.*;
15288
2a6897a82a7e loosen restrictions a bit in GraphOrder
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15243
diff changeset
33 import com.oracle.graal.nodes.virtual.*;
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
34 import com.oracle.graal.phases.graph.*;
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14889
diff changeset
35 import com.oracle.graal.phases.graph.ReentrantBlockIterator.BlockIteratorClosure;
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
36 import com.oracle.graal.phases.schedule.*;
14991
64dcb92ee75a Truffle: Change signature for Truffle calls from (PackedFrame, Arguments) to (Object[]).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14889
diff changeset
37 import com.oracle.graal.phases.schedule.SchedulePhase.SchedulingStrategy;
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
38
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
39 public final class GraphOrder {
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
40
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
41 private GraphOrder() {
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
42 }
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
43
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
44 /**
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
45 * Quick (and imprecise) assertion that there are no (invalid) cycles in the given graph. First,
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
46 * an ordered list of all nodes in the graph (a total ordering) is created. A second run over
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
47 * this list checks whether inputs are scheduled before their usages.
15002
06e50d290784 isAllowedUsageType on Nodes
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
48 *
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
49 * @param graph the graph to be checked.
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
50 * @throws AssertionError if a cycle was detected.
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
51 */
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
52 public static boolean assertNonCyclicGraph(StructuredGraph graph) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
53 List<Node> order = createOrder(graph);
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
54 NodeBitMap visited = graph.createNodeBitMap();
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
55 visited.clearAll();
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
56 for (Node node : order) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
57 if (node instanceof PhiNode && ((PhiNode) node).merge() instanceof LoopBeginNode) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
58 assert visited.isMarked(((PhiNode) node).valueAt(0));
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
59 // nothing to do
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
60 } else {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
61 for (Node input : node.inputs()) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
62 if (!visited.isMarked(input)) {
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
63 if (input instanceof FrameState) {
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
64 // nothing to do - frame states are known, allowed cycles
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
65 } else {
15035
bfad6492cce9 re-enable graph ordering assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15002
diff changeset
66 assert false : "unexpected cycle detected at input " + node + " -> " + input;
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
67 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
68 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
69 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
70 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
71 visited.mark(node);
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
72 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
73 return true;
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
74 }
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
75
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
76 private static List<Node> createOrder(StructuredGraph graph) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
77 final ArrayList<Node> nodes = new ArrayList<>();
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
78 final NodeBitMap visited = graph.createNodeBitMap();
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
79
14889
5accc969c8c7 use StatelessPostOrderNodeIterator in GraphOrder
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14760
diff changeset
80 new StatelessPostOrderNodeIterator(graph.start()) {
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
81 @Override
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
82 protected void node(FixedNode node) {
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
83 visitForward(nodes, visited, node, false);
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
84 }
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
85 }.apply();
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
86 return nodes;
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
87 }
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
88
13729
9a6faa08bffe cyclic graph verification
Lukas Stadler <lukas.stadler@jku.at>
parents: 11641
diff changeset
89 private static void visitForward(ArrayList<Node> nodes, NodeBitMap visited, Node node, boolean floatingOnly) {
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
90 try {
14547
0d5923064a88 fixed some findbugs issues
Doug Simon <doug.simon@oracle.com>
parents: 14534
diff changeset
91 assert node == null || node.isAlive() : node + " not alive";
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
92 if (node != null && !visited.isMarked(node)) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
93 if (floatingOnly && node instanceof FixedNode) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
94 throw new GraalInternalError("unexpected reference to fixed node: %s (this indicates an unexpected cycle)", node);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
95 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
96 visited.mark(node);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
97 FrameState stateAfter = null;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
98 if (node instanceof StateSplit) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
99 stateAfter = ((StateSplit) node).stateAfter();
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
100 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
101 for (Node input : node.inputs()) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
102 if (input != stateAfter) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
103 visitForward(nodes, visited, input, true);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
104 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
105 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
106 if (node instanceof EndNode) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
107 EndNode end = (EndNode) node;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
108 for (PhiNode phi : end.merge().phis()) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
109 visitForward(nodes, visited, phi.valueAt(end), true);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
110 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
111 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
112 nodes.add(node);
18995
a2cb19764970 Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18971
diff changeset
113 if (node instanceof AbstractMergeNode) {
a2cb19764970 Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18971
diff changeset
114 for (PhiNode phi : ((AbstractMergeNode) node).phis()) {
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
115 visited.mark(phi);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
116 nodes.add(phi);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
117 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
118 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
119 if (stateAfter != null) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
120 visitForward(nodes, visited, stateAfter, true);
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
121 }
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
122 }
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
123 } catch (GraalInternalError e) {
15196
593f7d0a6f50 GraalGraphInternalError: improve method names and documentation.
Josef Eisl <josef.eisl@jku.at>
parents: 15193
diff changeset
124 throw GraalGraphInternalError.transformAndAddContext(e, node);
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
125 }
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
126 }
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
127
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
128 /**
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
129 * This method schedules the graph and makes sure that, for every node, all inputs are available
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
130 * at the position where it is scheduled. This is a very expensive assertion.
15002
06e50d290784 isAllowedUsageType on Nodes
Lukas Stadler <lukas.stadler@oracle.com>
parents: 14991
diff changeset
131 *
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
132 * Also, this phase assumes ProxyNodes to exist at LoopExitNodes, so that it cannot be run after
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
133 * phases that remove loop proxies or move proxies to BeginNodes.
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
134 */
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
135 public static boolean assertSchedulableGraph(final StructuredGraph graph) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
136 try {
18965
53fcb13db742 Always use read aware memory scheduling.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18941
diff changeset
137 final SchedulePhase schedule = new SchedulePhase(SchedulingStrategy.LATEST_OUT_OF_LOOPS);
18383
1518c3296cc8 use deterministic iteration order Set and Map data structures when in the scope of a replay compilation context
Doug Simon <doug.simon@oracle.com>
parents: 17300
diff changeset
138 final Map<LoopBeginNode, NodeBitMap> loopEntryStates = Node.newIdentityMap();
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
139 schedule.apply(graph, false);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
140
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
141 BlockIteratorClosure<NodeBitMap> closure = new BlockIteratorClosure<NodeBitMap>() {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
142
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
143 @Override
15107
1bf700e19e84 Make Loop generic.
Josef Eisl <josef.eisl@jku.at>
parents: 15035
diff changeset
144 protected List<NodeBitMap> processLoop(Loop<Block> loop, NodeBitMap initialState) {
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
145 return ReentrantBlockIterator.processLoop(this, loop, initialState).exitStates;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
146 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
147
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
148 @Override
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
149 protected NodeBitMap processBlock(final Block block, final NodeBitMap currentState) {
18941
c943ba97b2a7 Remove class ScheduledNode from the node class hierarchy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18383
diff changeset
150 final List<ValueNode> list = schedule.getBlockToNodesMap().get(block);
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
151
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
152 /*
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
153 * A stateAfter is not valid directly after its associated state split, but
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
154 * right before the next fixed node. Therefore a pending stateAfter is kept that
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
155 * will be checked at the correct position.
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
156 */
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
157 FrameState pendingStateAfter = null;
18941
c943ba97b2a7 Remove class ScheduledNode from the node class hierarchy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18383
diff changeset
158 for (final ValueNode node : list) {
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
159 FrameState stateAfter = node instanceof StateSplit ? ((StateSplit) node).stateAfter() : null;
16573
a2ec1ac769e4 Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16415
diff changeset
160 if (node instanceof FullInfopointNode) {
a2ec1ac769e4 Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16415
diff changeset
161 stateAfter = ((FullInfopointNode) node).getState();
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
162 }
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
163
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
164 if (pendingStateAfter != null && node instanceof FixedNode) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
165 pendingStateAfter.applyToNonVirtual(new NodeClosure<Node>() {
18971
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
166 @Override
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
167 public void apply(Node usage, Node nonVirtualNode) {
15288
2a6897a82a7e loosen restrictions a bit in GraphOrder
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15243
diff changeset
168 assert currentState.isMarked(nonVirtualNode) || nonVirtualNode instanceof VirtualObjectNode : nonVirtualNode + " not available at virtualstate " + usage +
2a6897a82a7e loosen restrictions a bit in GraphOrder
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15243
diff changeset
169 " before " + node + " in block " + block + " \n" + list;
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
170 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
171 });
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
172 pendingStateAfter = null;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
173 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
174
18995
a2cb19764970 Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18971
diff changeset
175 if (node instanceof AbstractMergeNode) {
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
176 // phis aren't scheduled, so they need to be added explicitly
18995
a2cb19764970 Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18971
diff changeset
177 currentState.markAll(((AbstractMergeNode) node).phis());
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
178 if (node instanceof LoopBeginNode) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
179 // remember the state at the loop entry, it's restored at exits
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
180 loopEntryStates.put((LoopBeginNode) node, currentState.copy());
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
181 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
182 } else if (node instanceof ProxyNode) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
183 for (Node input : node.inputs()) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
184 if (input != ((ProxyNode) node).proxyPoint()) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
185 assert currentState.isMarked(input) : input + " not available at " + node + " in block " + block + "\n" + list;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
186 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
187 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
188 } else if (node instanceof LoopExitNode) {
16415
24af0805e135 hasValueProxies on StructuredGraph
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15742
diff changeset
189 if (graph.hasValueProxies()) {
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
190 // loop contents are only accessible via proxies at the exit
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
191 currentState.clearAll();
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
192 currentState.markAll(loopEntryStates.get(((LoopExitNode) node).loopBegin()));
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
193 }
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
194 // Loop proxies aren't scheduled, so they need to be added explicitly
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
195 currentState.markAll(((LoopExitNode) node).proxies());
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
196 } else {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
197 for (Node input : node.inputs()) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
198 if (input != stateAfter) {
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
199 if (input instanceof FrameState) {
18971
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
200 ((FrameState) input).applyToNonVirtual(new VirtualState.NodeClosure<Node>() {
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
201 @Override
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
202 public void apply(Node usage, Node nonVirtual) {
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
203 assert currentState.isMarked(nonVirtual) : nonVirtual + " not available at " + node + " in block " + block + "\n" + list;
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
204 }
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
205 });
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
206 } else {
15288
2a6897a82a7e loosen restrictions a bit in GraphOrder
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15243
diff changeset
207 assert currentState.isMarked(input) || input instanceof VirtualObjectNode : input + " not available at " + node + " in block " + block + "\n" + list;
15243
43f26891ed2e slightly more relaxed GraphOrder assertion
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15196
diff changeset
208 }
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
209 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
210 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
211 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
212 if (node instanceof AbstractEndNode) {
18995
a2cb19764970 Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18971
diff changeset
213 AbstractMergeNode merge = ((AbstractEndNode) node).merge();
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
214 for (PhiNode phi : merge.phis()) {
17300
a926a44acfc6 fix NPE in graph scheduling validation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 16573
diff changeset
215 ValueNode phiValue = phi.valueAt((AbstractEndNode) node);
a926a44acfc6 fix NPE in graph scheduling validation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 16573
diff changeset
216 assert phiValue == null || currentState.isMarked(phiValue) : phiValue + " not available at phi " + phi + " / end " + node + " in block " + block;
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
217 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
218 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
219 if (stateAfter != null) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
220 assert pendingStateAfter == null;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
221 pendingStateAfter = stateAfter;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
222 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
223 currentState.mark(node);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
224 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
225 if (pendingStateAfter != null) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
226 pendingStateAfter.applyToNonVirtual(new NodeClosure<Node>() {
18971
e349dfa54db1 Simplifications in PEA.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18965
diff changeset
227 @Override
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
228 public void apply(Node usage, Node nonVirtualNode) {
15742
928475f5c2f1 small fix in GraphOrder.assertSchedulableGraph
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15551
diff changeset
229 assert currentState.isMarked(nonVirtualNode) || nonVirtualNode instanceof VirtualObjectNode : nonVirtualNode + " not available at virtualstate " + usage +
928475f5c2f1 small fix in GraphOrder.assertSchedulableGraph
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15551
diff changeset
230 " at end of block " + block + " \n" + list;
14534
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
231 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
232 });
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
233 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
234 return currentState;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
235 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
236
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
237 @Override
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
238 protected NodeBitMap merge(Block merge, List<NodeBitMap> states) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
239 NodeBitMap result = states.get(0);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
240 for (int i = 1; i < states.size(); i++) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
241 result.intersect(states.get(i));
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
242 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
243 return result;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
244 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
245
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
246 @Override
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
247 protected NodeBitMap getInitialState() {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
248 return graph.createNodeBitMap();
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
249 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
250
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
251 @Override
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
252 protected NodeBitMap cloneState(NodeBitMap oldState) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
253 return oldState.copy();
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
254 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
255 };
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
256
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
257 ReentrantBlockIterator.apply(closure, schedule.getCFG().getStartBlock());
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
258
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
259 } catch (Throwable t) {
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
260 throw new AssertionError("unschedulable graph", t);
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
261 }
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
262 return true;
ccf090d3be47 new graph ordering assertion mechanism
Lukas Stadler <lukas.stadler@oracle.com>
parents: 13783
diff changeset
263 }
4642
9f781aae2470 separate GraphOrder from EscapeAnalysisPhase
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
264 }