# HG changeset patch # User Miguel Garcia # Date 1399283734 -7200 # Node ID 229537218983f5a25bd9b6cf246394a5d933ed64 # Parent e30d7eaa290d1e39d52079bccc675ec2c67b1055 [flow-sensitive] internal consistency asserts, state tracking diff -r e30d7eaa290d -r 229537218983 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java --- 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; diff -r e30d7eaa290d -r 229537218983 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java --- 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(); } /**