# HG changeset patch # User David Piorkowski # Date 1406302534 25200 # Node ID 9e2317b1092b5e5fb4473ea0fb2a8a298168bdca # Parent 618d92152d3cdff2533b01ef7645f62b3ee1c3a0# Parent c4104e5ef7aba3200f56949476d2b9a09eccd36e SL: Merging changes to root diff -r 618d92152d3c -r 9e2317b1092b graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Thu Jul 24 16:14:44 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Fri Jul 25 08:35:34 2014 -0700 @@ -56,6 +56,11 @@ this.encoding = encoding; } + @Override + public boolean inferStamp() { + return updateStamp(mkStamp(op, getValue().stamp(), encoding)); + } + public static CompressionNode compress(ValueNode input, CompressEncoding encoding) { return input.graph().unique(new CompressionNode(CompressionOp.Compress, input, encoding)); } diff -r 618d92152d3c -r 9e2317b1092b graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Thu Jul 24 16:14:44 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Fri Jul 25 08:35:34 2014 -0700 @@ -316,7 +316,7 @@ processSimpleInfopoints(invoke, inlineGraph, duplicates); if (stateAfter != null) { - processFrameStates(invoke, inlineGraph, duplicates, stateAtExceptionEdge); + processFrameStates(invoke, inlineGraph, duplicates, stateAtExceptionEdge, returnNodes.size() > 1); int callerLockDepth = stateAfter.nestedLockDepth(); if (callerLockDepth != 0) { for (MonitorIdNode original : inlineGraph.getNodes(MonitorIdNode.class)) { @@ -372,7 +372,7 @@ return new BytecodePosition(toBytecodePosition(fs.outerFrameState()), fs.method(), fs.bci); } - protected static void processFrameStates(Invoke invoke, StructuredGraph inlineGraph, Map duplicates, FrameState stateAtExceptionEdge) { + protected static void processFrameStates(Invoke invoke, StructuredGraph inlineGraph, Map duplicates, FrameState stateAtExceptionEdge, boolean alwaysDuplicateStateAfter) { FrameState stateAtReturn = invoke.stateAfter(); FrameState outerFrameState = null; Kind invokeReturnKind = invoke.asNode().getKind(); @@ -385,7 +385,7 @@ * return value (top of stack) */ FrameState stateAfterReturn = stateAtReturn; - if (invokeReturnKind != Kind.Void && frameState.stackSize() > 0 && stateAfterReturn.stackAt(0) != frameState.stackAt(0)) { + if (invokeReturnKind != Kind.Void && (alwaysDuplicateStateAfter || frameState.stackSize() > 0 && stateAfterReturn.stackAt(0) != frameState.stackAt(0))) { stateAfterReturn = stateAtReturn.duplicateModified(invokeReturnKind, frameState.stackAt(0)); } frameState.replaceAndDelete(stateAfterReturn);