Mercurial > hg > truffle
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(); } /**