# HG changeset patch # User Lukas Stadler # Date 1403714861 -7200 # Node ID 0aac7ed51b125374fb7d1ac314e01ab391ddb408 # Parent 32b829303ff2e69b3fcf1755398c2fbd3e4e9277 Temporarily back out faulty changeset cc4b4fd5c484 diff -r 32b829303ff2 -r 0aac7ed51b12 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Wed Jun 25 17:58:51 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Wed Jun 25 18:47:41 2014 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -37,7 +37,7 @@ * The {@code LoadFieldNode} represents a read of a static or instance field. */ @NodeInfo(nameTemplate = "LoadField#{p#field/s}") -public final class LoadFieldNode extends AccessFieldNode implements Canonicalizable.Unary, VirtualizableRoot { +public final class LoadFieldNode extends AccessFieldNode implements Canonicalizable, VirtualizableRoot { /** * Creates a new LoadFieldNode instance. @@ -49,10 +49,6 @@ super(createStamp(field), object, field); } - public ValueNode getValue() { - return object(); - } - private static Stamp createStamp(ResolvedJavaField field) { Kind kind = field.getKind(); if (kind == Kind.Object && field.getType() instanceof ResolvedJavaType) { @@ -64,26 +60,22 @@ @Override public Node canonical(CanonicalizerTool tool) { - return canonical(tool, getValue()); - } - - public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) { - if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isObjectNonNull(forObject.stamp()))) { + if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isObjectNonNull(object().stamp()))) { return null; } MetaAccessProvider metaAccess = tool.getMetaAccess(); if (tool.canonicalizeReads() && metaAccess != null) { - ConstantNode constant = asConstant(metaAccess, forObject); + ConstantNode constant = asConstant(metaAccess); if (constant != null) { return constant; } - PhiNode phi = asPhi(metaAccess, forObject); + PhiNode phi = asPhi(metaAccess); if (phi != null) { return phi; } } - if (!isStatic() && forObject.isNullConstant()) { - return new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.NullCheckException); + if (!isStatic() && object().isNullConstant()) { + return graph().add(new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.NullCheckException)); } return this; } @@ -91,22 +83,22 @@ /** * Gets a constant value for this load if possible. */ - public ConstantNode asConstant(MetaAccessProvider metaAccess, ValueNode forObject) { + public ConstantNode asConstant(MetaAccessProvider metaAccess) { Constant constant = null; if (isStatic()) { constant = field().readConstantValue(null); - } else if (forObject.isConstant() && !forObject.isNullConstant()) { - constant = field().readConstantValue(forObject.asConstant()); + } else if (object().isConstant() && !object().isNullConstant()) { + constant = field().readConstantValue(object().asConstant()); } if (constant != null) { - return ConstantNode.forConstant(constant, metaAccess); + return ConstantNode.forConstant(constant, metaAccess, graph()); } return null; } - private PhiNode asPhi(MetaAccessProvider metaAccess, ValueNode forObject) { - if (!isStatic() && field.isFinal() && forObject instanceof ValuePhiNode && ((ValuePhiNode) forObject).values().filter(isNotA(ConstantNode.class)).isEmpty()) { - PhiNode phi = (PhiNode) forObject; + private PhiNode asPhi(MetaAccessProvider metaAccess) { + if (!isStatic() && field.isFinal() && object() instanceof ValuePhiNode && ((ValuePhiNode) object()).values().filter(isNotA(ConstantNode.class)).isEmpty()) { + PhiNode phi = (PhiNode) object(); Constant[] constants = new Constant[phi.valueCount()]; for (int i = 0; i < phi.valueCount(); i++) { Constant constantValue = field().readConstantValue(phi.valueAt(i).asConstant()); @@ -115,11 +107,11 @@ } constants[i] = constantValue; } - ConstantNode[] constantNodes = new ConstantNode[phi.valueCount()]; + PhiNode newPhi = graph().addWithoutUnique(new ValuePhiNode(stamp(), phi.merge())); for (int i = 0; i < phi.valueCount(); i++) { - constantNodes[i] = ConstantNode.forConstant(constants[i], metaAccess); + newPhi.addInput(ConstantNode.forConstant(constants[i], metaAccess, graph())); } - return new ValuePhiNode(stamp(), phi.merge(), constantNodes); + return newPhi; } return null; } diff -r 32b829303ff2 -r 0aac7ed51b12 graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Wed Jun 25 17:58:51 2014 +0200 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Wed Jun 25 18:47:41 2014 +0200 @@ -134,9 +134,9 @@ * Fold constant field reads, e.g. enum constants. */ protected void rewriteLoadField(StructuredGraph graph, LoadFieldNode node) { - ConstantNode constant = node.asConstant(metaAccess, node.object()); + ConstantNode constant = node.asConstant(metaAccess); if (constant != null) { - node.replaceAtUsages(graph.unique(constant)); + node.replaceAtUsages(constant); graph.removeFixed(node); } }