# HG changeset patch # User Thomas Wuerthinger # Date 1422403599 -3600 # Node ID 46c2e70d54ad135c9b92c8d18a0e4f6f2bc32d9b # Parent a2cb19764970676f24080c7d5d8b3256540df043 Make AbstractMergeNode abstract and introduce concrete subclass MergeNode. diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java Wed Jan 28 01:06:39 2015 +0100 @@ -53,7 +53,7 @@ IfNode ifNode = graph.add(new IfNode(null, trueBegin, falseBegin, 0.5)); graph.start().setNext(ifNode); - AbstractMergeNode merge = graph.add(new AbstractMergeNode()); + AbstractMergeNode merge = graph.add(new MergeNode()); merge.addForwardEnd(trueEnd); merge.addForwardEnd(falseEnd); ReturnNode returnNode = graph.add(new ReturnNode(null)); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Jan 28 01:06:39 2015 +0100 @@ -1088,7 +1088,7 @@ // The EndNode for the already existing edge. AbstractEndNode end = currentGraph.add(new EndNode()); // The MergeNode that replaces the placeholder. - AbstractMergeNode mergeNode = currentGraph.add(new AbstractMergeNode()); + AbstractMergeNode mergeNode = currentGraph.add(new MergeNode()); FixedNode next = placeholder.next(); if (placeholder.predecessor() instanceof ControlSplitNode) { diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Wed Jan 28 01:06:39 2015 +0100 @@ -312,7 +312,7 @@ if (newEarlyExit == null) { continue; } - AbstractMergeNode merge = graph.add(new AbstractMergeNode()); + AbstractMergeNode merge = graph.add(new MergeNode()); AbstractEndNode originalEnd = graph.add(new EndNode()); AbstractEndNode newEnd = graph.add(new EndNode()); merge.addForwardEnd(originalEnd); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Wed Jan 28 01:06:39 2015 +0100 @@ -315,7 +315,7 @@ end.safeDelete(); } else { assert endsToMerge.size() > 1; - AbstractMergeNode newExitMerge = graph.add(new AbstractMergeNode()); + AbstractMergeNode newExitMerge = graph.add(new MergeNode()); newExit = newExitMerge; FrameState state = loopBegin.stateAfter(); FrameState duplicateState = null; diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java Wed Jan 28 01:06:39 2015 +0100 @@ -38,8 +38,8 @@ * Denotes the merging of multiple control-flow paths. */ @NodeInfo(allowedUsageTypes = {InputType.Association}) -public class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable { - public AbstractMergeNode() { +public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable { + protected AbstractMergeNode() { } @Input(InputType.Association) protected NodeInputList ends = new NodeInputList<>(this); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Wed Jan 28 01:06:39 2015 +0100 @@ -851,7 +851,7 @@ } else { // Need a new phi in case the frame state is used by more than the merge being // removed - AbstractMergeNode newMerge = graph().add(new AbstractMergeNode()); + AbstractMergeNode newMerge = graph().add(new MergeNode()); PhiNode oldPhi = (PhiNode) oldMerge.usages().first(); PhiNode newPhi = graph().addWithoutUnique(new ValuePhiNode(oldPhi.stamp(), newMerge)); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java Wed Jan 28 01:06:39 2015 +0100 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.nodes; + +import com.oracle.graal.nodeinfo.*; + +/** + * Denotes the merging of multiple control-flow paths. + */ +@NodeInfo +public class MergeNode extends AbstractMergeNode { + public MergeNode() { + } +} diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Wed Jan 28 01:06:39 2015 +0100 @@ -404,7 +404,7 @@ if (begin.forwardEndCount() == 1) { // bypass merge and remove reduceTrivialMerge(begin); } else { // convert to merge - AbstractMergeNode merge = this.add(new AbstractMergeNode()); + AbstractMergeNode merge = this.add(new MergeNode()); this.replaceFixedWithFixed(begin, merge); } } diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Wed Jan 28 01:06:39 2015 +0100 @@ -54,7 +54,7 @@ } AbstractMergeNode merge; if (target instanceof AbstractDeoptimizeNode) { - merge = graph.add(new AbstractMergeNode()); + merge = graph.add(new MergeNode()); EndNode firstEnd = graph.add(new EndNode()); ValueNode actionAndReason = ((AbstractDeoptimizeNode) target).getActionAndReason(context.getMetaAccess()); ValueNode speculation = ((AbstractDeoptimizeNode) target).getSpeculation(context.getMetaAccess()); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java Wed Jan 28 01:06:39 2015 +0100 @@ -72,7 +72,7 @@ } ifNode.clearSuccessors(); Graph graph = ifNode.graph(); - AbstractMergeNode trueTargetMerge = graph.add(new AbstractMergeNode()); + AbstractMergeNode trueTargetMerge = graph.add(new MergeNode()); trueTargetMerge.setNext(trueTarget); EndNode firstTrueEnd = graph.add(new EndNode()); EndNode secondTrueEnd = graph.add(new EndNode()); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java Wed Jan 28 01:06:39 2015 +0100 @@ -448,7 +448,7 @@ * @return The newly created end node. */ private AbstractEndNode createNewMerge(FixedNode successor, FrameState stateAfterMerge) { - AbstractMergeNode newBottomMerge = graph.add(new AbstractMergeNode()); + AbstractMergeNode newBottomMerge = graph.add(new MergeNode()); AbstractEndNode newBottomEnd = graph.add(new EndNode()); newBottomMerge.addForwardEnd(newBottomEnd); newBottomMerge.setStateAfter(stateAfterMerge); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Wed Jan 28 01:06:39 2015 +0100 @@ -344,7 +344,7 @@ for (ReturnNode returnNode : returnNodes) { returnDuplicates.add((ReturnNode) duplicates.get(returnNode)); } - AbstractMergeNode merge = graph.add(new AbstractMergeNode()); + AbstractMergeNode merge = graph.add(new MergeNode()); merge.setStateAfter(stateAfter); ValueNode returnValue = mergeReturns(merge, returnDuplicates, canonicalizedNodes); invokeNode.replaceAtUsages(returnValue); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Wed Jan 28 01:06:39 2015 +0100 @@ -173,7 +173,7 @@ ValueNode originalReceiver = ((MethodCallTargetNode) invoke.callTarget()).receiver(); // setup merge and phi nodes for results and exceptions - AbstractMergeNode returnMerge = graph.add(new AbstractMergeNode()); + AbstractMergeNode returnMerge = graph.add(new MergeNode()); returnMerge.setStateAfter(invoke.stateAfter()); PhiNode returnValuePhi = null; @@ -187,7 +187,7 @@ InvokeWithExceptionNode invokeWithException = (InvokeWithExceptionNode) invoke; ExceptionObjectNode exceptionEdge = (ExceptionObjectNode) invokeWithException.exceptionEdge(); - exceptionMerge = graph.add(new AbstractMergeNode()); + exceptionMerge = graph.add(new MergeNode()); FixedNode exceptionSux = exceptionEdge.next(); graph.addBeforeFixed(exceptionSux, exceptionMerge); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Wed Jan 28 01:06:39 2015 +0100 @@ -303,7 +303,7 @@ EndNode elseEnd = graph.add(new EndNode()); graph.addAfterFixed(elsePart, elseEnd); - AbstractMergeNode merge = graph.add(new AbstractMergeNode()); + AbstractMergeNode merge = graph.add(new MergeNode()); merge.addForwardEnd(thenEnd); merge.addForwardEnd(elseEnd); diff -r a2cb19764970 -r 46c2e70d54ad graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Wed Jan 28 01:04:20 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Wed Jan 28 01:06:39 2015 +0100 @@ -737,7 +737,7 @@ } else if (returnNodes.size() == 1) { this.returnNode = returnNodes.get(0); } else { - AbstractMergeNode merge = snippet.add(new AbstractMergeNode()); + AbstractMergeNode merge = snippet.add(new MergeNode()); List memMaps = returnNodes.stream().map(n -> n.getMemoryMap()).collect(Collectors.toList()); ValueNode returnValue = InliningUtil.mergeReturns(merge, returnNodes, null); this.returnNode = snippet.add(new ReturnNode(returnValue));