Mercurial > hg > truffle
changeset 21467:d4db9d812c8d
Make PEA handling of node virtualization customizable
author | Paul Woegerer <paul.woegerer@oracle.com> |
---|---|
date | Fri, 22 May 2015 10:50:43 +0200 |
parents | 24d12404e70a |
children | 99942eac9c6d |
files | graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java |
diffstat | 1 files changed, 19 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri May 22 09:39:22 2015 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri May 22 10:50:43 2015 +0200 @@ -136,15 +136,21 @@ FixedNode nextFixedNode = lastFixedNode == null ? null : lastFixedNode.next(); VirtualUtil.trace("%s", node); - if (node instanceof VirtualizableAllocation) { - if (processVirtualizable((ValueNode) node, nextFixedNode, state, effects)) { + if (requiresProcessing(node)) { + if (processVirtualizable((ValueNode) node, nextFixedNode, state, effects) == false) { + return false; + } + if (tool.isDeleted()) { VirtualUtil.trace("deleted virtualizable allocation %s", node); return true; } } if (hasVirtualInputs.isMarked(node) && node instanceof ValueNode) { if (node instanceof Virtualizable) { - if (processVirtualizable((ValueNode) node, nextFixedNode, state, effects)) { + if (processVirtualizable((ValueNode) node, nextFixedNode, state, effects) == false) { + return false; + } + if (tool.isDeleted()) { VirtualUtil.trace("deleted virtualizable node %s", node); return true; } @@ -160,6 +166,10 @@ return false; } + protected boolean requiresProcessing(Node node) { + return node instanceof VirtualizableAllocation; + } + private boolean processNodeWithScalarReplacedInputs(ValueNode node, FixedNode insertBefore, BlockT state, GraphEffectList effects) { ValueNode canonicalizedValue = node; if (node instanceof Canonicalizable.Unary<?>) { @@ -265,8 +275,12 @@ private boolean processVirtualizable(ValueNode node, FixedNode insertBefore, BlockT state, GraphEffectList effects) { tool.reset(state, node, insertBefore, effects); - ((Virtualizable) node).virtualize(tool); - return tool.isDeleted(); + return virtualize(node, tool); + } + + protected boolean virtualize(ValueNode node, VirtualizerTool vt) { + ((Virtualizable) node).virtualize(vt); + return true; // request further processing } private void processNodeWithState(NodeWithState nodeWithState, BlockT state, GraphEffectList effects) {