Mercurial > hg > graal-compiler
changeset 7024:24950e93b962
only perform PEA iteration if there are analyzable nodes
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 26 Nov 2012 13:20:00 +0100 |
parents | be508977fb47 |
children | 635349143c4f |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java |
diffstat | 5 files changed, 26 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java Mon Nov 26 13:19:32 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java Mon Nov 26 13:20:00 2012 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,7 +54,7 @@ } @Override - public Object fieldName(int index) { + public String fieldName(int index) { assert index == 0; return "value"; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Mon Nov 26 13:19:32 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Mon Nov 26 13:20:00 2012 +0100 @@ -67,7 +67,7 @@ } @Override - public Object fieldName(int index) { + public String fieldName(int index) { return "[" + index + "]"; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Mon Nov 26 13:19:32 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Mon Nov 26 13:20:00 2012 +0100 @@ -67,7 +67,7 @@ } @Override - public Object fieldName(int index) { + public String fieldName(int index) { return fields[index].getName(); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Mon Nov 26 13:19:32 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Mon Nov 26 13:20:00 2012 +0100 @@ -52,7 +52,7 @@ // nothing to do... } - public abstract Object fieldName(int i); + public abstract String fieldName(int i); public void materializeAt(@SuppressWarnings("unused") FixedNode fixed) { // nothing to do in here - this method allows subclasses to respond to materialization
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Mon Nov 26 13:19:32 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Mon Nov 26 13:20:00 2012 +0100 @@ -23,12 +23,14 @@ package com.oracle.graal.virtual.phases.ea; import java.util.*; +import java.util.concurrent.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.graph.*; @@ -65,17 +67,30 @@ return; } - for (int iteration = 0; iteration < GraalOptions.EscapeAnalysisIterations; iteration++) { - Debug.scope("iteration " + iteration, new Runnable() { + boolean analyzableNodes = false; + for (Node node : graph.getNodes()) { + if (node instanceof EscapeAnalyzable) { + analyzableNodes = true; + break; + } + } + if (!analyzableNodes) { + return; + } + + Boolean continueIteration = true; + for (int iteration = 0; iteration < GraalOptions.EscapeAnalysisIterations && continueIteration; iteration++) { + continueIteration = Debug.scope("iteration " + iteration, new Callable<Boolean>() { + @Override - public void run() { + public Boolean call() { SchedulePhase schedule = new SchedulePhase(); schedule.apply(graph, false); PartialEscapeClosure closure = new PartialEscapeClosure(graph.createNodeBitMap(), schedule, runtime); ReentrantBlockIterator.apply(closure, schedule.getCFG().getStartBlock(), new BlockState(), null); if (closure.getVirtualIdCount() == 0) { - return; + return false; } // apply the effects collected during the escape analysis iteration @@ -90,11 +105,12 @@ new DeadCodeEliminationPhase().apply(graph); if (!iterative) { - return; + return false; } if (GraalOptions.OptCanonicalizer) { new CanonicalizerPhase(target, runtime, assumptions).apply(graph); } + return true; } }); }