# HG changeset patch # User Andreas Woess # Date 1375739166 -7200 # Node ID dba746f54e6aea688f287a633c7ef808ef60cb3e # Parent 13d0d29aa15cf7e1d8088be8e2325bb8bc38da60# Parent 30834675ced603bd6466501c8a7930798b122bf7 Merge diff -r 13d0d29aa15c -r dba746f54e6a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Mon Aug 05 22:37:13 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Mon Aug 05 23:46:06 2013 +0200 @@ -177,7 +177,7 @@ // EA frame and clean up. new VerifyFrameDoesNotEscapePhase().apply(graph, false); - new PartialEscapePhase(false, new CanonicalizerPhase(!AOTCompilation.getValue())).apply(graph, new PhaseContext(metaAccessProvider, assumptions, replacements)); + new PartialEscapePhase(false, new CanonicalizerPhase(!AOTCompilation.getValue())).apply(graph, context); new VerifyNoIntrinsicsLeftPhase().apply(graph, false); for (MaterializeFrameNode materializeNode : graph.getNodes(MaterializeFrameNode.class).snapshot()) { materializeNode.replaceAtUsages(materializeNode.getFrame()); diff -r 13d0d29aa15c -r dba746f54e6a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Mon Aug 05 22:37:13 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Mon Aug 05 23:46:06 2013 +0200 @@ -148,17 +148,15 @@ } private void optimizeGraph(StructuredGraph newGraph, Assumptions assumptions) { - - ConditionalEliminationPhase eliminate = new ConditionalEliminationPhase(metaAccessProvider); + PhaseContext context = new PhaseContext(metaAccessProvider, assumptions, replacements); + ConditionalEliminationPhase conditionalEliminationPhase = new ConditionalEliminationPhase(metaAccessProvider); ConvertDeoptimizeToGuardPhase convertDeoptimizeToGuardPhase = new ConvertDeoptimizeToGuardPhase(); - - CanonicalizerPhase.Instance canonicalizerPhase = new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, !AOTCompilation.getValue(), null, null); + CanonicalizerPhase canonicalizerPhase = new CanonicalizerPhase(!AOTCompilation.getValue()); + EarlyReadEliminationPhase readEliminationPhase = new EarlyReadEliminationPhase(canonicalizerPhase); - EarlyReadEliminationPhase earlyRead = new EarlyReadEliminationPhase(new CanonicalizerPhase(true)); - PhaseContext context = new PhaseContext(metaAccessProvider, assumptions, replacements); - Integer maxNodes = TruffleCompilerOptions.TruffleOperationCacheMaxNodes.getValue(); + int maxNodes = TruffleCompilerOptions.TruffleOperationCacheMaxNodes.getValue(); - contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase, earlyRead, context); + contractGraph(newGraph, conditionalEliminationPhase, convertDeoptimizeToGuardPhase, canonicalizerPhase, readEliminationPhase, context); while (newGraph.getNodeCount() <= maxNodes) { @@ -171,7 +169,7 @@ break; } - contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase, earlyRead, context); + contractGraph(newGraph, conditionalEliminationPhase, convertDeoptimizeToGuardPhase, canonicalizerPhase, readEliminationPhase, context); } if (newGraph.getNodeCount() > maxNodes && (TruffleCompilerOptions.TraceTruffleCacheDetails.getValue() || TruffleCompilerOptions.TraceTrufflePerformanceWarnings.getValue())) { @@ -179,19 +177,19 @@ } } - private static void contractGraph(StructuredGraph newGraph, ConditionalEliminationPhase eliminate, ConvertDeoptimizeToGuardPhase convertDeoptimizeToGuardPhase, - CanonicalizerPhase.Instance canonicalizerPhase, EarlyReadEliminationPhase earlyRead, PhaseContext context) { + private static void contractGraph(StructuredGraph newGraph, ConditionalEliminationPhase conditionalEliminationPhase, ConvertDeoptimizeToGuardPhase convertDeoptimizeToGuardPhase, + CanonicalizerPhase canonicalizerPhase, EarlyReadEliminationPhase readEliminationPhase, PhaseContext context) { // Canonicalize / constant propagate. - canonicalizerPhase.apply(newGraph); + canonicalizerPhase.apply(newGraph, context); // Early read eliminiation - earlyRead.apply(newGraph, context); + readEliminationPhase.apply(newGraph, context); // Convert deopt to guards. convertDeoptimizeToGuardPhase.apply(newGraph); // Conditional elimination. - eliminate.apply(newGraph); + conditionalEliminationPhase.apply(newGraph); } private void expandGraph(StructuredGraph newGraph, int maxNodes) { @@ -269,6 +267,9 @@ return inlineGraph; } }); + if (!methodCallTargetNode.isStatic() && methodCallTargetNode.receiver().objectStamp().alwaysNull()) { + return invoke.next(); + } FixedNode fixedNode = (FixedNode) invoke.predecessor(); InliningUtil.inline(invoke, inlinedGraph, true); return fixedNode; diff -r 13d0d29aa15c -r dba746f54e6a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Mon Aug 05 22:37:13 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Mon Aug 05 23:46:06 2013 +0200 @@ -36,7 +36,6 @@ import com.oracle.graal.compiler.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; -import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.java.*; import com.oracle.graal.nodes.*; @@ -140,8 +139,6 @@ } }); - final Graph graphCopy = graph.copy(); - final CompilationResult result = Debug.scope("TruffleGraal", new Callable() { @Override @@ -172,7 +169,7 @@ @Override public InstalledCode call() throws Exception { - InstalledCode installedCode = runtime.addMethod(graph.method(), result, graphCopy); + InstalledCode installedCode = runtime.addMethod(graph.method(), result); if (installedCode != null) { Debug.dump(new Object[]{result, installedCode}, "After code installation"); } diff -r 13d0d29aa15c -r dba746f54e6a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Mon Aug 05 22:37:13 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Mon Aug 05 23:46:06 2013 +0200 @@ -58,7 +58,7 @@ @Option(help = "") public static final OptionValue TruffleOperationCacheMaxNodes = new OptionValue<>(350); @Option(help = "") - public static final OptionValue TruffleGraphMaxNodes = new OptionValue<>(15000); + public static final OptionValue TruffleGraphMaxNodes = new OptionValue<>(20000); @Option(help = "") public static final OptionValue TruffleInliningMaxRecursiveDepth = new OptionValue<>(2); @Option(help = "") diff -r 13d0d29aa15c -r dba746f54e6a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java Mon Aug 05 22:37:13 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java Mon Aug 05 23:46:06 2013 +0200 @@ -22,13 +22,10 @@ */ package com.oracle.graal.truffle.nodes; -import sun.misc.*; - import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.Node.IterableNodeType; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -81,15 +78,13 @@ LoadFieldNode loadFieldNode = graph().add(new LoadFieldNode(getFrame(), field)); structuredGraph.addBeforeFixed(this, loadFieldNode); FixedWithNextNode storeNode; + ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); if (!getSlotKind().isPrimitive()) { - ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Object, value)); } else if (getSlotKind() == Kind.Byte) { - ValueNode slotIndex = getSlotOffset(1, tool.getRuntime()); storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Byte, value)); } else { - ValueNode slotOffset = getSlotOffset(Unsafe.ARRAY_LONG_INDEX_SCALE, tool.getRuntime()); - storeNode = graph().add(new UnsafeStoreNode(loadFieldNode, Unsafe.ARRAY_LONG_BASE_OFFSET, slotOffset, value, getSlotKind())); + storeNode = graph().add(new StoreIndexedNode(loadFieldNode, slotIndex, Kind.Long, value)); } structuredGraph.replaceFixedWithFixed(this, storeNode); }