Mercurial > hg > graal-compiler
changeset 15009:e49f62425090
introduce non-ValueNode Proxy interface
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64MemoryPeephole.java Mon Apr 07 13:55:45 2014 +0200 @@ -431,7 +431,7 @@ protected ValueNode uncast(ValueNode value) { if (value instanceof UnsafeCastNode) { UnsafeCastNode cast = (UnsafeCastNode) value; - return cast.getOriginalValue(); + return cast.getOriginalNode(); } return value; }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Mon Apr 07 13:55:45 2014 +0200 @@ -336,7 +336,7 @@ continue; } else if (node instanceof UnsafeCastNode) { UnsafeCastNode cast = (UnsafeCastNode) node; - if (cast.getOriginalValue() == access) { + if (cast.getOriginalNode() == access) { continue; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -24,19 +24,24 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public class GuardProxyNode extends ProxyNode implements GuardingNode { +public class GuardProxyNode extends ProxyNode implements GuardingNode, Proxy { - @Input(InputType.Guard) private ValueNode value; + @Input(InputType.Guard) private GuardingNode value; - public GuardProxyNode(ValueNode value, AbstractBeginNode proxyPoint) { + public GuardProxyNode(GuardingNode value, AbstractBeginNode proxyPoint) { super(StampFactory.forVoid(), proxyPoint); this.value = value; } @Override public ValueNode value() { - return value; + return value.asNode(); + } + + public Node getOriginalNode() { + return value.asNode(); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -88,7 +88,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -132,7 +132,7 @@ @ConstantNodeParameter DeoptimizationAction action, @ConstantNodeParameter Stamp stamp); @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryProxyNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryProxyNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -31,19 +31,18 @@ @NodeInfo(allowedUsageTypes = {InputType.Memory}) public class MemoryProxyNode extends ProxyNode implements MemoryProxy, LIRLowerable { - @Input(InputType.Memory) private ValueNode value; + @Input(InputType.Memory) private MemoryNode value; private final LocationIdentity identity; - public MemoryProxyNode(ValueNode value, AbstractBeginNode exit, LocationIdentity identity) { + public MemoryProxyNode(MemoryNode value, AbstractBeginNode exit, LocationIdentity identity) { super(StampFactory.forVoid(), exit); this.value = value; - assert value instanceof MemoryNode; this.identity = identity; } @Override public ValueNode value() { - return value; + return value.asNode(); } public LocationIdentity getLocationIdentity() { @@ -71,4 +70,8 @@ public MemoryPhiNode asMemoryPhi() { return getOriginalMemoryNode().asMemoryPhi(); } + + public Node getOriginalNode() { + return value.asNode(); + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -25,7 +25,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.type.*; public abstract class PhiNode extends FloatingNode { @@ -58,7 +57,7 @@ /** * Get the instruction that produces the value associated with the i'th predecessor of the * merge. - * + * * @param i the index of the predecessor * @return the instruction that produced the value in the i'th predecessor */ @@ -68,7 +67,7 @@ /** * Sets the value at the given index and makes sure that the values list is large enough. - * + * * @param i the index at which to set the value * @param x the new phi input value for the given location */ @@ -89,7 +88,7 @@ /** * Get the number of inputs to this phi (i.e. the number of predecessors to the merge). - * + * * @return the number of inputs in this phi */ public int valueCount() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -94,7 +94,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -27,14 +27,13 @@ import com.oracle.graal.graph.Node.ValueNumberable; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; /** * A proxy is inserted at loop exits for any value that is created inside the loop (i.e. was not * live on entry to the loop) and is (potentially) used after the loop. */ -public abstract class ProxyNode extends FloatingNode implements IterableNodeType, ValueNumberable, ValueAndStampProxy { +public abstract class ProxyNode extends FloatingNode implements IterableNodeType, ValueNumberable { @Input(InputType.Association) private AbstractBeginNode proxyPoint; @@ -58,20 +57,15 @@ return super.verify(); } - @Override - public ValueNode getOriginalValue() { - return value(); - } - public static MemoryProxyNode forMemory(MemoryNode value, AbstractBeginNode exit, LocationIdentity location, StructuredGraph graph) { - return graph.unique(new MemoryProxyNode(ValueNodeUtil.asNode(value), exit, location)); + return graph.unique(new MemoryProxyNode(value, exit, location)); } public static ValueProxyNode forValue(ValueNode value, AbstractBeginNode exit, StructuredGraph graph) { return graph.unique(new ValueProxyNode(value, exit)); } - public static GuardProxyNode forGuard(ValueNode value, AbstractBeginNode exit, StructuredGraph graph) { + public static GuardProxyNode forGuard(GuardingNode value, AbstractBeginNode exit, StructuredGraph graph) { return graph.unique(new GuardProxyNode(value, exit)); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -123,7 +123,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -26,7 +26,7 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.spi.*; -public class ValueProxyNode extends ProxyNode implements Canonicalizable, Virtualizable { +public class ValueProxyNode extends ProxyNode implements Canonicalizable, Virtualizable, ValueAndStampProxy { @Input private ValueNode value; @@ -60,4 +60,9 @@ tool.replaceWithVirtual(state.getVirtualObject()); } } + + @Override + public ValueNode getOriginalNode() { + return value(); + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -54,7 +54,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -69,7 +69,7 @@ @Override public Node canonical(CanonicalizerTool tool) { if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) { - return graph().unique(new FloatingReadNode(((PiNode) object()).getOriginalValue(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType(), isCompressible())); + return graph().unique(new FloatingReadNode(((PiNode) object()).getOriginalNode(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType(), isCompressible())); } return ReadNode.canonicalizeRead(this, location(), object(), tool, isCompressible()); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -62,7 +62,7 @@ @Override public Node canonical(CanonicalizerTool tool) { if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) { - return graph().add(new ReadNode(((PiNode) object()).getOriginalValue(), location(), stamp(), getGuard(), getBarrierType(), isCompressible())); + return graph().add(new ReadNode(((PiNode) object()).getOriginalNode(), location(), stamp(), getGuard(), getBarrierType(), isCompressible())); } return canonicalizeRead(this, location(), object(), tool, isCompressible()); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -54,7 +54,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -60,7 +60,7 @@ @Override public void simplify(SimplifierTool tool) { if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) { - setObject(((PiNode) object()).getOriginalValue()); + setObject(((PiNode) object()).getOriginalNode()); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon Apr 07 13:55:45 2014 +0200 @@ -201,7 +201,7 @@ } @Override - public ValueNode getOriginalValue() { + public ValueNode getOriginalNode() { return object; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/MemoryProxy.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/MemoryProxy.java Mon Apr 07 13:55:45 2014 +0200 @@ -25,7 +25,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.extended.*; -public interface MemoryProxy extends ValueProxy, MemoryNode { +public interface MemoryProxy extends Proxy, MemoryNode { LocationIdentity getLocationIdentity();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Proxy.java Mon Apr 07 13:55:45 2014 +0200 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013, 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.spi; + +import com.oracle.graal.graph.*; + +/** + * This interface marks nodes whose result is the same as one of their inputs. Such nodes are used + * to add type information, to introduce scheduling restrictions, etc. + * + * For some algorithms it is necessary or advantageous to see through these proxies. + */ +public interface Proxy extends NodeInterface { + + Node getOriginalNode(); + +}
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ValueProxy.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ValueProxy.java Mon Apr 07 13:55:45 2014 +0200 @@ -27,11 +27,11 @@ /** * This interface marks nodes whose result is the same as one of their inputs. Such nodes are used * to add type information, to introduce scheduling restrictions, etc. - * + * * For some algorithms it is necessary or advantageous to see through these proxies. */ -public interface ValueProxy { +public interface ValueProxy extends Proxy { - ValueNode getOriginalValue(); + ValueNode getOriginalNode(); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Mon Apr 07 13:55:45 2014 +0200 @@ -168,7 +168,7 @@ if (proxyPoint instanceof LoopExitNode) { LoopExitNode exit = (LoopExitNode) proxyPoint; LoopBeginNode loopBegin = exit.loopBegin(); - ValueNode vpnValue = vpn.value(); + Node vpnValue = vpn.value(); for (ValueNode v : loopBegin.stateAfter().values()) { ValueNode v2 = v; if (loopBegin.isPhiAtMerge(v2)) { @@ -297,7 +297,7 @@ public static ValueNode unproxify(ValueNode value) { ValueNode result = value; while (result instanceof ValueProxy) { - result = ((ValueProxy) result).getOriginalValue(); + result = ((ValueProxy) result).getOriginalNode(); } return result; } @@ -313,7 +313,7 @@ ValueNode v = proxy; do { if (v instanceof ValueProxy) { - v = ((ValueProxy) v).getOriginalValue(); + v = ((ValueProxy) v).getOriginalNode(); } else if (v instanceof PhiNode) { v = ((PhiNode) v).singleValue(); } else { @@ -339,7 +339,7 @@ worklist.add(proxy); for (Node node : worklist) { if (node instanceof ValueProxy) { - ValueNode originalValue = ((ValueProxy) node).getOriginalValue(); + ValueNode originalValue = ((ValueProxy) node).getOriginalNode(); if (!process(originalValue, worklist)) { return; }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Mon Apr 07 11:32:09 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Mon Apr 07 13:55:45 2014 +0200 @@ -845,7 +845,7 @@ for (Node n : value.usages()) { if (n instanceof ValueProxy) { ValueProxy proxyNode = (ValueProxy) n; - if (proxyNode.getOriginalValue() == value) { + if (proxyNode.getOriginalNode() == value) { GuardingNode result = searchAnchor((ValueNode) n, type); if (result != null) { return result;