Mercurial > hg > truffle
changeset 6354:6a324c13cfff
add fillContents property to New... nodes
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 11 Sep 2012 14:25:40 +0200 |
parents | 2590d9cc3b6d |
children | 892d3c82febe |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MaterializeObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewObjectArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewPrimitiveArrayNode.java |
diffstat | 6 files changed, 40 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Sep 11 14:25:40 2012 +0200 @@ -663,7 +663,7 @@ void genNewInstance(int cpi) { JavaType type = lookupType(cpi, NEW); if (type instanceof ResolvedJavaType && ((ResolvedJavaType) type).isInitialized()) { - NewInstanceNode n = currentGraph.add(new NewInstanceNode((ResolvedJavaType) type)); + NewInstanceNode n = currentGraph.add(new NewInstanceNode((ResolvedJavaType) type, true)); frameState.apush(append(n)); } else { append(currentGraph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.Unresolved, graphId))); @@ -696,7 +696,7 @@ private void genNewPrimitiveArray(int typeCode) { Kind kind = arrayTypeCodeToKind(typeCode); ResolvedJavaType elementType = runtime.getResolvedJavaType(kind); - NewPrimitiveArrayNode nta = currentGraph.add(new NewPrimitiveArrayNode(elementType, frameState.ipop())); + NewPrimitiveArrayNode nta = currentGraph.add(new NewPrimitiveArrayNode(elementType, frameState.ipop(), true)); frameState.apush(append(nta)); } @@ -704,7 +704,7 @@ JavaType type = lookupType(cpi, ANEWARRAY); ValueNode length = frameState.ipop(); if (type instanceof ResolvedJavaType) { - NewArrayNode n = currentGraph.add(new NewObjectArrayNode((ResolvedJavaType) type, length)); + NewArrayNode n = currentGraph.add(new NewObjectArrayNode((ResolvedJavaType) type, length, true)); frameState.apush(append(n)); } else { append(currentGraph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.Unresolved, graphId)));
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MaterializeObjectNode.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MaterializeObjectNode.java Tue Sep 11 14:25:40 2012 +0200 @@ -29,17 +29,17 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(nameTemplate = "Materialize {p#type/s}") -public final class MaterializeObjectNode extends FixedWithNextNode implements Lowerable, Node.IterableNodeType { +public final class MaterializeObjectNode extends FixedWithNextNode implements Lowerable, Node.IterableNodeType, Canonicalizable { @Input private final NodeInputList<ValueNode> values; private final ResolvedJavaType type; private final EscapeField[] fields; - public MaterializeObjectNode(ResolvedJavaType type, EscapeField[] fields, ValueNode[] values) { + public MaterializeObjectNode(ResolvedJavaType type, EscapeField[] fields) { super(StampFactory.exactNonNull(type)); this.type = type; this.fields = fields; - this.values = new NodeInputList<>(this, values); + this.values = new NodeInputList<>(this, fields.length); } public ResolvedJavaType type() { @@ -50,7 +50,7 @@ return fields; } - public NodeInputList<ValueNode> getValues() { + public NodeInputList<ValueNode> values() { return values; } @@ -61,9 +61,9 @@ ResolvedJavaType element = type.componentType(); NewArrayNode newArray; if (element.kind() == Kind.Object) { - newArray = graph.add(new NewObjectArrayNode(element, ConstantNode.forInt(fields.length, graph))); + newArray = graph.add(new NewObjectArrayNode(element, ConstantNode.forInt(fields.length, graph), false)); } else { - newArray = graph.add(new NewPrimitiveArrayNode(element, ConstantNode.forInt(fields.length, graph))); + newArray = graph.add(new NewPrimitiveArrayNode(element, ConstantNode.forInt(fields.length, graph), false)); } this.replaceAtUsages(newArray); graph.addAfterFixed(this, newArray); @@ -77,7 +77,7 @@ graph.removeFixed(this); } else { - NewInstanceNode newInstance = graph.add(new NewInstanceNode(type)); + NewInstanceNode newInstance = graph.add(new NewInstanceNode(type, false)); this.replaceAtUsages(newInstance); graph.addAfterFixed(this, newInstance); @@ -91,4 +91,13 @@ graph.removeFixed(this); } } + + @Override + public ValueNode canonical(CanonicalizerTool tool) { + if (usages().isEmpty()) { + return null; + } else { + return this; + } + } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Sep 11 14:25:40 2012 +0200 @@ -38,6 +38,7 @@ @Input private ValueNode length; private final ResolvedJavaType elementType; + private final boolean fillContents; public static final int MaximumEscapeAnalysisArrayLength = 32; @@ -50,10 +51,15 @@ * Constructs a new NewArrayNode. * @param length the node that produces the length for this allocation */ - protected NewArrayNode(ResolvedJavaType elementType, ValueNode length) { + protected NewArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents) { super(StampFactory.exactNonNull(elementType.arrayOf())); this.length = length; this.elementType = elementType; + this.fillContents = fillContents; + } + + public boolean fillContents() { + return fillContents; } /** @@ -105,6 +111,7 @@ @Override public EscapeField[] fields(Node node) { NewArrayNode x = (NewArrayNode) node; + assert x.elementType.arrayOf().isArrayClass(); int length = x.dimension(0).asConstant().asInt(); EscapeField[] fields = new EscapeField[length]; for (int i = 0; i < length; i++) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Sep 11 14:25:40 2012 +0200 @@ -38,14 +38,16 @@ public final class NewInstanceNode extends FixedWithNextNode implements EscapeAnalyzable, Lowerable, LIRLowerable, Node.IterableNodeType { private final ResolvedJavaType instanceClass; + private final boolean fillContents; /** * Constructs a NewInstanceNode. * @param type the class being allocated */ - public NewInstanceNode(ResolvedJavaType type) { + public NewInstanceNode(ResolvedJavaType type, boolean fillContents) { super(StampFactory.exactNonNull(type)); this.instanceClass = type; + this.fillContents = fillContents; } /** @@ -56,6 +58,10 @@ return instanceClass; } + public boolean fillContents() { + return fillContents; + } + @Override public void lower(LoweringTool tool) { tool.getRuntime().lower(this, tool); @@ -97,6 +103,7 @@ @Override public EscapeField[] fields(Node node) { NewInstanceNode x = (NewInstanceNode) node; + assert !x.instanceClass().isArrayClass(); List<EscapeField> escapeFields = new ArrayList<>(); fillEscapeFields(x.instanceClass(), escapeFields); return escapeFields.toArray(new EscapeField[escapeFields.size()]);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewObjectArrayNode.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewObjectArrayNode.java Tue Sep 11 14:25:40 2012 +0200 @@ -38,8 +38,8 @@ * @param elementClass the class of elements in this array * @param length the node producing the length of the array */ - public NewObjectArrayNode(ResolvedJavaType elementClass, ValueNode length) { - super(elementClass, length); + public NewObjectArrayNode(ResolvedJavaType elementClass, ValueNode length, boolean fillContents) { + super(elementClass, length, fillContents); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewPrimitiveArrayNode.java Tue Sep 11 14:09:46 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewPrimitiveArrayNode.java Tue Sep 11 14:25:40 2012 +0200 @@ -31,10 +31,10 @@ * The {@code NewPrimitiveArrayNode} class definition. */ @NodeInfo(nameTemplate = "NewArray {p#elementType}") -public final class NewPrimitiveArrayNode extends NewArrayNode implements LIRLowerable { +public final class NewPrimitiveArrayNode extends NewArrayNode implements LIRLowerable, Node.IterableNodeType { - public NewPrimitiveArrayNode(ResolvedJavaType elementType, ValueNode length) { - super(elementType, length); + public NewPrimitiveArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents) { + super(elementType, length, fillContents); } @Override