# HG changeset patch # User Josef Eisl # Date 1436962812 -7200 # Node ID 6fd6cf960c728967fb59a3adf9d9d792cbc80f7a # Parent 24db9b5a9f042d0a8bd6c3b7c8341120b65f5105 Make HotSpotLockStack an LIRInstruction. diff -r 24db9b5a9f04 -r 6fd6cf960c72 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java --- 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())); diff -r 24db9b5a9f04 -r 6fd6cf960c72 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java --- 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 diff -r 24db9b5a9f04 -r 6fd6cf960c72 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java --- 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 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 + } }