@@ -209,24 +209,21 @@ bool DataflowAnalysisContext::equivalentFormulas(const Formula &Val1,
209209}
210210
211211llvm::DenseSet<Atom> DataflowAnalysisContext::collectDependencies (
212- const llvm::DenseSet<Atom> & Tokens) const {
213- llvm::DenseSet<Atom> VisitedTokens;
214- // Use a worklist algorithm, with `Remaining` holding the worklist.
212+ llvm::DenseSet<Atom> Tokens) const {
213+ // Use a worklist algorithm, with `Remaining` holding the worklist and
214+ // `Tokens` tracking which atoms have already been added to the worklist.
215215 std::vector<Atom> Remaining (Tokens.begin (), Tokens.end ());
216-
217- // For each token in `Remaining`, add its dependencies to the worklist.
218216 while (!Remaining.empty ()) {
219- auto Token = Remaining.back ();
217+ Atom CurrentToken = Remaining.back ();
220218 Remaining.pop_back ();
221- if (!VisitedTokens.insert (Token).second )
222- continue ;
223- if (auto DepsIt = FlowConditionDeps.find (Token);
219+ if (auto DepsIt = FlowConditionDeps.find (CurrentToken);
224220 DepsIt != FlowConditionDeps.end ())
225221 for (Atom A : DepsIt->second )
226- Remaining.push_back (A);
222+ if (Tokens.insert (A).second )
223+ Remaining.push_back (A);
227224 }
228225
229- return VisitedTokens ;
226+ return Tokens ;
230227}
231228
232229void DataflowAnalysisContext::addTransitiveFlowConditionConstraints (
@@ -294,7 +291,7 @@ SimpleLogicalContext DataflowAnalysisContext::exportLogicalContext(
294291 }
295292
296293 llvm::DenseSet<dataflow::Atom> Dependencies =
297- collectDependencies (TargetTokens);
294+ collectDependencies (std::move ( TargetTokens) );
298295
299296 for (dataflow::Atom Token : Dependencies) {
300297 // Only process the token if it is constrained. Unconstrained tokens don't
0 commit comments