src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadFieldNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadFieldNode.java	Mon Mar 20 17:40:54 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadFieldNode.java	Mon Mar 20 17:40:54 2017

*** 46,55 **** --- 46,56 ---- import jdk.vm.ci.meta.Assumptions; import jdk.vm.ci.meta.DeoptimizationAction; import jdk.vm.ci.meta.DeoptimizationReason; import jdk.vm.ci.meta.JavaConstant; + import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.ResolvedJavaField; /** * The {@code LoadFieldNode} represents a read of a static or instance field.
*** 106,132 **** --- 107,134 ---- /** * Gets a constant value for this load if possible. */ public ConstantNode asConstant(CanonicalizerTool tool, ValueNode forObject) { if (isStatic()) { ! return ConstantFoldUtil.tryConstantFold(tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getMetaAccess(), field(), null, getOptions()); } else if (forObject.isConstant() && !forObject.isNullConstant()) { ! return ConstantFoldUtil.tryConstantFold(tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getMetaAccess(), field(), forObject.asJavaConstant(), getOptions()); } return null; } public ConstantNode asConstant(CanonicalizerTool tool, JavaConstant constant) { ! return ConstantFoldUtil.tryConstantFold(tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getMetaAccess(), field(), constant, getOptions()); } private PhiNode asPhi(CanonicalizerTool tool, ValueNode forObject) { if (!isStatic() && field.isFinal() && forObject instanceof ValuePhiNode && ((ValuePhiNode) forObject).values().filter(isNotA(ConstantNode.class)).isEmpty()) { PhiNode phi = (PhiNode) forObject; ConstantNode[] constantNodes = new ConstantNode[phi.valueCount()]; for (int i = 0; i < phi.valueCount(); i++) { ! ConstantNode constant = ConstantFoldUtil.tryConstantFold(tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getMetaAccess(), field(), phi.valueAt(i).asJavaConstant()); ! ConstantNode constant = ConstantFoldUtil.tryConstantFold(tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getMetaAccess(), field(), phi.valueAt(i).asJavaConstant(), + getOptions()); if (constant == null) { return null; } constantNodes[i] = constant; }
*** 139,153 **** --- 141,166 ---- public void virtualize(VirtualizerTool tool) { ValueNode alias = tool.getAlias(object()); if (alias instanceof VirtualObjectNode) { int fieldIndex = ((VirtualInstanceNode) alias).fieldIndex(field()); if (fieldIndex != -1) { ! tool.replaceWith(tool.getEntry((VirtualObjectNode) alias, fieldIndex)); ! ValueNode entry = tool.getEntry((VirtualObjectNode) alias, fieldIndex); + if (stamp.isCompatible(entry.stamp())) { + tool.replaceWith(entry); + } else { + assert stamp().getStackKind() == JavaKind.Int && (entry.stamp().getStackKind() == JavaKind.Long || entry.getStackKind() == JavaKind.Double || + entry.getStackKind() == JavaKind.Illegal) : "Can only allow different stack kind two slot marker writes on one stot fields."; + } } } } @Override public Stamp uncheckedStamp() { return uncheckedStamp; } + + public void setObject(ValueNode newObject) { + this.updateUsages(object, newObject); + this.object = newObject; + } }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadFieldNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File