Mercurial > hg > truffle
changeset 11673:1c5bc8307c76
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 16 Sep 2013 20:37:44 +0200 |
parents | 25de2c04c956 (current diff) 2b2de196d8f9 (diff) |
children | 8505bcff4bdc |
files | graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java |
diffstat | 3 files changed, 33 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Mon Sep 16 20:37:25 2013 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Mon Sep 16 20:37:44 2013 +0200 @@ -147,6 +147,7 @@ private int[] iterableIds; private static final DebugMetric ITERABLE_NODE_TYPES = Debug.metric("IterableNodeTypes"); + private final DebugMetric nodeIterableCount; private NodeClass(Class<?> clazz) { super(clazz); @@ -215,6 +216,7 @@ } isLeafNode = (this.inputOffsets.length == 0 && this.successorOffsets.length == 0); + nodeIterableCount = Debug.metric("NodeIterable_" + shortName); } @Override @@ -242,6 +244,7 @@ } public int[] iterableIds() { + nodeIterableCount.increment(); return iterableIds; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Mon Sep 16 20:37:25 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Mon Sep 16 20:37:44 2013 +0200 @@ -23,14 +23,13 @@ package com.oracle.graal.nodes; import com.oracle.graal.api.meta.*; -import com.oracle.graal.graph.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; /** * Marks a position in the graph where a safepoint should be emitted. */ -public class SafepointNode extends DeoptimizingFixedWithNextNode implements LIRLowerable, IterableNodeType { +public class SafepointNode extends DeoptimizingFixedWithNextNode implements LIRLowerable { public SafepointNode() { this(StampFactory.forVoid());
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/SafepointInsertionPhase.java Mon Sep 16 20:37:25 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/SafepointInsertionPhase.java Mon Sep 16 20:37:44 2013 +0200 @@ -24,8 +24,10 @@ import static com.oracle.graal.phases.GraalOptions.*; +import java.util.*; + +import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.java.*; import com.oracle.graal.phases.*; /** @@ -35,23 +37,41 @@ @Override protected void run(StructuredGraph graph) { - if (GenLoopSafepoints.getValue()) { + final boolean addLoopSafepoints = GenLoopSafepoints.getValue(); + if (addLoopSafepoints && !GenSafepoints.getValue()) { + // Use (faster) typed node iteration if we are not adding return safepoints for (LoopEndNode loopEndNode : graph.getNodes(LoopEndNode.class)) { - if (!loopEndNode.canSafepoint()) { - continue; - } - SafepointNode safepointNode = graph.add(new SafepointNode()); - graph.addBeforeFixed(loopEndNode, safepointNode); + addLoopSafepoint(graph, loopEndNode); } } if (GenSafepoints.getValue()) { - if (!OptEliminateSafepoints.getValue() || graph.getNodes(MethodCallTargetNode.class).isNotEmpty()) { - for (ReturnNode returnNode : graph.getNodes().filter(ReturnNode.class)) { + List<ReturnNode> returnNodes = new ArrayList<>(); + boolean addReturnSafepoints = !OptEliminateSafepoints.getValue(); + for (Node n : graph.getNodes()) { + if (addLoopSafepoints && n instanceof LoopEndNode) { + addLoopSafepoint(graph, (LoopEndNode) n); + } else if (n instanceof ReturnNode) { + returnNodes.add((ReturnNode) n); + } else { + if (!addReturnSafepoints && n instanceof LoweredCallTargetNode) { + addReturnSafepoints = true; + } + } + } + if (addReturnSafepoints) { + for (ReturnNode returnNode : returnNodes) { SafepointNode safepoint = graph.add(new SafepointNode()); graph.addBeforeFixed(returnNode, safepoint); } } } } + + private static void addLoopSafepoint(StructuredGraph graph, LoopEndNode loopEndNode) { + if (loopEndNode.canSafepoint()) { + SafepointNode safepointNode = graph.add(new SafepointNode()); + graph.addBeforeFixed(loopEndNode, safepointNode); + } + } }