xazax.hun added inline comments.

================
Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:79
+    for (BoolValue *Constraint : Env1.getFlowConditionConstraints()) {
+      Expr1 = &Env1.makeAnd(*Expr1, *Constraint);
+    }
----------------
Hmm, interesting.
I think we view every boolean formula at a certain program point implicitly as 
`FlowConditionAtThatPoint && Formula`. And the flow condition at a program 
point should already be a disjunction of its predecessors.

So it would be interpreted as: `(FlowConditionPred1 || FlowConditionPred2) && 
(FormulaAtPred1 || FormulaAtPred2)`.
While this is great, this is not the strongest condition we could derive. 
`(FlowConditionPred1 && FormulaAtPred1)  || (FormulaAtPred2 && 
FlowConditionPred2)` created by this code snippet is stronger which is great.

My main concern is whether we would end up seeing an exponential explosion in 
the size of these formulas in the number of branches following each other in a 
sequence.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D122838/new/

https://reviews.llvm.org/D122838

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to