# HG changeset patch # User Roland Schatz # Date 1422019931 -3600 # Node ID f7c940b59147488800e21f4060e3b3ee17f2dd65 # Parent 76553fa0f02b131154077b9876e97defd5f08684 Avoid double copy of monitorIds list. diff -r 76553fa0f02b -r f7c940b59147 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Fri Jan 23 13:11:28 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Fri Jan 23 14:32:11 2015 +0100 @@ -511,8 +511,7 @@ ConstantNode errMsg = ConstantNode.forConstant(tool.getConstantReflection().forString(msg), providers.getMetaAccess(), graph); callTarget = graph.add(new MethodCallTargetNode(InvokeKind.Static, checkCounter.getMethod(), new ValueNode[]{errMsg}, returnType)); invoke = graph.add(new InvokeNode(callTarget, 0)); - FrameState stateAfter = new FrameState(null, graph.method(), BytecodeFrame.AFTER_BCI, new ValueNode[0], new ValueNode[0], 0, new ValueNode[0], new MonitorIdNode[0], false, - false); + FrameState stateAfter = new FrameState(null, graph.method(), BytecodeFrame.AFTER_BCI, new ValueNode[0], new ValueNode[0], 0, new ValueNode[0], null, false, false); invoke.setStateAfter(graph.add(stateAfter)); graph.addBeforeFixed(ret, invoke); diff -r 76553fa0f02b -r f7c940b59147 graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java Fri Jan 23 13:11:28 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java Fri Jan 23 14:32:11 2015 +0100 @@ -159,7 +159,7 @@ if (outerFrameStateSupplier != null) { outerFrameState = outerFrameStateSupplier.get(); } - return graph.add(new FrameState(outerFrameState, method, bci, locals, stack, stackSize, lockedObjects, monitorIds, rethrowException, false)); + return graph.add(new FrameState(outerFrameState, method, bci, locals, stack, stackSize, lockedObjects, Arrays.asList(monitorIds), rethrowException, false)); } @Override diff -r 76553fa0f02b -r f7c940b59147 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Fri Jan 23 13:11:28 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Fri Jan 23 14:32:11 2015 +0100 @@ -75,7 +75,7 @@ protected final ResolvedJavaMethod method; public FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, int localsSize, int stackSize, int lockSize, boolean rethrowException, boolean duringCall, - MonitorIdNode[] monitorIds, List virtualObjectMappings) { + List monitorIds, List virtualObjectMappings) { assert stackSize >= 0; this.outerFrameState = outerFrameState; this.method = method; @@ -84,7 +84,7 @@ this.stackSize = stackSize; this.values = new NodeInputList<>(this, localsSize + stackSize + lockSize); - if (monitorIds != null && monitorIds.length > 0) { + if (monitorIds != null && monitorIds.size() > 0) { this.monitorIds = new NodeInputList<>(this, monitorIds); } @@ -100,7 +100,7 @@ } public FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, List values, int localsSize, int stackSize, boolean rethrowException, boolean duringCall, - MonitorIdNode[] monitorIds, List virtualObjectMappings) { + List monitorIds, List virtualObjectMappings) { this(outerFrameState, method, bci, localsSize, stackSize, values.size() - localsSize - stackSize, rethrowException, duringCall, monitorIds, virtualObjectMappings); for (int i = 0; i < values.size(); ++i) { this.values.initialize(i, values.get(i)); @@ -113,7 +113,7 @@ bci == BytecodeFrame.INVALID_FRAMESTATE_BCI; } - public FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, ValueNode[] locals, ValueNode[] stack, int stackSize, ValueNode[] locks, MonitorIdNode[] monitorIds, + public FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, ValueNode[] locals, ValueNode[] stack, int stackSize, ValueNode[] locks, List monitorIds, boolean rethrowException, boolean duringCall) { this(outerFrameState, method, bci, locals.length, stackSize, locks.length, rethrowException, duringCall, monitorIds, Collections. emptyList()); createValues(locals, stack, locks); @@ -136,6 +136,10 @@ return values; } + public NodeInputList monitorIds() { + return monitorIds; + } + public FrameState outerFrameState() { return outerFrameState; } @@ -186,7 +190,7 @@ * Gets a copy of this frame state. */ public FrameState duplicate(int newBci) { - return graph().add(new FrameState(outerFrameState(), method, newBci, values, localsSize, stackSize, rethrowException, duringCall, duplicateMonitorIds(), virtualObjectMappings)); + return graph().add(new FrameState(outerFrameState(), method, newBci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, virtualObjectMappings)); } /** @@ -213,7 +217,7 @@ newVirtualMappings.add(state.duplicateWithVirtualState()); } } - return graph().add(new FrameState(newOuterFrameState, method, bci, values, localsSize, stackSize, rethrowException, duringCall, duplicateMonitorIds(), newVirtualMappings)); + return graph().add(new FrameState(newOuterFrameState, method, bci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, newVirtualMappings)); } /** @@ -264,15 +268,7 @@ copy.addAll(values.subList(localsSize + stackSize, values.size())); assert checkStackDepth(bci, stackSize, duringCall, newBci, newStackSize, newDuringCall); - return graph().add(new FrameState(outerFrameState(), method, newBci, copy, localsSize, newStackSize, newRethrowException, newDuringCall, duplicateMonitorIds(), virtualObjectMappings)); - } - - private MonitorIdNode[] duplicateMonitorIds() { - if (monitorIds == null) { - return null; - } else { - return monitorIds.toArray(new MonitorIdNode[monitorIds.size()]); - } + return graph().add(new FrameState(outerFrameState(), method, newBci, copy, localsSize, newStackSize, newRethrowException, newDuringCall, monitorIds, virtualObjectMappings)); } /**