changeset 22312:6fd6cf960c72

Make HotSpotLockStack an LIRInstruction.
author Josef Eisl <josef.eisl@jku.at>
date Wed, 15 Jul 2015 14:20:12 +0200
parents 24db9b5a9f04
children baa6dc00fd5c
files graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java
diffstat 3 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java	Fri Jul 03 10:35:09 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java	Wed Jul 15 14:20:12 2015 +0200
@@ -89,6 +89,8 @@
 
         getGen().emitSaveRbp();
 
+        getGen().append(((HotSpotDebugInfoBuilder) getDebugInfoBuilder()).lockStack());
+
         for (ParameterNode param : graph.getNodes(ParameterNode.TYPE)) {
             Value paramValue = params[param.index()];
             assert paramValue.getLIRKind().equals(getLIRGeneratorTool().getLIRKind(param.stamp()));
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java	Fri Jul 03 10:35:09 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java	Wed Jul 15 14:20:12 2015 +0200
@@ -137,6 +137,7 @@
         super.emitPrologue(graph);
         AllocatableValue var = getGen().getSafepointAddressValue();
         append(new SPARCHotSpotSafepointOp.SPARCLoadSafepointPollAddress(var, getGen().config));
+        getGen().append(((HotSpotDebugInfoBuilder) getDebugInfoBuilder()).lockStack());
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java	Fri Jul 03 10:35:09 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java	Wed Jul 15 14:20:12 2015 +0200
@@ -22,33 +22,41 @@
  */
 package com.oracle.graal.hotspot;
 
+import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*;
+
 import java.util.*;
 
 import jdk.internal.jvmci.code.*;
 import jdk.internal.jvmci.meta.*;
 
+import com.oracle.graal.lir.*;
+import com.oracle.graal.lir.asm.*;
 import com.oracle.graal.lir.framemap.*;
 
 /**
  * Manages allocation and re-use of lock slots in a scoped manner. The slots are used in HotSpot's
  * lightweight locking mechanism to store the mark word of an object being locked.
  */
-public class HotSpotLockStack {
+public class HotSpotLockStack extends LIRInstruction {
+    public static final LIRInstructionClass<HotSpotLockStack> TYPE = LIRInstructionClass.create(HotSpotLockStack.class);
+    private static final StackSlotValue[] EMPTY = new StackSlotValue[0];
 
-    private StackSlotValue[] locks;
+    @Def({STACK}) private StackSlotValue[] locks;
     private final FrameMapBuilder frameMapBuilder;
     private final LIRKind slotKind;
 
     public HotSpotLockStack(FrameMapBuilder frameMapBuilder, LIRKind slotKind) {
+        super(TYPE);
         this.frameMapBuilder = frameMapBuilder;
         this.slotKind = slotKind;
+        this.locks = EMPTY;
     }
 
     /**
      * Gets a stack slot for a lock at a given lock nesting depth, allocating it first if necessary.
      */
     public StackSlotValue makeLockSlot(int lockDepth) {
-        if (locks == null) {
+        if (locks == EMPTY) {
             locks = new StackSlotValue[lockDepth + 1];
         } else if (locks.length < lockDepth + 1) {
             locks = Arrays.copyOf(locks, lockDepth + 1);
@@ -58,4 +66,9 @@
         }
         return locks[lockDepth];
     }
+
+    @Override
+    public void emitCode(CompilationResultBuilder crb) {
+        // do nothing
+    }
 }