Mercurial > hg > graal-compiler
changeset 23017:2b32ccbf4999
BinaryGraphPrinter: add phi nodes to their merge's block
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Wed, 18 Nov 2015 17:52:38 +0100 |
parents | 27ee22a166d4 |
children | 4af472d10ad6 |
files | graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java |
diffstat | 1 files changed, 37 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Wed Nov 18 17:49:07 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Wed Nov 18 17:52:38 2015 +0100 @@ -37,11 +37,6 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.vm.ci.meta.JavaType; -import jdk.vm.ci.meta.ResolvedJavaField; -import jdk.vm.ci.meta.ResolvedJavaMethod; -import jdk.vm.ci.meta.Signature; - import com.oracle.graal.compiler.common.cfg.BlockMap; import com.oracle.graal.debug.Debug; import com.oracle.graal.graph.CachedGraph; @@ -66,6 +61,11 @@ import com.oracle.graal.nodes.cfg.ControlFlowGraph; import com.oracle.graal.phases.schedule.SchedulePhase; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Signature; + public class BinaryGraphPrinter implements GraphPrinter { private static final int CONSTANT_POOL_MAX_SIZE = 8000; @@ -428,6 +428,20 @@ return node.getId(); } + private Object getBlockForNode(Node node, NodeMap<Block> nodeToBlocks) { + if (nodeToBlocks.isNew(node)) { + return "NEW (not in schedule)"; + } else { + Block block = nodeToBlocks.get(node); + if (block != null) { + return block.getId(); + } else if (node instanceof PhiNode) { + return getBlockForNode(((PhiNode) node).merge(), nodeToBlocks); + } + } + return null; + } + private void writeNodes(Graph graph, NodeMap<Block> nodeToBlocks, ControlFlowGraph cfg) throws IOException { Map<Object, Object> props = new HashMap<>(); @@ -444,13 +458,9 @@ } } if (nodeToBlocks != null) { - if (nodeToBlocks.isNew(node)) { - props.put("node-to-block", "NEW (not in schedule)"); - } else { - Block block = nodeToBlocks.get(node); - if (block != null) { - props.put("node-to-block", block.getId()); - } + Object block = getBlockForNode(node, nodeToBlocks); + if (block != null) { + props.put("node-to-block", block); } } @@ -535,9 +545,23 @@ writeInt(blocks.size()); for (Block block : blocks) { List<Node> nodes = blockToNodes.get(block); + List<Node> extraNodes = new LinkedList<>(); writeInt(block.getId()); - writeInt(nodes.size()); for (Node node : nodes) { + if (node instanceof AbstractMergeNode) { + AbstractMergeNode merge = (AbstractMergeNode) node; + for (PhiNode phi : merge.phis()) { + if (!nodes.contains(phi)) { + extraNodes.add(phi); + } + } + } + } + writeInt(nodes.size() + extraNodes.size()); + for (Node node : nodes) { + writeInt(getNodeId(node)); + } + for (Node node : extraNodes) { writeInt(getNodeId(node)); } writeInt(block.getSuccessors().size());