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) {