changeset 18934:f7c940b59147

Avoid double copy of monitorIds list.
author Roland Schatz <roland.schatz@oracle.com>
date Fri, 23 Jan 2015 14:32:11 +0100
parents 76553fa0f02b
children 07f2a49f0bfb
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java
diffstat 3 files changed, 13 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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);
 
--- 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
--- 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<EscapeObjectState> virtualObjectMappings) {
+                    List<MonitorIdNode> monitorIds, List<EscapeObjectState> 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<ValueNode> values, int localsSize, int stackSize, boolean rethrowException, boolean duringCall,
-                    MonitorIdNode[] monitorIds, List<EscapeObjectState> virtualObjectMappings) {
+                    List<MonitorIdNode> monitorIds, List<EscapeObjectState> 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<MonitorIdNode> monitorIds,
                     boolean rethrowException, boolean duringCall) {
         this(outerFrameState, method, bci, locals.length, stackSize, locks.length, rethrowException, duringCall, monitorIds, Collections.<EscapeObjectState> emptyList());
         createValues(locals, stack, locks);
@@ -136,6 +136,10 @@
         return values;
     }
 
+    public NodeInputList<MonitorIdNode> 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));
     }
 
     /**