================
@@ -239,6 +262,65 @@ void 
DataflowAnalysisContext::addTransitiveFlowConditionConstraints(
   }
 }
 
+static void getReferencedAtoms(const Formula &F,
+                               llvm::DenseSet<dataflow::Atom> &Refs) {
+  switch (F.kind()) {
+    case Formula::AtomRef:
+      Refs.insert(F.getAtom());
+      break;
+    case Formula::Literal:
+      break;
+    case Formula::Not:
+      getReferencedAtoms(*F.operands()[0], Refs);
+      break;
+    case Formula::And:
+    case Formula::Or:
+    case Formula::Implies:
+    case Formula::Equal:
+      ArrayRef<const Formula *> Operands = F.operands();
+      getReferencedAtoms(*Operands[0], Refs);
+      getReferencedAtoms(*Operands[1], Refs);
+      break;
+  }
+}
+
+SimpleLogicalContext DataflowAnalysisContext::exportLogicalContext(
+    llvm::DenseSet<dataflow::Atom> TargetTokens) const {
+  SimpleLogicalContext LC;
+
+  if (Invariant != nullptr) {
+    LC.Invariant = Invariant;
+    getReferencedAtoms(*Invariant, TargetTokens);
+  }
+
+  llvm::DenseSet<dataflow::Atom> ReachableTokens =
+      getTransitiveClosure(TargetTokens);
+
+  for (dataflow::Atom Token : ReachableTokens) {
+    // Only process the token if it is constrained. Unconstrained tokens don't
+    // have dependencies.
+    auto ConstraintsIt = FlowConditionConstraints.find(Token);
+    if (ConstraintsIt == FlowConditionConstraints.end())
+      continue;
+    LC.TokenDefs[Token] = ConstraintsIt->second;
----------------
usx95 wrote:

This looks resolved now. Thanks.

https://github.com/llvm/llvm-project/pull/152487
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to