A flow condition is represented with an atomic boolean token, and it is bound to a set of constraints: (FC <=> C1 ^ C2 ^ ...). \
This was internally represented as (FC v !C1 v !C2 v ...) ^ (C1 v !FC) ^ (C2 v !FC) ^ ... and tracked by 2 maps:
- FlowConditionFirstConjunct stores the first conjunct (FC v !C1 v !C2 v ...)
- FlowConditionRemainingConjuncts stores the remaining conjuncts (C1 v !FC) ^ (C2 v !FC) ^ ...
This patch simplifies the tracking of the constraints by using a single FlowConditionConstraints map which stores (C1 ^ C2 ^ ...), eliminating the use of two maps.
Do you actually need a second lookup? Couldn't you use Res.first to update the corresponding value?