src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java

Print this page

        

*** 22,38 **** */ package org.graalvm.compiler.core.gen; 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; import org.graalvm.compiler.lir.Variable; import org.graalvm.compiler.nodes.ConstantNode; --- 22,36 ----
*** 42,54 **** --- 40,55 ---- import org.graalvm.compiler.nodes.util.GraphUtil; import org.graalvm.compiler.nodes.virtual.EscapeObjectState; 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; import jdk.vm.ci.meta.ResolvedJavaField; import jdk.vm.ci.meta.ResolvedJavaType;
*** 66,77 **** } 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 Queue<VirtualObjectNode> pendingVirtualObjects = new ArrayDeque<>(); public LIRFrameState build(FrameState topState, LabelRef exceptionEdge) { assert virtualObjects.size() == 0; --- 67,78 ---- } private static final JavaValue[] NO_JAVA_VALUES = {}; private static final JavaKind[] NO_JAVA_KINDS = {}; ! 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<>(); public LIRFrameState build(FrameState topState, LabelRef exceptionEdge) { assert virtualObjects.size() == 0;
*** 116,127 **** if (values.length > 0) { VirtualObjectState currentField = (VirtualObjectState) objectStates.get(vobjNode); 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); values[pos] = toJavaValue(value); slotKinds[pos] = toSlotKind(value); pos++; } else { assert currentField.values().get(i - 1).getStackKind() == JavaKind.Double || currentField.values().get(i - 1).getStackKind() == JavaKind.Long : vobjNode + " " + i + " " + --- 117,133 ---- if (values.length > 0) { VirtualObjectState currentField = (VirtualObjectState) objectStates.get(vobjNode); assert currentField != null; int pos = 0; for (int i = 0; i < entryCount; 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++; } else { assert currentField.values().get(i - 1).getStackKind() == JavaKind.Double || currentField.values().get(i - 1).getStackKind() == JavaKind.Long : vobjNode + " " + i + " " +
*** 135,145 **** } assert checkValues(vobjValue.getType(), values, slotKinds); vobjValue.setValues(values, slotKinds); } ! virtualObjectsArray = virtualObjects.values().toArray(new VirtualObject[virtualObjects.size()]); virtualObjects.clear(); } objectStates.clear(); return newLIRFrameState(exceptionEdge, frame, virtualObjectsArray); --- 141,155 ---- } assert checkValues(vobjValue.getType(), values, slotKinds); vobjValue.setValues(values, slotKinds); } ! virtualObjectsArray = new VirtualObject[virtualObjects.size()]; ! int index = 0; ! for (VirtualObject value : virtualObjects.getValues()) { ! virtualObjectsArray[index++] = value; ! } virtualObjects.clear(); } objectStates.clear(); return newLIRFrameState(exceptionEdge, frame, virtualObjectsArray);
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/DebugInfoBuilder.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File