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