50 for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)
70 for (; ptsIt != ptsEit; ++ptsIt)
97 for (; ptsIt != ptsEit; ++ptsIt)
105 MRSet::iterator mit =
memRegSet.find(&mr);
106 assert(mit!=
memRegSet.end() &&
"memory region not found!!");
129 for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
132 const NodeBS& cpts = *cit;
140 for (PointsToList::const_iterator interIt = inters.begin(), interEit = inters.end();
141 interIt != interEit; ++interIt)
143 const NodeBS& inter = *interIt;
154 if (inters.find(cpts) != inters.end())
159 else if (cpts.
count() == 1)
174 for (PointsToList::const_iterator interIt = inters.begin(), interEit = inters.end();
175 interIt != interEit; ++interIt)
177 const NodeBS& inter = *interIt;
183 new_inter &= cpts_copy;
186 if (new_inter != inter)
188 toBeDeleted.insert(inter);
189 newInters.insert(new_inter);
192 NodeBS complement = inter;
194 if (complement.
empty() ==
false)
196 newInters.insert(complement);
202 if (cpts_copy.
empty())
208 for (PointsToList::const_iterator it = toBeDeleted.begin(), eit = toBeDeleted.end();
211 const NodeBS& temp_cpts = *it;
212 inters.erase(temp_cpts);
216 for (PointsToList::const_iterator it = newInters.begin(), eit = newInters.end();
219 const NodeBS& temp_cpts = *it;
220 inters.insert(temp_cpts);
224 if (cpts_copy.
empty() ==
false)
225 inters.insert(cpts_copy);
243 PointsToList::const_iterator it = inters.begin();
244 PointsToList::const_iterator eit = inters.end();
245 for (; it != eit; ++it)
247 const NodeBS& inter = *it;
251 MRSet::iterator mit =
memRegSet.find(&mr);
252 assert(mit!=
memRegSet.end() &&
"memory region not found!!");
275 for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
278 const NodeBS& cpts = *cit;
290 for(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end();
293 const NodeBS& cpts = *cit;
295 for (PointsToList::const_iterator interIt =
inters.begin(), interEit =
inters.end();
296 interIt != interEit; ++interIt)
298 const NodeBS& inter = *interIt;
virtual void getMRsForLoad(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *fun)
Get memory region at a load.
virtual void partitionMRs()
Partition regions.
virtual void getMRsForCallSiteRef(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *fun)
Get memory regions to be inserted at a load statement.
void createDistinctMR(const SVFFunction *func, const NodeBS &cpts)
Create memory regions for each points-to target.
virtual void partitionMRs()
Partition regions.
void createDisjointMR(const SVFFunction *func, const NodeBS &cpts)
Create disjoint memory region.
virtual void partitionMRs()
Partition regions.
virtual void getMRsForCallSiteRef(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *fun)
Get memory regions to be inserted at a load statement.
void getMRsForLoadFromInterList(MRSet &mrs, const NodeBS &cpts, const PointsToList &inters)
PointsToList & getIntersList(const SVFFunction *func)
void computeIntersections(const NodeBS &cpts, PointsToList &inters)
Compute intersections between cpts and computed cpts intersections before.
virtual void getMRsForLoad(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *fun)
FunToPointsTosMap & getFunToPointsToList()
OrderedSet< NodeBS, SVFUtil::equalNodeBS > PointsToList
OrderedSet< const MemRegion *, MemRegion::equalMemRegion > MRSet
Get typedef from Pointer Analysis.
PtsToRepPtsSetMap cptsToRepCPtsMap
Map a condition pts to its rep conditional pts (super set points-to)
void createMR(const SVFFunction *fun, const NodeBS &cpts)
Generate a memory region and put in into functions which use it.
MRSet memRegSet
A set of All memory regions.
bool intersects(const SparseBitVector< ElementSize > *RHS) const
bool intersectWithComplement(const SparseBitVector &RHS)
bool contains(const SparseBitVector< ElementSize > &RHS) const