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