Mercurial > hg > graal-compiler
changeset 11576:809609e6abe6
Update changed nodes in incremental canonicalizer.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 10 Sep 2013 17:38:02 +0200 |
parents | 00672122f256 |
children | 65cedae2647e |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IncrementalCanonicalizerPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java |
diffstat | 2 files changed, 25 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IncrementalCanonicalizerPhase.java Tue Sep 10 15:49:17 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IncrementalCanonicalizerPhase.java Tue Sep 10 17:38:02 2013 +0200 @@ -22,6 +22,10 @@ */ package com.oracle.graal.phases.common; +import java.util.*; + +import com.oracle.graal.graph.Graph.NodeChangedListener; +import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.tiers.*; @@ -36,8 +40,24 @@ @Override protected void run(StructuredGraph graph, C context) { - int mark = graph.getMark(); + int newNodesMark = graph.getMark(); + final Set<Node> changedNodes = new HashSet<>(); + + NodeChangedListener listener = new NodeChangedListener() { + + @Override + public void nodeChanged(Node node) { + changedNodes.add(node); + } + }; + graph.trackInputChange(listener); + graph.trackUsagesDroppedZero(listener); + super.run(graph, context); - canonicalizer.applyIncremental(graph, context, mark, false); + + graph.stopTrackingInputChange(); + graph.stopTrackingUsagesDroppedZero(); + + canonicalizer.applyIncremental(graph, context, changedNodes, newNodesMark, false); } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Sep 10 15:49:17 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Sep 10 17:38:02 2013 +0200 @@ -156,11 +156,11 @@ protected void run(final StructuredGraph graph, PhaseContext context) { int i = 0; while (true) { - Round round = new Round(i++, context); int mark = graph.getMark(); - round.apply(graph); - canonicalizer.applyIncremental(graph, context, mark); + IncrementalCanonicalizerPhase<PhaseContext> incrementalCanonicalizer = new IncrementalCanonicalizerPhase<>(canonicalizer); + incrementalCanonicalizer.appendPhase(new Round(i++, context)); + incrementalCanonicalizer.apply(graph, context); if (!containsLowerable(graph.getNewNodes(mark))) { // No new lowerable nodes - done!