Lines Matching defs:EquivalenceClass
879 class EquivalenceClass;
882 REGISTER_MAP_WITH_PROGRAMSTATE(ClassMap, SymbolRef, EquivalenceClass)
883 REGISTER_MAP_WITH_PROGRAMSTATE(ClassMembers, EquivalenceClass, SymbolSet)
884 REGISTER_MAP_WITH_PROGRAMSTATE(ConstraintRange, EquivalenceClass, RangeSet)
886 REGISTER_SET_FACTORY_WITH_PROGRAMSTATE(ClassSet, EquivalenceClass)
887 REGISTER_MAP_WITH_PROGRAMSTATE(DisequalityMap, EquivalenceClass, ClassSet)
914 class EquivalenceClass : public llvm::FoldingSetNode {
917 [[nodiscard]] static inline EquivalenceClass find(ProgramStateRef State,
927 merge(RangeSet::Factory &F, ProgramStateRef State, EquivalenceClass Other);
954 EquivalenceClass First, EquivalenceClass Second);
957 EquivalenceClass Other) const;
965 areEqual(ProgramStateRef State, EquivalenceClass First,
966 EquivalenceClass Second);
978 EquivalenceClass Class);
993 EquivalenceClass() = delete;
994 EquivalenceClass(const EquivalenceClass &) = default;
995 EquivalenceClass &operator=(const EquivalenceClass &) = delete;
996 EquivalenceClass(EquivalenceClass &&) = default;
997 EquivalenceClass &operator=(EquivalenceClass &&) = delete;
999 bool operator==(const EquivalenceClass &Other) const {
1002 bool operator<(const EquivalenceClass &Other) const { return ID < Other.ID; }
1003 bool operator!=(const EquivalenceClass &Other) const {
1014 /* implicit */ EquivalenceClass(SymbolRef Sym)
1028 SymbolSet Members, EquivalenceClass Other,
1034 EquivalenceClass First, EquivalenceClass Second);
1048 [](const std::pair<EquivalenceClass, RangeSet> &ClassConstraint) {
1054 EquivalenceClass Class) {
1060 return getConstraint(State, EquivalenceClass::find(State, Sym));
1064 EquivalenceClass Class,
1300 RangeSet infer(EquivalenceClass Class) {
1601 EquivalenceClass::areEqual(State, Sym->getLHS(), Sym->getRHS())) {
2126 State = assign(EquivalenceClass::find(State, Sym), NewConstraint);
2137 [[nodiscard]] ProgramStateRef assign(EquivalenceClass Class,
2152 for (EquivalenceClass DisequalClass : Class.getDisequalClasses(State)) {
2176 return EquivalenceClass::markDisequal(RangeFactory, State, LHS, RHS);
2181 return EquivalenceClass::merge(RangeFactory, State, LHS, RHS);
2203 llvm::SmallSet<EquivalenceClass, 4> SimplifiedClasses;
2206 for (std::pair<EquivalenceClass, SymbolSet> ClassToSymbolSet : Members) {
2207 EquivalenceClass Class = ClassToSymbolSet.first;
2208 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class);
2218 for (std::pair<EquivalenceClass, RangeSet> ClassConstraint : Constraints) {
2219 EquivalenceClass Class = ClassConstraint.first;
2222 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class);
2230 for (std::pair<EquivalenceClass, ClassSet> DisequalityEntry :
2232 EquivalenceClass Class = DisequalityEntry.first;
2234 State = EquivalenceClass::simplify(Builder, RangeFactory, State, Class);
2285 for (std::pair<EquivalenceClass, RangeSet> ClassConstraint : Constraints) {
2286 EquivalenceClass Class = ClassConstraint.first;
2302 LLVM_DUMP_METHOD void EquivalenceClass::dumpToStream(ProgramStateRef State,
2311 inline EquivalenceClass EquivalenceClass::find(ProgramStateRef State,
2316 if (const EquivalenceClass *NontrivialClass = State->get<ClassMap>(Sym))
2323 inline ProgramStateRef EquivalenceClass::merge(RangeSet::Factory &F,
2327 EquivalenceClass FirstClass = find(State, First);
2328 EquivalenceClass SecondClass = find(State, Second);
2333 inline ProgramStateRef EquivalenceClass::merge(RangeSet::Factory &F,
2335 EquivalenceClass Other) {
2369 EquivalenceClass::mergeImpl(RangeSet::Factory &RangeFactory,
2371 EquivalenceClass Other, SymbolSet OtherMembers) {
2453 for (EquivalenceClass DisequalClass : DisequalToOther) {
2482 EquivalenceClass::getMembersFactory(ProgramStateRef State) {
2486 SymbolSet EquivalenceClass::getClassMembers(ProgramStateRef State) const {
2496 bool EquivalenceClass::isTrivial(ProgramStateRef State) const {
2500 bool EquivalenceClass::isTriviallyDead(ProgramStateRef State,
2505 inline ProgramStateRef EquivalenceClass::markDisequal(RangeSet::Factory &RF,
2512 inline ProgramStateRef EquivalenceClass::markDisequal(RangeSet::Factory &RF,
2514 EquivalenceClass First,
2515 EquivalenceClass Second) {
2520 EquivalenceClass::markDisequal(RangeSet::Factory &RF, ProgramStateRef State,
2521 EquivalenceClass Other) const {
2548 inline bool EquivalenceClass::addToDisequalityInfo(
2550 RangeSet::Factory &RF, ProgramStateRef State, EquivalenceClass First,
2551 EquivalenceClass Second) {
2589 inline std::optional<bool> EquivalenceClass::areEqual(ProgramStateRef State,
2592 return EquivalenceClass::areEqual(State, find(State, FirstSym),
2596 inline std::optional<bool> EquivalenceClass::areEqual(ProgramStateRef State,
2597 EquivalenceClass First,
2598 EquivalenceClass Second) {
2614 EquivalenceClass::removeMember(ProgramStateRef State, const SymbolRef Old) {
2673 EquivalenceClass::simplify(SValBuilder &SVB, RangeSet::Factory &F,
2674 ProgramStateRef State, EquivalenceClass Class) {
2749 inline ClassSet EquivalenceClass::getDisequalClasses(ProgramStateRef State,
2755 EquivalenceClass::getDisequalClasses(ProgramStateRef State) const {
2761 EquivalenceClass::getDisequalClasses(DisequalityMapTy Map,
2769 bool EquivalenceClass::isClassDataConsistent(ProgramStateRef State) {
2772 for (std::pair<EquivalenceClass, SymbolSet> ClassMembersPair : Members) {
2784 for (std::pair<EquivalenceClass, ClassSet> DisequalityInfo : Disequalities) {
2785 EquivalenceClass Class = DisequalityInfo.first;
2794 for (EquivalenceClass DisequalClass : DisequalClasses) {
2932 auto removeDeadClass = [&](EquivalenceClass Class) {
2942 for (EquivalenceClass DisequalClass : DisequalClasses) {
2966 for (std::pair<EquivalenceClass, RangeSet> ClassConstraintPair :
2968 EquivalenceClass Class = ClassConstraintPair.first;
2976 for (std::pair<SymbolRef, EquivalenceClass> SymbolClassPair : Map) {
2987 for (std::pair<EquivalenceClass, SymbolSet> ClassMembersPair :
2989 EquivalenceClass Class = ClassMembersPair.first;
3034 assert(EquivalenceClass::isClassDataConsistent(State));
3313 for (std::pair<EquivalenceClass, RangeSet> P : Constraints) {
3345 static std::string toString(ProgramStateRef State, EquivalenceClass Class) {
3384 for (std::pair<EquivalenceClass, SymbolSet> ClassToSymbolSet : Members)
3424 for (std::pair<EquivalenceClass, ClassSet> ClassToDisEqSet : Disequalities) {
3425 EquivalenceClass Class = ClassToDisEqSet.first;
3428 for (EquivalenceClass DisEqClass : DisequalClasses)