# HG changeset patch # User Lukas Stadler # Date 1365062689 -7200 # Node ID 00a548fdf821560249873f92544eeeea3e77d587 # Parent d8f28e2e2b497e784f441bcc8a9e8a1711d115e5# Parent c1c0ca020d989d97c796db3d7fe0d3d749d5dda2 Merge diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Thu Apr 04 10:04:49 2013 +0200 @@ -202,7 +202,7 @@ Assumptions assumptions = new Assumptions(false); new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph); new DeadCodeEliminationPhase().apply(graph); - new PartialEscapeAnalysisPhase(runtime(), assumptions, iterativeEscapeAnalysis).apply(graph); + new PartialEscapeAnalysisPhase(runtime(), assumptions, iterativeEscapeAnalysis, false).apply(graph); Assert.assertEquals(1, graph.getNodes(ReturnNode.class).count()); ReturnNode returnNode = graph.getNodes(ReturnNode.class).first(); if (expectedConstantResult != null) { diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/IterativeInliningTest.java Thu Apr 04 10:04:49 2013 +0200 @@ -101,7 +101,7 @@ private void processMethod(final String snippet) { graph = parse(snippet); new ComputeProbabilityPhase().apply(graph); - GraalOptions.PEAReadCache = true; - new IterativeInliningPhase(runtime(), new Assumptions(false), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph); + GraalOptions.OptEarlyReadElimination = true; + new IterativeInliningPhase(runtime(), new Assumptions(false), null, getDefaultPhasePlan(), OptimisticOptimizations.ALL, false).apply(graph); } } diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Thu Apr 04 10:04:49 2013 +0200 @@ -204,7 +204,6 @@ new ComputeProbabilityPhase().apply(graph); Assumptions assumptions = new Assumptions(false); new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph); - GraalOptions.PEAReadCache = true; - new PartialEscapeAnalysisPhase(runtime(), assumptions, false).apply(graph); + new PartialEscapeAnalysisPhase(runtime(), assumptions, false, true).apply(graph); } } diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Thu Apr 04 10:04:49 2013 +0200 @@ -153,7 +153,7 @@ new InliningPhase(runtime(), null, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph); new DeadCodeEliminationPhase().apply(graph); new CanonicalizerPhase(runtime(), assumptions).apply(graph); - new PartialEscapeAnalysisPhase(runtime(), assumptions, false).apply(graph); + new PartialEscapeAnalysisPhase(runtime(), assumptions, false, false).apply(graph); new CullFrameStatesPhase().apply(graph); new DeadCodeEliminationPhase().apply(graph); diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Thu Apr 04 10:04:49 2013 +0200 @@ -122,7 +122,7 @@ if (GraalOptions.Inline && !plan.isPhaseDisabled(InliningPhase.class)) { if (GraalOptions.IterativeInlining) { - new IterativeInliningPhase(runtime, assumptions, cache, plan, optimisticOpts).apply(graph); + new IterativeInliningPhase(runtime, assumptions, cache, plan, optimisticOpts, GraalOptions.OptEarlyReadElimination).apply(graph); } else { new InliningPhase(runtime, null, assumptions, cache, plan, optimisticOpts).apply(graph); new DeadCodeEliminationPhase().apply(graph); @@ -153,7 +153,7 @@ } if (GraalOptions.PartialEscapeAnalysis && !plan.isPhaseDisabled(PartialEscapeAnalysisPhase.class)) { - new PartialEscapeAnalysisPhase(runtime, assumptions, true).apply(graph); + new PartialEscapeAnalysisPhase(runtime, assumptions, true, GraalOptions.OptEarlyReadElimination).apply(graph); } if (GraalOptions.OptConvertDeoptsToGuards) { diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Thu Apr 04 10:04:49 2013 +0200 @@ -68,7 +68,6 @@ public static int EscapeAnalysisIterations = 2; public static String EscapeAnalyzeOnly = null; public static int MaximumEscapeAnalysisArrayLength = 32; - public static boolean PEAReadCache = ____; public static boolean PEAInliningHints = ____; public static double TailDuplicationProbability = 0.5; @@ -191,6 +190,7 @@ public static boolean OptAssumptions = true; public static boolean OptConvertDeoptsToGuards = true; public static boolean OptReadElimination = true; + public static boolean OptEarlyReadElimination = true; public static boolean OptCanonicalizer = true; public static boolean OptScheduleOutOfLoops = true; public static boolean OptEliminateGuards = true; diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/IterativeInliningPhase.java Thu Apr 04 10:04:49 2013 +0200 @@ -40,13 +40,15 @@ private final Assumptions assumptions; private final GraphCache cache; private final OptimisticOptimizations optimisticOpts; + private final boolean readElimination; - public IterativeInliningPhase(GraalCodeCacheProvider runtime, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts) { + public IterativeInliningPhase(GraalCodeCacheProvider runtime, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts, boolean readElimination) { this.runtime = runtime; this.assumptions = assumptions; this.cache = cache; this.plan = plan; this.optimisticOpts = optimisticOpts; + this.readElimination = readElimination; } public static final void trace(String format, Object... obj) { @@ -69,7 +71,7 @@ @Override public Boolean call() { boolean progress = false; - PartialEscapeAnalysisPhase ea = new PartialEscapeAnalysisPhase(runtime, assumptions, false); + PartialEscapeAnalysisPhase ea = new PartialEscapeAnalysisPhase(runtime, assumptions, false, readElimination); ea.apply(graph); progress |= ea.hasChanged(); diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Thu Apr 04 10:04:49 2013 +0200 @@ -47,13 +47,15 @@ private final Assumptions assumptions; private CustomCanonicalizer customCanonicalizer; private final boolean iterative; + private final boolean readElimination; private boolean changed; - public PartialEscapeAnalysisPhase(MetaAccessProvider runtime, Assumptions assumptions, boolean iterative) { + public PartialEscapeAnalysisPhase(MetaAccessProvider runtime, Assumptions assumptions, boolean iterative, boolean readElimination) { this.runtime = runtime; this.assumptions = assumptions; this.iterative = iterative; + this.readElimination = readElimination; } public boolean hasChanged() { @@ -76,7 +78,7 @@ return; } - if (!GraalOptions.PEAReadCache) { + if (!readElimination) { boolean analyzableNodes = false; for (Node node : graph.getNodes()) { if (node instanceof VirtualizableAllocation) { @@ -127,9 +129,11 @@ }); } - for (Node node : graph.getNodes()) { - if (node instanceof LoadFieldNode) { - DynamicCounterNode.addCounterBefore("load non-elim", 1, false, (FixedNode) node); + if (DynamicCounterNode.enabled && readElimination) { + for (Node node : graph.getNodes()) { + if (node instanceof LoadFieldNode) { + DynamicCounterNode.addCounterBefore("load non-elim", 1, false, (FixedNode) node); + } } } } diff -r c1c0ca020d98 -r 00a548fdf821 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Wed Apr 03 16:56:43 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Thu Apr 04 10:04:49 2013 +0200 @@ -110,7 +110,7 @@ trace("%s ", node); deleted = false; } - if (GraalOptions.PEAReadCache) { + if (GraalOptions.OptEarlyReadElimination) { if (!deleted) { if (node instanceof StoreFieldNode) { METRIC_STOREFIELD_RECORDED.increment();