changeset 11861:fb218ac55362

FloatingReadNode: add verify(), make sure that lastLocationAccess is always a MemoryCheckpoint
author Bernhard Urban <bernhard.urban@jku.at>
date Wed, 25 Sep 2013 19:29:14 +0200
parents 762dc2f23d1c
children 4635fdfd8256
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java
diffstat 1 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Wed Oct 02 11:16:21 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Wed Sep 25 19:29:14 2013 +0200
@@ -25,6 +25,7 @@
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
+import com.oracle.graal.nodes.PhiNode.PhiType;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.nodes.type.*;
 
@@ -73,4 +74,25 @@
     public Access asFixedNode() {
         return graph().add(new ReadNode(object(), nullCheckLocation(), stamp(), getGuard(), getBarrierType(), isCompressible()));
     }
+
+    private static boolean isMemoryCheckPoint(Node n) {
+        return n instanceof MemoryCheckpoint.Single || n instanceof MemoryCheckpoint.Multi;
+    }
+
+    private static boolean isMemoryPhi(Node n) {
+        return n instanceof PhiNode && ((PhiNode) n).type() == PhiType.Memory;
+    }
+
+    private static boolean isMemoryProxy(Node n) {
+        return n instanceof ProxyNode && ((ProxyNode) n).type() == PhiType.Memory;
+    }
+
+    @Override
+    public boolean verify() {
+        Node lla = lastLocationAccess();
+        if (lla != null && !(isMemoryCheckPoint(lla) || isMemoryPhi(lla) || isMemoryProxy(lla))) {
+            assert false : "lastLocationAccess of " + this + " should be a MemoryCheckpoint, but is " + lla;
+        }
+        return super.verify();
+    }
 }