# HG changeset patch # User Paul Woegerer # Date 1432284643 -7200 # Node ID d4db9d812c8da34a36a599638568e1c3d663ee7b # Parent 24d12404e70a455cad703057c6137cbae749c2d1 Make PEA handling of node virtualization customizable diff -r 24d12404e70a -r d4db9d812c8d graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- 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) {