# HG changeset patch # User Gilles Duboscq # Date 1386766122 -3600 # Node ID 1734954cc73d52dc971823e0062ba1d2b91e2887 # Parent 9c3c915b5f560afeee3cca44e6fb4ba336e0257a Rename AccessNode to FixedAccessNode diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Wed Dec 11 13:48:42 2013 +0100 @@ -66,7 +66,7 @@ } } - protected static void addG1PreWriteBarrier(AccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean doLoad, boolean nullCheck, StructuredGraph graph) { + protected static void addG1PreWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean doLoad, boolean nullCheck, StructuredGraph graph) { G1PreWriteBarrier preBarrier = graph.add(new G1PreWriteBarrier(object, value, location, doLoad, nullCheck)); preBarrier.setDeoptimizationState(node.getDeoptimizationState()); node.setNullCheck(false); @@ -74,12 +74,12 @@ graph.addBeforeFixed(node, preBarrier); } - protected void addG1PostWriteBarrier(AccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { + protected void addG1PostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { final boolean alwaysNull = ObjectStamp.isObjectAlwaysNull(value); graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(object, value, location, precise, alwaysNull))); } - protected void addSerialPostWriteBarrier(AccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { + protected void addSerialPostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) { final boolean alwaysNull = ObjectStamp.isObjectAlwaysNull(value); final LocationNode loc = (precise ? location : null); graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(object, loc, precise, alwaysNull))); diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Wed Dec 11 13:48:42 2013 +0100 @@ -73,12 +73,12 @@ Node currentNode = iterator.next(); assert !isSafepoint(currentNode) : "Write barrier must be present " + write; if (useG1GC()) { - if (!(currentNode instanceof G1PostWriteBarrier) || ((currentNode instanceof G1PostWriteBarrier) && !validateBarrier((AccessNode) write, (WriteBarrier) currentNode))) { + if (!(currentNode instanceof G1PostWriteBarrier) || ((currentNode instanceof G1PostWriteBarrier) && !validateBarrier((FixedAccessNode) write, (WriteBarrier) currentNode))) { expandFrontier(frontier, currentNode); } } else { - if (!(currentNode instanceof SerialWriteBarrier) || ((currentNode instanceof SerialWriteBarrier) && !validateBarrier((AccessNode) write, (WriteBarrier) currentNode)) || - ((currentNode instanceof SerialWriteBarrier) && !validateBarrier((AccessNode) write, (WriteBarrier) currentNode))) { + if (!(currentNode instanceof SerialWriteBarrier) || ((currentNode instanceof SerialWriteBarrier) && !validateBarrier((FixedAccessNode) write, (WriteBarrier) currentNode)) || + ((currentNode instanceof SerialWriteBarrier) && !validateBarrier((FixedAccessNode) write, (WriteBarrier) currentNode))) { expandFrontier(frontier, currentNode); } } @@ -90,8 +90,8 @@ final Node previous = node.predecessor(); final boolean validatePreBarrier = HotSpotReplacementsUtil.useG1GC() && (isObjectWrite(node) || !((ArrayRangeWriteNode) node).isInitialization()); if (isObjectWrite(node)) { - return next instanceof WriteBarrier && validateBarrier((AccessNode) node, (WriteBarrier) next) && - (!validatePreBarrier || (previous instanceof WriteBarrier && validateBarrier((AccessNode) node, (WriteBarrier) previous))); + return next instanceof WriteBarrier && validateBarrier((FixedAccessNode) node, (WriteBarrier) next) && + (!validatePreBarrier || (previous instanceof WriteBarrier && validateBarrier((FixedAccessNode) node, (WriteBarrier) previous))); } else if (isObjectArrayRangeWrite(node)) { return ((next instanceof ArrayRangeWriteBarrier) && ((ArrayRangeWriteNode) node).getArray() == ((ArrayRangeWriteBarrier) next).getObject()) && @@ -103,7 +103,7 @@ private static boolean isObjectWrite(Node node) { // Read nodes with barrier attached (G1 Ref field) are not validated yet. - return node instanceof AccessNode && ((HeapAccess) node).getBarrierType() != BarrierType.NONE && !(node instanceof ReadNode); + return node instanceof FixedAccessNode && ((HeapAccess) node).getBarrierType() != BarrierType.NONE && !(node instanceof ReadNode); } private static boolean isObjectArrayRangeWrite(Node node) { @@ -127,7 +127,7 @@ return ((node instanceof DeoptimizingNode) && ((DeoptimizingNode) node).canDeoptimize()) || (node instanceof LoopBeginNode); } - private static boolean validateBarrier(AccessNode write, WriteBarrier barrier) { + private static boolean validateBarrier(FixedAccessNode write, WriteBarrier barrier) { assert write instanceof WriteNode || write instanceof LoweredCompareAndSwapNode : "Node must be of type requiring a write barrier"; if ((barrier.getObject() == write.object()) && (!barrier.usePrecise() || (barrier.usePrecise() && barrier.getLocation() == write.location()))) { return true; diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AccessNode.java Wed Dec 11 12:21:07 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (c) 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.extended; - -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.type.*; - -/** - * Accesses a value at an memory address specified by an {@linkplain #object object} and a - * {@linkplain #nullCheckLocation() location}. The access does not include a null check on the - * object. - */ -public abstract class AccessNode extends DeoptimizingFixedWithNextNode implements Access, GuardingNode { - - @Input private GuardingNode guard; - @Input private ValueNode object; - @Input private ValueNode location; - private boolean nullCheck; - private BarrierType barrierType; - private boolean compressible; - - public ValueNode object() { - return object; - } - - public LocationNode location() { - return (LocationNode) location; - } - - public LocationNode nullCheckLocation() { - return (LocationNode) location; - } - - public boolean getNullCheck() { - return nullCheck; - } - - public void setNullCheck(boolean check) { - this.nullCheck = check; - } - - public AccessNode(ValueNode object, ValueNode location, Stamp stamp) { - this(object, location, stamp, null, BarrierType.NONE, false); - } - - public AccessNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType, boolean compressible) { - this(object, location, stamp, null, barrierType, compressible); - } - - public AccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean compressible) { - super(stamp); - this.object = object; - this.location = location; - this.guard = guard; - this.barrierType = barrierType; - this.compressible = compressible; - } - - @Override - public boolean canDeoptimize() { - return nullCheck; - } - - @Override - public GuardingNode getGuard() { - return guard; - } - - @Override - public void setGuard(GuardingNode guard) { - updateUsages(this.guard == null ? null : this.guard.asNode(), guard == null ? null : guard.asNode()); - this.guard = guard; - } - - @Override - public BarrierType getBarrierType() { - return barrierType; - } - - @Override - public boolean isCompressible() { - return compressible; - } -} diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java Wed Dec 11 13:48:42 2013 +0100 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 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.extended; + +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.type.*; + +/** + * Accesses a value at an memory address specified by an {@linkplain #object object} and a + * {@linkplain #nullCheckLocation() location}. The access does not include a null check on the + * object. + */ +public abstract class FixedAccessNode extends DeoptimizingFixedWithNextNode implements Access, GuardingNode { + + @Input private GuardingNode guard; + @Input private ValueNode object; + @Input private ValueNode location; + private boolean nullCheck; + private BarrierType barrierType; + private boolean compressible; + + public ValueNode object() { + return object; + } + + public LocationNode location() { + return (LocationNode) location; + } + + public LocationNode nullCheckLocation() { + return (LocationNode) location; + } + + public boolean getNullCheck() { + return nullCheck; + } + + public void setNullCheck(boolean check) { + this.nullCheck = check; + } + + public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp) { + this(object, location, stamp, null, BarrierType.NONE, false); + } + + public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType, boolean compressible) { + this(object, location, stamp, null, barrierType, compressible); + } + + public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean compressible) { + super(stamp); + this.object = object; + this.location = location; + this.guard = guard; + this.barrierType = barrierType; + this.compressible = compressible; + } + + @Override + public boolean canDeoptimize() { + return nullCheck; + } + + @Override + public GuardingNode getGuard() { + return guard; + } + + @Override + public void setGuard(GuardingNode guard) { + updateUsages(this.guard == null ? null : this.guard.asNode(), guard == null ? null : guard.asNode()); + this.guard = guard; + } + + @Override + public BarrierType getBarrierType() { + return barrierType; + } + + @Override + public boolean isCompressible() { + return compressible; + } +} diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java Wed Dec 11 13:48:42 2013 +0100 @@ -27,9 +27,9 @@ import com.oracle.graal.nodes.type.*; /** - * An {@link AccessNode} that can be converted to a {@link FloatingAccessNode}. + * An {@link FixedAccessNode} that can be converted to a {@link FloatingAccessNode}. */ -public abstract class FloatableAccessNode extends AccessNode { +public abstract class FloatableAccessNode extends FixedAccessNode { public FloatableAccessNode(ValueNode object, ValueNode location, Stamp stamp) { super(object, location, stamp); diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Wed Dec 11 13:48:42 2013 +0100 @@ -31,7 +31,7 @@ import com.oracle.graal.nodes.virtual.*; /** - * Reads an {@linkplain AccessNode accessed} value. + * Reads an {@linkplain FixedAccessNode accessed} value. */ public final class ReadNode extends FloatableAccessNode implements LIRLowerable, Canonicalizable, PiPushable, Virtualizable { diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Wed Dec 11 13:48:42 2013 +0100 @@ -31,9 +31,9 @@ import com.oracle.graal.nodes.virtual.*; /** - * Writes a given {@linkplain #value() value} a {@linkplain AccessNode memory location}. + * Writes a given {@linkplain #value() value} a {@linkplain FixedAccessNode memory location}. */ -public final class WriteNode extends AccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint.Single, MemoryAccess, Virtualizable { +public final class WriteNode extends FixedAccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint.Single, MemoryAccess, Virtualizable { @Input private ValueNode value; @Input(notDataflow = true) private FrameState stateAfter; diff -r 9c3c915b5f56 -r 1734954cc73d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Wed Dec 11 12:21:07 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Wed Dec 11 13:48:42 2013 +0100 @@ -31,7 +31,7 @@ /** * Represents the lowered version of an atomic compare-and-swap operation{@code CompareAndSwapNode}. */ -public class LoweredCompareAndSwapNode extends AccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint.Single { +public class LoweredCompareAndSwapNode extends FixedAccessNode implements StateSplit, LIRLowerable, MemoryCheckpoint.Single { @Input private ValueNode expectedValue; @Input private ValueNode newValue;