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;
     }
 }