Mercurial > hg > truffle
changeset 16596:9e2317b1092b
SL: Merging changes to root
author | David Piorkowski <david.piorkowski@oracle.com> |
---|---|
date | Fri, 25 Jul 2014 08:35:34 -0700 |
parents | 618d92152d3c (current diff) c4104e5ef7ab (diff) |
children | fcb186b03c8b |
files | |
diffstat | 2 files changed, 8 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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)); }
--- 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<Node, Node> duplicates, FrameState stateAtExceptionEdge) { + protected static void processFrameStates(Invoke invoke, StructuredGraph inlineGraph, Map<Node, Node> 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);