src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java	Fri Jul  7 09:29:50 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java	Fri Jul  7 09:29:50 2017

*** 20,42 **** --- 20,41 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.core.phases; ! import org.graalvm.compiler.debug.DebugContext; import org.graalvm.compiler.debug.Debug.Scope; import org.graalvm.compiler.graph.Graph.NodeEvent; import org.graalvm.compiler.graph.Graph.NodeEventScope; import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.nodes.LogicConstantNode; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.phases.BasePhase; import org.graalvm.compiler.phases.PhaseSuite; import org.graalvm.compiler.phases.common.util.HashSetNodeEventListener; import org.graalvm.compiler.phases.tiers.PhaseContext; import org.graalvm.util.Equivalence; import org.graalvm.util.EconomicSet; + import org.graalvm.util.Equivalence; /** * A utility phase for detecting when a phase would change the graph and reporting extra information * about the effects. The phase is first run on a copy of the graph and if a change in that graph is * detected then it's rerun on the original graph inside a new debug scope under
*** 66,81 **** --- 65,81 ---- /* * Phase may add nodes but not end up using them so ignore additions. Nodes going dead and * having their inputs change are the main interesting differences. */ HashSetNodeEventListener listener = new HashSetNodeEventListener().exclude(NodeEvent.NODE_ADDED); ! StructuredGraph graphCopy = (StructuredGraph) graph.copy(graph.getDebug()); + DebugContext debug = graph.getDebug(); try (NodeEventScope s = graphCopy.trackNodeEvents(listener)) { ! try (Scope s2 = Debug.sandbox("WithoutMonitoring", null)) { ! try (DebugContext.Scope s2 = debug.sandbox("WithoutMonitoring", null)) { super.run(graphCopy, context); } catch (Throwable t) { ! Debug.handle(t); ! debug.handle(t); } } EconomicSet<Node> filteredNodes = EconomicSet.create(Equivalence.IDENTITY); for (Node n : listener.getNodes()) {
*** 88,106 **** --- 88,106 ---- } if (!filteredNodes.isEmpty()) { /* rerun it on the real graph in a new Debug scope so Dump and Log can find it. */ listener = new HashSetNodeEventListener(); try (NodeEventScope s = graph.trackNodeEvents(listener)) { ! try (Scope s2 = Debug.scope("WithGraphChangeMonitoring")) { ! if (Debug.isDumpEnabled(Debug.DETAILED_LEVEL)) { ! Debug.dump(Debug.DETAILED_LEVEL, graph, "*** Before phase %s", getName()); ! try (DebugContext.Scope s2 = debug.scope("WithGraphChangeMonitoring")) { ! if (debug.isDumpEnabled(DebugContext.DETAILED_LEVEL)) { ! debug.dump(DebugContext.DETAILED_LEVEL, graph, "*** Before phase %s", getName()); } super.run(graph, context); ! if (Debug.isDumpEnabled(Debug.DETAILED_LEVEL)) { ! Debug.dump(Debug.DETAILED_LEVEL, graph, "*** After phase %s %s", getName(), filteredNodes); ! if (debug.isDumpEnabled(DebugContext.DETAILED_LEVEL)) { ! debug.dump(DebugContext.DETAILED_LEVEL, graph, "*** After phase %s %s", getName(), filteredNodes); } ! Debug.log("*** %s %s %s\n", message, graph, filteredNodes); ! debug.log("*** %s %s %s\n", message, graph, filteredNodes); } } } else { // Go ahead and run it normally even though it should have no effect super.run(graph, context);

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File