Mercurial > hg > graal-compiler
changeset 21379:0042b1960e71
Bugfix: non-simplifying GraphDecoder must not cleanup graph
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Thu, 14 May 2015 16:03:49 -0700 |
parents | a847538be6e3 |
children | af9d0db304e8 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java |
diffstat | 2 files changed, 30 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java Thu May 14 16:03:11 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java Thu May 14 16:03:49 2015 -0700 @@ -32,7 +32,6 @@ import com.oracle.graal.compiler.common.util.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; -import com.oracle.graal.nodes.util.*; /** * Decoder for {@link EncodedGraph encoded graphs} produced by {@link GraphEncoder}. Support for @@ -1154,32 +1153,14 @@ } } + /** + * Removes unnecessary nodes from the graph after decoding. + * + * @param methodScope The current method. + * @param start Marker for the begin of the current method in the graph. + */ protected void cleanupGraph(MethodScope methodScope, Graph.Mark start) { assert verifyEdges(methodScope); - - for (Node node : methodScope.graph.getNewNodes(start)) { - if (node instanceof MergeNode) { - MergeNode mergeNode = (MergeNode) node; - if (mergeNode.forwardEndCount() == 1) { - methodScope.graph.reduceTrivialMerge(mergeNode); - } - } - } - - for (Node node : methodScope.graph.getNewNodes(start)) { - if (node instanceof BeginNode || node instanceof KillingBeginNode) { - if (!(node.predecessor() instanceof ControlSplitNode) && node.hasNoUsages()) { - GraphUtil.unlinkFixedNode((AbstractBeginNode) node); - node.safeDelete(); - } - } - } - - for (Node node : methodScope.graph.getNewNodes(start)) { - if (!(node instanceof FixedNode) && node.hasNoUsages()) { - GraphUtil.killCFG(node); - } - } } protected boolean verifyEdges(MethodScope methodScope) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java Thu May 14 16:03:11 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java Thu May 14 16:03:49 2015 -0700 @@ -79,6 +79,30 @@ protected void cleanupGraph(MethodScope methodScope, Graph.Mark start) { GraphUtil.normalizeLoops(methodScope.graph); super.cleanupGraph(methodScope, start); + + for (Node node : methodScope.graph.getNewNodes(start)) { + if (node instanceof MergeNode) { + MergeNode mergeNode = (MergeNode) node; + if (mergeNode.forwardEndCount() == 1) { + methodScope.graph.reduceTrivialMerge(mergeNode); + } + } + } + + for (Node node : methodScope.graph.getNewNodes(start)) { + if (node instanceof BeginNode || node instanceof KillingBeginNode) { + if (!(node.predecessor() instanceof ControlSplitNode) && node.hasNoUsages()) { + GraphUtil.unlinkFixedNode((AbstractBeginNode) node); + node.safeDelete(); + } + } + } + + for (Node node : methodScope.graph.getNewNodes(start)) { + if (!(node instanceof FixedNode) && node.hasNoUsages()) { + GraphUtil.killCFG(node); + } + } } @Override