# HG changeset patch # User Lukas Stadler # Date 1403792856 -7200 # Node ID e6919996abe980c0a7a60bf81fae9e38b1798000 # Parent a56aabb15e9895b96f1d8e89f1b43faf966254a3 new constructor (with nullCheck and stateBefore) for ReadNode diff -r a56aabb15e98 -r e6919996abe9 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java Thu Jun 26 16:27:36 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java Thu Jun 26 16:27:36 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, 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 @@ -33,6 +33,11 @@ super(stamp); } + public DeoptimizingFixedWithNextNode(Stamp stamp, FrameState stateBefore) { + super(stamp); + this.stateBefore = stateBefore; + } + @Override public FrameState stateBefore() { return stateBefore; diff -r a56aabb15e98 -r e6919996abe9 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java Thu Jun 26 16:27:36 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java Thu Jun 26 16:27:36 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, 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 @@ -64,19 +64,20 @@ } public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp) { - this(object, location, stamp, null, BarrierType.NONE); + this(object, location, stamp, BarrierType.NONE); } public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) { - this(object, location, stamp, null, barrierType); + this(object, location, stamp, null, barrierType, false, null); } - public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) { - super(stamp); + public FixedAccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) { + super(stamp, stateBefore); this.object = object; this.location = location; this.guard = guard; this.barrierType = barrierType; + this.nullCheck = nullCheck; } @Override diff -r a56aabb15e98 -r e6919996abe9 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 Thu Jun 26 16:27:36 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java Thu Jun 26 16:27:36 2014 +0200 @@ -36,11 +36,11 @@ } public FloatableAccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) { - super(object, location, stamp, guard, barrierType); + super(object, location, stamp, guard, barrierType, false, null); } - public FloatableAccessNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) { - super(object, location, stamp, barrierType); + public FloatableAccessNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) { + super(object, location, stamp, guard, barrierType, nullCheck, stateBefore); } public abstract FloatingAccessNode asFloatingNode(MemoryNode lastLocationAccess); diff -r a56aabb15e98 -r e6919996abe9 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 Thu Jun 26 16:27:36 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Thu Jun 26 16:27:36 2014 +0200 @@ -37,13 +37,17 @@ public final class ReadNode extends FloatableAccessNode implements LIRLowerable, Canonicalizable, PiPushable, Virtualizable, GuardingNode { public ReadNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) { - super(object, location, stamp, barrierType); + super(object, location, stamp, null, barrierType); } public ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) { super(object, location, stamp, guard, barrierType); } + public ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) { + super(object, location, stamp, guard, barrierType, nullCheck, stateBefore); + } + private ReadNode(ValueNode object, ValueNode location, ValueNode guard, BarrierType barrierType) { /* * Used by node intrinsics. Really, you can trust me on that! Since the initial value for @@ -63,10 +67,7 @@ @Override public Node canonical(CanonicalizerTool tool) { if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) { - ReadNode readNode = graph().add(new ReadNode(((PiNode) object()).getOriginalNode(), location(), stamp(), getGuard(), getBarrierType())); - readNode.setNullCheck(getNullCheck()); - readNode.setStateBefore(stateBefore()); - return readNode; + return new ReadNode(((PiNode) object()).getOriginalNode(), location(), stamp(), getGuard(), getBarrierType(), getNullCheck(), stateBefore()); } return canonicalizeRead(this, location(), object(), tool); } @@ -87,7 +88,7 @@ GuardingNode guard = ((Access) read).getGuard(); if (guard != null && !(guard instanceof FixedNode)) { // The guard is necessary even if the read goes away. - return read.graph().add(new ValueAnchorNode((ValueNode) guard)); + return new ValueAnchorNode((ValueNode) guard); } else { // Read without usages or guard can be safely removed. return null; @@ -109,7 +110,7 @@ constant = tool.getConstantReflection().readUnsafeConstant(Kind.Object, base, displacement); } if (constant != null) { - return ConstantNode.forConstant(read.stamp(), constant, metaAccess, read.graph()); + return ConstantNode.forConstant(read.stamp(), constant, metaAccess); } } }