# HG changeset patch # User Christos Kotselidis # Date 1374430315 -7200 # Node ID 4c6df71db9e7549d87e459c42726d5e942c1a704 # Parent 761002c5572884f7de097eeec2f833e34b026235# Parent da9d33c7b6ded79630078340d4e2dc3f94afb884 Merge diff -r 761002c55728 -r 4c6df71db9e7 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 Sun Jul 21 20:11:12 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Sun Jul 21 20:11:55 2013 +0200 @@ -107,6 +107,7 @@ } Assumptions tmpAssumptions = new Assumptions(false); + optimizeGraph(newGraph, tmpAssumptions); HighTierContext context = new HighTierContext(metaAccessProvider, tmpAssumptions, replacements); @@ -153,9 +154,11 @@ CanonicalizerPhase.Instance canonicalizerPhase = new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, !AOTCompilation.getValue(), null, null); + EarlyReadEliminationPhase earlyRead = new EarlyReadEliminationPhase(new CanonicalizerPhase(true)); + HighTierContext context = new HighTierContext(metaAccessProvider, assumptions, replacements); Integer maxNodes = TruffleCompilerOptions.TruffleOperationCacheMaxNodes.getValue(); - contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase); + contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase, earlyRead, context); while (newGraph.getNodeCount() <= maxNodes) { @@ -168,7 +171,7 @@ break; } - contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase); + contractGraph(newGraph, eliminate, convertDeoptimizeToGuardPhase, canonicalizerPhase, earlyRead, context); } if (newGraph.getNodeCount() > maxNodes && (TruffleCompilerOptions.TraceTruffleCacheDetails.getValue() || TruffleCompilerOptions.TraceTrufflePerformanceWarnings.getValue())) { @@ -177,10 +180,13 @@ } private static void contractGraph(StructuredGraph newGraph, ConditionalEliminationPhase eliminate, ConvertDeoptimizeToGuardPhase convertDeoptimizeToGuardPhase, - CanonicalizerPhase.Instance canonicalizerPhase) { + CanonicalizerPhase.Instance canonicalizerPhase, EarlyReadEliminationPhase earlyRead, HighTierContext context) { // Canonicalize / constant propagate. canonicalizerPhase.apply(newGraph); + // Early read eliminiation + earlyRead.apply(newGraph, context); + // Convert deopt to guards. convertDeoptimizeToGuardPhase.apply(newGraph); diff -r 761002c55728 -r 4c6df71db9e7 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 Sun Jul 21 20:11:12 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Sun Jul 21 20:11:55 2013 +0200 @@ -54,7 +54,7 @@ @Option(help = "") public static final OptionValue TruffleConstantUnrollLimit = new OptionValue<>(32); @Option(help = "") - public static final OptionValue TruffleOperationCacheMaxNodes = new OptionValue<>(200); + public static final OptionValue TruffleOperationCacheMaxNodes = new OptionValue<>(350); @Option(help = "") public static final OptionValue TruffleGraphMaxNodes = new OptionValue<>(12000); @Option(help = "") diff -r 761002c55728 -r 4c6df71db9e7 graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Specialization.java --- a/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Specialization.java Sun Jul 21 20:11:12 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Specialization.java Sun Jul 21 20:11:55 2013 +0200 @@ -24,7 +24,7 @@ import java.lang.annotation.*; -@Retention(RetentionPolicy.CLASS) +@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface Specialization {