changeset 22418:d003c4c1782b

do not use the (possibly uninitialized) InvokeNode.stateAfter to fill BytecodePosition in PEGraphDecoder
author Lukas Stadler <lukas.stadler@oracle.com>
date Mon, 10 Aug 2015 15:57:05 +0200
parents a372c8271ea4
children 0074919ff69c
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/PEGraphDecoder.java
diffstat 2 files changed, 13 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Mon Aug 10 15:57:05 2015 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Mon Aug 10 15:57:05 2015 +0200
@@ -31,6 +31,7 @@
 
 import jdk.internal.jvmci.code.*;
 import jdk.internal.jvmci.common.*;
+
 import com.oracle.graal.debug.*;
 import com.oracle.graal.debug.Debug.Scope;
 
@@ -417,24 +418,20 @@
         if (inlineGraph.getNodes(SimpleInfopointNode.TYPE).isEmpty()) {
             return;
         }
-        BytecodePosition pos = null;
+        BytecodePosition caller = null;
         for (SimpleInfopointNode original : inlineGraph.getNodes(SimpleInfopointNode.TYPE)) {
+            if (caller == null) {
+                assert invoke.stateAfter() != null;
+                caller = new BytecodePosition(FrameState.toBytecodePosition(invoke.stateAfter().outerFrameState()), invoke.stateAfter().method(), invoke.bci());
+            }
             SimpleInfopointNode duplicate = (SimpleInfopointNode) duplicates.get(original);
-            pos = processSimpleInfopoint(invoke, duplicate, pos);
+            addSimpleInfopointCaller(duplicate, caller);
         }
     }
 
-    public static BytecodePosition processSimpleInfopoint(Invoke invoke, SimpleInfopointNode infopointNode, BytecodePosition incomingPos) {
-        BytecodePosition pos = processBytecodePosition(invoke, incomingPos);
-        infopointNode.addCaller(pos);
+    public static void addSimpleInfopointCaller(SimpleInfopointNode infopointNode, BytecodePosition caller) {
+        infopointNode.addCaller(caller);
         assert infopointNode.verify();
-        return pos;
-    }
-
-    public static BytecodePosition processBytecodePosition(Invoke invoke, BytecodePosition incomingPos) {
-        assert invoke.stateAfter() != null;
-        assert incomingPos == null || incomingPos.equals(InliningUtil.processBytecodePosition(invoke, null)) : incomingPos + " " + InliningUtil.processBytecodePosition(invoke, null);
-        return incomingPos != null ? incomingPos : new BytecodePosition(FrameState.toBytecodePosition(invoke.stateAfter().outerFrameState()), invoke.stateAfter().method(), invoke.bci());
     }
 
     public static void processMonitorId(FrameState stateAfter, MonitorIdNode monitorIdNode) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/PEGraphDecoder.java	Mon Aug 10 15:57:05 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/PEGraphDecoder.java	Mon Aug 10 15:57:05 2015 +0200
@@ -28,7 +28,9 @@
 import java.util.*;
 
 import jdk.internal.jvmci.code.*;
+
 import com.oracle.graal.debug.*;
+
 import jdk.internal.jvmci.meta.*;
 import jdk.internal.jvmci.options.*;
 
@@ -110,7 +112,7 @@
             if (bytecodePosition == null) {
                 ensureOuterStateDecoded(this);
                 ensureExceptionStateDecoded(this);
-                bytecodePosition = InliningUtil.processBytecodePosition(invokeData.invoke, null);
+                bytecodePosition = new BytecodePosition(FrameState.toBytecodePosition(outerState), method, invokeData.invoke.bci());
             }
             return bytecodePosition;
         }
@@ -582,7 +584,7 @@
     protected void handleFixedNode(MethodScope s, LoopScope loopScope, int nodeOrderId, FixedNode node) {
         PEMethodScope methodScope = (PEMethodScope) s;
         if (node instanceof SimpleInfopointNode && methodScope.isInlinedMethod()) {
-            InliningUtil.processSimpleInfopoint(methodScope.invokeData.invoke, (SimpleInfopointNode) node, methodScope.getBytecodePosition());
+            InliningUtil.addSimpleInfopointCaller((SimpleInfopointNode) node, methodScope.getBytecodePosition());
         }
         super.handleFixedNode(s, loopScope, nodeOrderId, node);
     }