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 hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/phases/GraphChangeMonitoringPhase.java

Print this page

        

*** 20,32 **** * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.core.phases; - import java.util.Set; - import java.util.stream.Collectors; - import org.graalvm.compiler.debug.Debug; 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; --- 20,29 ----
*** 34,43 **** --- 31,42 ---- 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; /** * 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
*** 75,102 **** super.run(graphCopy, context); } catch (Throwable t) { Debug.handle(t); } } ! /* ! * Ignore LogicConstantNode since those are sometimes created and deleted as part of running ! * a phase. ! */ ! if (listener.getNodes().stream().filter(e -> !(e instanceof LogicConstantNode)).findFirst().isPresent()) { /* 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.BASIC_LOG_LEVEL)) { Debug.dump(Debug.BASIC_LOG_LEVEL, graph, "*** Before phase %s", getName()); } super.run(graph, context); - Set<Node> collect = listener.getNodes().stream().filter(e -> !e.isAlive()).filter(e -> !(e instanceof LogicConstantNode)).collect(Collectors.toSet()); if (Debug.isDumpEnabled(Debug.BASIC_LOG_LEVEL)) { ! Debug.dump(Debug.BASIC_LOG_LEVEL, graph, "*** After phase %s %s", getName(), collect); } ! Debug.log("*** %s %s %s\n", message, graph, collect); } } } else { // Go ahead and run it normally even though it should have no effect super.run(graph, context); --- 74,106 ---- super.run(graphCopy, context); } catch (Throwable t) { Debug.handle(t); } } ! ! EconomicSet<Node> filteredNodes = EconomicSet.create(Equivalence.IDENTITY); ! for (Node n : listener.getNodes()) { ! if (n instanceof LogicConstantNode) { ! // Ignore LogicConstantNode since those are sometimes created and deleted as part of ! // running a phase. ! } else { ! filteredNodes.add(n); ! } ! } ! 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.BASIC_LOG_LEVEL)) { Debug.dump(Debug.BASIC_LOG_LEVEL, graph, "*** Before phase %s", getName()); } super.run(graph, context); if (Debug.isDumpEnabled(Debug.BASIC_LOG_LEVEL)) { ! Debug.dump(Debug.BASIC_LOG_LEVEL, graph, "*** After phase %s %s", getName(), 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