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