Mercurial > hg > graal-compiler
changeset 23091:ee40de319a24
Provide methods to create implicit load/store converts without adding them to the graph.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 26 Nov 2015 14:27:42 +0100 |
parents | 9496d2b81bc2 |
children | 407b3a638b04 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java |
diffstat | 3 files changed, 47 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Wed Nov 25 21:40:38 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Thu Nov 26 14:27:42 2015 +0100 @@ -63,6 +63,7 @@ import com.oracle.graal.graph.NodeInputList; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; import com.oracle.graal.hotspot.nodes.CompressionNode; +import com.oracle.graal.hotspot.nodes.CompressionNode.CompressionOp; import com.oracle.graal.hotspot.nodes.ComputeObjectAddressNode; import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier; import com.oracle.graal.hotspot.nodes.G1ArrayRangePreWriteBarrier; @@ -412,11 +413,11 @@ } @Override - protected ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) { + protected ValueNode implicitLoadConvert(JavaKind kind, ValueNode value, boolean compressible) { if (kind == JavaKind.Object && compressible && config().useCompressedOops) { - return CompressionNode.uncompress(value, config().getOopEncoding()); + return new CompressionNode(CompressionOp.Uncompress, value, config().getOopEncoding()); } - return super.implicitLoadConvert(graph, kind, value, compressible); + return super.implicitLoadConvert(kind, value, compressible); } @Override @@ -427,11 +428,11 @@ } @Override - protected ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) { + protected ValueNode implicitStoreConvert(JavaKind kind, ValueNode value, boolean compressible) { if (kind == JavaKind.Object && compressible && config().useCompressedOops) { - return CompressionNode.compress(value, config().getOopEncoding()); + return new CompressionNode(CompressionOp.Compress, value, config().getOopEncoding()); } - return super.implicitStoreConvert(graph, kind, value, compressible); + return super.implicitStoreConvert(kind, value, compressible); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Nov 25 21:40:38 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Thu Nov 26 14:27:42 2015 +0100 @@ -463,21 +463,25 @@ } public static ConstantNode defaultForKind(JavaKind kind, StructuredGraph graph) { + return unique(graph, defaultForKind(kind)); + } + + public static ConstantNode defaultForKind(JavaKind kind) { switch (kind) { case Boolean: case Byte: case Char: case Short: case Int: - return ConstantNode.forInt(0, graph); + return ConstantNode.forInt(0); case Double: - return ConstantNode.forDouble(0.0, graph); + return ConstantNode.forDouble(0.0); case Float: - return ConstantNode.forFloat(0.0f, graph); + return ConstantNode.forFloat(0.0f); case Long: - return ConstantNode.forLong(0L, graph); + return ConstantNode.forLong(0L); case Object: - return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null, graph); + return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null); default: return null; }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Wed Nov 25 21:40:38 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Thu Nov 26 14:27:42 2015 +0100 @@ -715,35 +715,58 @@ return stamp; } - public ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value) { + public final ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value) { return implicitLoadConvert(graph, kind, value, true); + } + public ValueNode implicitLoadConvert(JavaKind kind, ValueNode value) { + return implicitLoadConvert(kind, value, true); } - protected ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) { + protected final ValueNode implicitLoadConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) { + ValueNode ret = implicitLoadConvert(kind, value, compressible); + if (!ret.isAlive()) { + ret = graph.addOrUnique(ret); + } + return ret; + } + + protected ValueNode implicitLoadConvert(JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) { switch (kind) { case Byte: case Short: - return graph.unique(new SignExtendNode(value, 32)); + return new SignExtendNode(value, 32); case Boolean: case Char: - return graph.unique(new ZeroExtendNode(value, 32)); + return new ZeroExtendNode(value, 32); } return value; } - public ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value) { + public final ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value) { return implicitStoreConvert(graph, kind, value, true); } - protected ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) { + public ValueNode implicitStoreConvert(JavaKind kind, ValueNode value) { + return implicitStoreConvert(kind, value, true); + } + + protected final ValueNode implicitStoreConvert(StructuredGraph graph, JavaKind kind, ValueNode value, boolean compressible) { + ValueNode ret = implicitStoreConvert(kind, value, compressible); + if (!ret.isAlive()) { + ret = graph.addOrUnique(ret); + } + return ret; + } + + protected ValueNode implicitStoreConvert(JavaKind kind, ValueNode value, @SuppressWarnings("unused") boolean compressible) { switch (kind) { case Boolean: case Byte: - return graph.unique(new NarrowNode(value, 8)); + return new NarrowNode(value, 8); case Char: case Short: - return graph.unique(new NarrowNode(value, 16)); + return new NarrowNode(value, 16); } return value; }