# HG changeset patch # User Christian Wimmer # Date 1431644629 25200 # Node ID 0042b1960e7145c72d9565e65ea3033dc1dd0716 # Parent a847538be6e314ff6625567917c1e0632d680cc9 Bugfix: non-simplifying GraphDecoder must not cleanup graph diff -r a847538be6e3 -r 0042b1960e71 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java --- 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) { diff -r a847538be6e3 -r 0042b1960e71 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java --- 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