@@ -378,7 +378,7 @@ class DataFlowSolver {
378378 analysisStates.erase (latticeAnchor);
379379 }
380380
381- // Erase all analysis states.
381+ // / Erase all analysis states.
382382 void eraseAllStates () {
383383 analysisStates.clear ();
384384 equivalentAnchorMap.clear ();
@@ -479,10 +479,10 @@ class DataFlowSolver {
479479 DenseMap<LatticeAnchor, DenseMap<TypeID, std::unique_ptr<AnalysisState>>>
480480 analysisStates;
481481
482- // / A type-erased map of lattice type to the equivalet lattice anchors.
483- // / Lattice anchors are considered equivalent under a certain lattice type if
484- // / and only if, under this lattice type, the lattices pointed to by these
485- // / lattice anchors necessarily contain identical value.
482+ // / A map of Ananlysis state type to the equivalent lattice anchors.
483+ // / Lattice anchors are considered equivalent under a certain analysis state
484+ // / type if and only if, the analysis states pointed to by these lattice
485+ // / anchors necessarily contain identical value.
486486 DenseMap<TypeID, llvm::EquivalenceClasses<LatticeAnchor>> equivalentAnchorMap;
487487
488488 // / Allow the base child analysis class to access the internals of the solver.
@@ -715,8 +715,11 @@ AnalysisT *DataFlowSolver::load(Args &&...args) {
715715template <typename StateT>
716716LatticeAnchor
717717DataFlowSolver::getLeaderAnchorOrSelf (LatticeAnchor latticeAnchor) const {
718- const llvm::EquivalenceClasses<LatticeAnchor> eqClass =
719- equivalentAnchorMap.lookup (TypeID::get<StateT>());
718+ if (!equivalentAnchorMap.contains (TypeID::get<StateT>())) {
719+ return latticeAnchor;
720+ }
721+ const llvm::EquivalenceClasses<LatticeAnchor> &eqClass =
722+ equivalentAnchorMap.at (TypeID::get<StateT>());
720723 llvm::EquivalenceClasses<LatticeAnchor>::member_iterator leaderIt =
721724 eqClass.findLeader (latticeAnchor);
722725 if (leaderIt != eqClass.member_end ()) {
@@ -743,8 +746,11 @@ StateT *DataFlowSolver::getOrCreateState(AnchorT anchor) {
743746
744747template <typename StateT>
745748bool DataFlowSolver::isEquivalent (LatticeAnchor lhs, LatticeAnchor rhs) const {
746- const llvm::EquivalenceClasses<LatticeAnchor> eqClass =
747- equivalentAnchorMap.lookup (TypeID::get<StateT>());
749+ if (!equivalentAnchorMap.contains (TypeID::get<StateT>())) {
750+ return false ;
751+ }
752+ const llvm::EquivalenceClasses<LatticeAnchor> &eqClass =
753+ equivalentAnchorMap.at (TypeID::get<StateT>());
748754 if (!eqClass.contains (lhs) || !eqClass.contains (rhs))
749755 return false ;
750756 return eqClass.isEquivalent (lhs, rhs);
0 commit comments