Mercurial > hg > graal-compiler
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 + } }