Mercurial > hg > graal-compiler
changeset 11426:ddbeefb142a7
Truffle: distinguish tag access from byte access.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Mon, 26 Aug 2013 20:26:49 +0200 |
parents | decad422aa0c |
children | 6f58979d0755 565724c714a7 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java |
diffstat | 4 files changed, 17 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameAccessNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -34,6 +34,7 @@ import com.oracle.graal.nodes.type.*; import com.oracle.graal.truffle.*; import com.oracle.graal.truffle.nodes.*; +import com.oracle.graal.truffle.substitutions.*; import com.oracle.truffle.api.frame.*; /** @@ -113,14 +114,17 @@ } protected final boolean isValidAccessKind() { - if (getSlotKind() == Kind.Byte) { - // tag access + if (isTagAccess()) { return true; } return getSlotKind() == getGraalKind(getConstantFrameSlot().getKind()); } + protected final boolean isTagAccess() { + return field == FrameWithoutBoxingSubstitutions.TAGS_FIELD; + } + private static Kind getGraalKind(FrameSlotKind kind) { switch (kind) { case Object: @@ -156,6 +160,9 @@ @Override public Map<Object, Object> getDebugProperties(Map<Object, Object> map) { Map<Object, Object> properties = super.getDebugProperties(map); + if (isTagAccess()) { + properties.put("slotKind", "Tag"); + } if (isConstantFrameSlot()) { properties.put("frameSlot", getConstantFrameSlot().toString()); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameGetNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -78,12 +78,12 @@ LoadFieldNode loadFieldNode = graph().add(new LoadFieldNode(getFrame(), field)); structuredGraph.addBeforeFixed(this, loadFieldNode); FixedWithNextNode loadNode; - if (!getSlotKind().isPrimitive()) { + if (isTagAccess()) { + ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); + loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, getSlotKind())); + } else if (!getSlotKind().isPrimitive()) { ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, Kind.Object)); - } else if (getSlotKind() == Kind.Byte) { - ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); - loadNode = graph().add(new LoadIndexedNode(loadFieldNode, slotIndex, Kind.Byte)); } else { ValueNode slotOffset = getSlotOffset(Unsafe.ARRAY_LONG_INDEX_SCALE, tool.getRuntime()); loadNode = graph().add(new UnsafeLoadNode(loadFieldNode, Unsafe.ARRAY_LONG_BASE_OFFSET, slotOffset, getSlotKind()));
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/FrameSetNode.java Mon Aug 26 20:26:49 2013 +0200 @@ -79,10 +79,10 @@ structuredGraph.addBeforeFixed(this, loadFieldNode); FixedWithNextNode storeNode; ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); - if (!getSlotKind().isPrimitive()) { + if (isTagAccess()) { + storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, getSlotKind(), value)); + } else if (!getSlotKind().isPrimitive()) { storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Object, value)); - } else if (getSlotKind() == Kind.Byte) { - storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Byte, value)); } else { storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Long, value)); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Mon Aug 26 20:21:43 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/FrameWithoutBoxingSubstitutions.java Mon Aug 26 20:26:49 2013 +0200 @@ -36,7 +36,7 @@ private static final ResolvedJavaField LOCALS_FIELD; private static final ResolvedJavaField PRIMITIVELOCALS_FIELD; - private static final ResolvedJavaField TAGS_FIELD; + public static final ResolvedJavaField TAGS_FIELD; static { try {