Mercurial > hg > truffle
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java @ 7394:94f032472c28
changed PEA interface:
* prepare for more fine-grained object states (thread local, ...)
* merge Virtualizable and EscapeAnalyzable interfaces
* make MaterializeObjectNode an ArrayLengthProvider
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Wed, 16 Jan 2013 15:15:32 +0100 |
parents | 94596bbec6f0 |
children | 5e3d1a68664e |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Wed Jan 16 10:19:09 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Wed Jan 16 15:15:32 2013 +0100 @@ -31,13 +31,12 @@ /** * The {@code NewArrayNode} class is the base of all instructions that allocate arrays. */ -public abstract class NewArrayNode extends FixedWithNextNode implements Lowerable, EscapeAnalyzable, ArrayLengthProvider { +public abstract class NewArrayNode extends FixedWithNextNode implements Lowerable, VirtualizableAllocation, ArrayLengthProvider { @Input private ValueNode length; private final ResolvedJavaType elementType; private final boolean fillContents; - public static final int MaximumEscapeAnalysisArrayLength = 32; private final boolean locked; @Override @@ -105,19 +104,19 @@ } @Override - public ObjectDesc[] getAllocations(long nextVirtualId, MetaAccessProvider metaAccess) { + public void virtualize(VirtualizerTool tool) { if (length().asConstant() != null) { final int constantLength = length().asConstant().asInt(); - if (constantLength >= 0 && constantLength < MaximumEscapeAnalysisArrayLength) { + if (constantLength >= 0 && constantLength < tool.getMaximumEntryCount()) { ValueNode[] state = new ValueNode[constantLength]; ConstantNode defaultForKind = constantLength == 0 ? null : ConstantNode.defaultForKind(elementType().getKind(), graph()); for (int i = 0; i < constantLength; i++) { state[i] = defaultForKind; } - VirtualObjectNode virtualObject = new VirtualArrayNode(nextVirtualId, elementType, constantLength); - return new ObjectDesc[]{new ObjectDesc(virtualObject, state, 0)}; + VirtualObjectNode virtualObject = new VirtualArrayNode(tool.getNextVirtualId(), elementType, constantLength); + tool.createVirtualObject(virtualObject, state, 0); + tool.replaceWithVirtual(virtualObject); } } - return null; } }