# HG changeset patch # User Roland Schatz # Date 1378827482 -7200 # Node ID 809609e6abe64fde6316a390f44d948486c9f625 # Parent 00672122f256189b5612c3b1d07de8eba52c8317 Update changed nodes in incremental canonicalizer. diff -r 00672122f256 -r 809609e6abe6 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IncrementalCanonicalizerPhase.java --- 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 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); } } diff -r 00672122f256 -r 809609e6abe6 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- 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 incrementalCanonicalizer = new IncrementalCanonicalizerPhase<>(canonicalizer); + incrementalCanonicalizer.appendPhase(new Round(i++, context)); + incrementalCanonicalizer.apply(graph, context); if (!containsLowerable(graph.getNewNodes(mark))) { // No new lowerable nodes - done!