Module Condition.ConditionDom
This uses the structure of the dominator tree as conditions. It observes the fact that we never perform intersection on arbitrary conditions, as conditions represent set of paths, we either assume a new condition or join existing ones.
This works together with skiplist.ml (fast implementation of useful algorithms like online nearest_common_ancestor) and treemap.ml (mapping from tree relations to lattices).
It is a good candidate for introducing scopes and getting rid of Cudd. Still, when I tested these conditions with Domain_non_relational, it worked for most benchmarks, but the performance gains were not fantastic compared to cudd (sometimes less time, some times more; sometimes a lot less memory, but sometimes more).
module Literal : sig ... endmodule Path : sig ... endval hash : t -> intval pretty : Stdlib.Format.formatter -> t -> unitval var : unit -> tval empty : tval all : tval one : tval is_empty : t -> boolmodule Log : sig ... end