Mercurial > hg > graal-compiler
changeset 21755:c052d68e7eac
disable ConvertDeoptimizeToGuardPhase for snippet graphs containing snippet counters to avoid (silent) deletion of counters on a path terminated by a deopt
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 05 Jun 2015 23:05:16 +0200 |
parents | aa5fa1190d6c |
children | 75daca0c6a0f 45083be8a812 |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java |
diffstat | 1 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Fri Jun 05 23:03:41 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Fri Jun 05 23:05:16 2015 +0200 @@ -504,12 +504,19 @@ * Does final processing of a snippet graph. */ protected void finalizeGraph(StructuredGraph graph) { - int sideEffectCount = 0; - assert (sideEffectCount = graph.getNodes().filter(e -> hasSideEffect(e)).count()) >= 0; - new ConvertDeoptimizeToGuardPhase().apply(graph, null); - assert sideEffectCount == graph.getNodes().filter(e -> hasSideEffect(e)).count() : "deleted side effecting node"; + if (!GraalOptions.SnippetCounters.getValue() || graph.getNodes().filter(SnippetCounterNode.class).isEmpty()) { + int sideEffectCount = 0; + assert (sideEffectCount = graph.getNodes().filter(e -> hasSideEffect(e)).count()) >= 0; + new ConvertDeoptimizeToGuardPhase().apply(graph, null); + assert sideEffectCount == graph.getNodes().filter(e -> hasSideEffect(e)).count() : "deleted side effecting node"; - new DeadCodeEliminationPhase(Required).apply(graph); + new DeadCodeEliminationPhase(Required).apply(graph); + } else { + // ConvertDeoptimizeToGuardPhase will eliminate snippet counters on paths + // that terminate in a deopt so we disable it if the graph contains + // snippet counters. The trade off is that we miss out on guard + // coalescing opportunities. + } } /**