hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java
changeset 46344 694c102fd8ed
parent 43972 1ade39b8381b
child 46640 70bdce04c59b
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java	Mon Dec 12 16:16:27 2016 +0300
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java	Wed Mar 22 13:42:45 2017 -0700
@@ -24,13 +24,11 @@
 
 import java.util.ArrayDeque;
 import java.util.Arrays;
-import java.util.Map;
 import java.util.Queue;
 
 import org.graalvm.compiler.debug.Debug;
 import org.graalvm.compiler.debug.DebugCounter;
 import org.graalvm.compiler.debug.GraalError;
-import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.lir.ConstantValue;
 import org.graalvm.compiler.lir.LIRFrameState;
 import org.graalvm.compiler.lir.LabelRef;
@@ -44,9 +42,12 @@
 import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
 import org.graalvm.compiler.virtual.nodes.MaterializedObjectState;
 import org.graalvm.compiler.virtual.nodes.VirtualObjectState;
+import org.graalvm.util.Equivalence;
+import org.graalvm.util.EconomicMap;
 
 import jdk.vm.ci.code.BytecodeFrame;
 import jdk.vm.ci.code.VirtualObject;
+import jdk.vm.ci.meta.JavaConstant;
 import jdk.vm.ci.meta.JavaKind;
 import jdk.vm.ci.meta.JavaType;
 import jdk.vm.ci.meta.JavaValue;
@@ -68,8 +69,8 @@
     private static final JavaValue[] NO_JAVA_VALUES = {};
     private static final JavaKind[] NO_JAVA_KINDS = {};
 
-    protected final Map<VirtualObjectNode, VirtualObject> virtualObjects = Node.newMap();
-    protected final Map<VirtualObjectNode, EscapeObjectState> objectStates = Node.newIdentityMap();
+    protected final EconomicMap<VirtualObjectNode, VirtualObject> virtualObjects = EconomicMap.create(Equivalence.IDENTITY);
+    protected final EconomicMap<VirtualObjectNode, EscapeObjectState> objectStates = EconomicMap.create(Equivalence.IDENTITY);
 
     protected final Queue<VirtualObjectNode> pendingVirtualObjects = new ArrayDeque<>();
 
@@ -118,8 +119,13 @@
                     assert currentField != null;
                     int pos = 0;
                     for (int i = 0; i < entryCount; i++) {
-                        if (!currentField.values().get(i).isConstant() || currentField.values().get(i).asJavaConstant().getJavaKind() != JavaKind.Illegal) {
-                            ValueNode value = currentField.values().get(i);
+                        ValueNode value = currentField.values().get(i);
+                        if (value == null) {
+                            JavaKind entryKind = vobjNode.entryKind(i);
+                            values[pos] = JavaConstant.defaultForKind(entryKind.getStackKind());
+                            slotKinds[pos] = entryKind.getStackKind();
+                            pos++;
+                        } else if (!value.isConstant() || value.asJavaConstant().getJavaKind() != JavaKind.Illegal) {
                             values[pos] = toJavaValue(value);
                             slotKinds[pos] = toSlotKind(value);
                             pos++;
@@ -137,7 +143,11 @@
                 vobjValue.setValues(values, slotKinds);
             }
 
-            virtualObjectsArray = virtualObjects.values().toArray(new VirtualObject[virtualObjects.size()]);
+            virtualObjectsArray = new VirtualObject[virtualObjects.size()];
+            int index = 0;
+            for (VirtualObject value : virtualObjects.getValues()) {
+                virtualObjectsArray[index++] = value;
+            }
             virtualObjects.clear();
         }
         objectStates.clear();