--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/CanonicalizerPhase.java Thu Jun 27 03:10:52 2019 +0200
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/CanonicalizerPhase.java Thu Jun 27 03:33:44 2019 +0200
@@ -42,6 +42,7 @@
import org.graalvm.compiler.graph.spi.Canonicalizable.BinaryCommutative;
import org.graalvm.compiler.graph.spi.SimplifierTool;
import org.graalvm.compiler.nodeinfo.InputType;
+import org.graalvm.compiler.nodes.AbstractBeginNode;
import org.graalvm.compiler.nodes.AbstractMergeNode;
import org.graalvm.compiler.nodes.ConstantNode;
import org.graalvm.compiler.nodes.ControlSinkNode;
@@ -52,18 +53,18 @@
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.FloatingNode;
+import org.graalvm.compiler.nodes.spi.CoreProviders;
import org.graalvm.compiler.nodes.util.GraphUtil;
import org.graalvm.compiler.options.OptionValues;
import org.graalvm.compiler.phases.BasePhase;
import org.graalvm.compiler.phases.Phase;
-import org.graalvm.compiler.phases.tiers.PhaseContext;
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.ConstantReflectionProvider;
import jdk.vm.ci.meta.MetaAccessProvider;
-public class CanonicalizerPhase extends BasePhase<PhaseContext> {
+public class CanonicalizerPhase extends BasePhase<CoreProviders> {
private static final int MAX_ITERATION_PER_NODE = 10;
private static final CounterKey COUNTER_CANONICALIZED_NODES = DebugContext.counter("CanonicalizedNodes");
@@ -121,7 +122,7 @@
}
@Override
- protected void run(StructuredGraph graph, PhaseContext context) {
+ protected void run(StructuredGraph graph, CoreProviders context) {
new Instance(context).run(graph);
}
@@ -129,11 +130,11 @@
* @param newNodesMark only the {@linkplain Graph#getNewNodes(Mark) new nodes} specified by this
* mark are processed
*/
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Mark newNodesMark) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Mark newNodesMark) {
applyIncremental(graph, context, newNodesMark, true);
}
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Mark newNodesMark, boolean dumpGraph) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Mark newNodesMark, boolean dumpGraph) {
new Instance(context, newNodesMark).apply(graph, dumpGraph);
}
@@ -141,19 +142,19 @@
* @param workingSet the initial working set of nodes on which the canonicalizer works, should
* be an auto-grow node bitmap
*/
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Iterable<? extends Node> workingSet) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Iterable<? extends Node> workingSet) {
applyIncremental(graph, context, workingSet, true);
}
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Iterable<? extends Node> workingSet, boolean dumpGraph) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Iterable<? extends Node> workingSet, boolean dumpGraph) {
new Instance(context, workingSet).apply(graph, dumpGraph);
}
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Iterable<? extends Node> workingSet, Mark newNodesMark) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Iterable<? extends Node> workingSet, Mark newNodesMark) {
applyIncremental(graph, context, workingSet, newNodesMark, true);
}
- public void applyIncremental(StructuredGraph graph, PhaseContext context, Iterable<? extends Node> workingSet, Mark newNodesMark, boolean dumpGraph) {
+ public void applyIncremental(StructuredGraph graph, CoreProviders context, Iterable<? extends Node> workingSet, Mark newNodesMark, boolean dumpGraph) {
new Instance(context, workingSet, newNodesMark).apply(graph, dumpGraph);
}
@@ -164,26 +165,26 @@
private final class Instance extends Phase {
private final Mark newNodesMark;
- private final PhaseContext context;
+ private final CoreProviders context;
private final Iterable<? extends Node> initWorkingSet;
private NodeWorkList workList;
private Tool tool;
private DebugContext debug;
- private Instance(PhaseContext context) {
+ private Instance(CoreProviders context) {
this(context, null, null);
}
- private Instance(PhaseContext context, Iterable<? extends Node> workingSet) {
+ private Instance(CoreProviders context, Iterable<? extends Node> workingSet) {
this(context, workingSet, null);
}
- private Instance(PhaseContext context, Mark newNodesMark) {
+ private Instance(CoreProviders context, Mark newNodesMark) {
this(context, null, newNodesMark);
}
- private Instance(PhaseContext context, Iterable<? extends Node> workingSet, Mark newNodesMark) {
+ private Instance(CoreProviders context, Iterable<? extends Node> workingSet, Mark newNodesMark) {
this.newNodesMark = newNodesMark;
this.context = context;
this.initWorkingSet = workingSet;
@@ -207,12 +208,14 @@
if (!wholeGraph) {
workList.addAll(graph.getNewNodes(newNodesMark));
}
+
tool = new Tool(graph.getAssumptions(), graph.getOptions());
processWorkSet(graph);
}
@SuppressWarnings("try")
- private void processWorkSet(StructuredGraph graph) {
+ private int processWorkSet(StructuredGraph graph) {
+ int sum = 0;
NodeEventListener listener = new NodeEventListener() {
@Override
@@ -228,6 +231,13 @@
workList.add(usage);
}
}
+
+ if (node instanceof AbstractBeginNode) {
+ AbstractBeginNode abstractBeginNode = (AbstractBeginNode) node;
+ if (abstractBeginNode.predecessor() != null) {
+ workList.add(abstractBeginNode.predecessor());
+ }
+ }
}
@Override
@@ -242,8 +252,10 @@
if (changed && debug.isDumpEnabled(DebugContext.DETAILED_LEVEL)) {
debug.dump(DebugContext.DETAILED_LEVEL, graph, "CanonicalizerPhase %s", n);
}
+ ++sum;
}
}
+ return sum;
}
/**