changeset 15499:229537218983

[flow-sensitive] internal consistency asserts, state tracking
author Miguel Garcia <miguel.m.garcia@oracle.com>
date Mon, 05 May 2014 11:55:34 +0200
parents e30d7eaa290d
children f2132fab8a6f 2eb6330e13a3
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java
diffstat 2 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Sun May 04 18:36:44 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Mon May 05 11:55:34 2014 +0200
@@ -115,6 +115,7 @@
      */
     public void forceState(State s) {
         state = s;
+        assert state.repOK();
         substs.clear();
         added.clear();
         visited = null;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java	Sun May 04 18:36:44 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java	Mon May 05 11:55:34 2014 +0200
@@ -141,6 +141,18 @@
         this.falseFacts = new IdentityHashMap<>(other.falseFacts);
     }
 
+    public boolean repOK() {
+        // trueFacts and falseFacts disjoint
+        for (LogicNode trueFact : trueFacts.keySet()) {
+            assert !falseFacts.containsKey(trueFact) : trueFact + " tracked as both true and false fact.";
+        }
+        // no scrutinee tracked as both known-null and known-non-null
+        for (ValueNode subject : knownNull.keySet()) {
+            assert !isNonNull(subject) : subject + " tracked as both known-null and known-non-null.";
+        }
+        return true;
+    }
+
     /**
      * @return A new list containing only those states that are reachable.
      */
@@ -300,6 +312,9 @@
 
         this.trueFacts = mergeTrueFacts(withReachableStates, merge);
         this.falseFacts = mergeFalseFacts(withReachableStates, merge);
+
+        assert repOK();
+
         return true;
     }
 
@@ -531,6 +546,7 @@
         Witness w = getOrElseAddTypeInfo(object);
         if (w.trackNN(anchor)) {
             versionNr++;
+            assert repOK();
             return true;
         }
         return false;
@@ -563,6 +579,7 @@
         if (w.trackCC(observed, anchor)) {
             versionNr++;
             metricTypeRegistered.increment();
+            assert repOK();
             return true;
         }
         return false;
@@ -589,6 +606,7 @@
         if (w.trackIO(observed, anchor)) {
             versionNr++;
             metricTypeRegistered.increment();
+            assert repOK();
             return true;
         }
         return false;
@@ -670,6 +688,7 @@
         } else {
             addFactPrimordial(condition, isTrue ? trueFacts : falseFacts, anchor);
         }
+        assert repOK();
     }
 
     /**
@@ -781,6 +800,7 @@
                 trackNN(original, anchor);
             }
         }
+        assert repOK();
     }
 
     /**