Static Value-Flow Analysis
Loading...
Searching...
No Matches
SVF::PersistentPTData< Key, KeySet, Data, DataSet > Class Template Reference

PTData backed by a PersistentPointsToCache. More...

#include <PersistentPointsToDS.h>

Inheritance diagram for SVF::PersistentPTData< Key, KeySet, Data, DataSet >:
SVF::PTData< Key, KeySet, Data, DataSet >

Public Types

typedef PTData< Key, KeySet, Data, DataSet > BasePTData
typedef BasePTData::PTDataTy PTDataTy
typedef Map< Key, PointsToID > KeyToIDMap
typedef Map< Data, KeySet > RevPtsMap
Public Types inherited from SVF::PTData< Key, KeySet, Data, DataSet >
enum  PTDataTy {
  Base , MutBase , Diff , MutDiff ,
  DataFlow , MutDataFlow , MutIncDataFlow , Versioned ,
  MutVersioned , PersBase , PersDiff , PersDataFlow ,
  PersIncDataFlow , PersVersioned
}
 Types of a points-to data structures. More...

Public Member Functions

 PersistentPTData (PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=PTDataTy::PersBase)
 Constructor.
 ~PersistentPTData () override=default
void clear () override
 Clears all points-to sets as if nothing is stored.
const DataSet & getPts (const Key &var) override
 Get points-to set of var.
const KeySet & getRevPts (const Data &data) override
 Get reverse points-to set of a datum.
bool addPts (const Key &dstKey, const Data &element) override
 Adds element to the points-to set associated with var.
bool unionPts (const Key &dstKey, const Key &srcKey) override
 Performs pts(dstVar) = pts(dstVar) U pts(srcVar).
bool unionPts (const Key &dstKey, const DataSet &srcData) override
 Performs pts(dstVar) = pts(dstVar) U srcDataSet.
void dumpPTData () override
 Dump stored keys and points-to sets.
void clearPts (const Key &var, const Data &element) override
 Clears element from the points-to set of var.
void clearFullPts (const Key &var) override
 Fully clears the points-to set of var.
void remapAllPts () override
 Remaps all points-to sets to use the current mapping.
Map< DataSet, unsigned > getAllPts (bool liveOnly) const override
Public Member Functions inherited from SVF::PTData< Key, KeySet, Data, DataSet >
 PTData (bool reversePT=true, PTDataTy ty=PTDataTy::Base)
virtual ~PTData ()
PTDataTy getPTDTY () const
 Get the type of points-to data structure that this is.
bool hasReversePts () const
 Whether we maintain reverse points-to sets.

Static Public Member Functions

static bool classof (const PersistentPTData< Key, KeySet, Data, DataSet > *)
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)

Protected Attributes

PersistentPointsToCache< DataSet > & ptCache
KeyToIDMap ptsMap
RevPtsMap revPtsMap
Protected Attributes inherited from SVF::PTData< Key, KeySet, Data, DataSet >
bool rev
 Whether we maintain reverse points-to sets or not.
PTDataTy ptdTy

Private Member Functions

bool unionPtsFromId (const Key &dstKey, PointsToID srcId)
void clearSingleRevPts (KeySet &revSet, const Key &k)
void clearRevPts (const DataSet &pts, const Key &k)

Friends

template<typename K, typename KS, typename D, typename DS, typename VK, typename VKS>
class PersistentVersionedPTData
class PersistentDFPTData< Key, KeySet, Data, DataSet >
class PersistentIncDFPTData< Key, KeySet, Data, DataSet >

Detailed Description

template<typename Key, typename KeySet, typename Data, typename DataSet>
class SVF::PersistentPTData< Key, KeySet, Data, DataSet >

PTData backed by a PersistentPointsToCache.

Definition at line 33 of file PersistentPointsToDS.h.

Member Typedef Documentation

◆ BasePTData

template<typename Key, typename KeySet, typename Data, typename DataSet>
typedef PTData<Key, KeySet, Data, DataSet> SVF::PersistentPTData< Key, KeySet, Data, DataSet >::BasePTData

Definition at line 40 of file PersistentPointsToDS.h.

◆ KeyToIDMap

template<typename Key, typename KeySet, typename Data, typename DataSet>
typedef Map<Key, PointsToID> SVF::PersistentPTData< Key, KeySet, Data, DataSet >::KeyToIDMap

Definition at line 43 of file PersistentPointsToDS.h.

◆ PTDataTy

template<typename Key, typename KeySet, typename Data, typename DataSet>
typedef BasePTData::PTDataTy SVF::PersistentPTData< Key, KeySet, Data, DataSet >::PTDataTy

Definition at line 41 of file PersistentPointsToDS.h.

◆ RevPtsMap

template<typename Key, typename KeySet, typename Data, typename DataSet>
typedef Map<Data, KeySet> SVF::PersistentPTData< Key, KeySet, Data, DataSet >::RevPtsMap

Definition at line 44 of file PersistentPointsToDS.h.

Constructor & Destructor Documentation

◆ PersistentPTData()

template<typename Key, typename KeySet, typename Data, typename DataSet>
SVF::PersistentPTData< Key, KeySet, Data, DataSet >::PersistentPTData ( PersistentPointsToCache< DataSet > & cache,
bool reversePT = true,
PTDataTy ty = PTDataTy::PersBase )
inlineexplicit

Constructor.

Definition at line 47 of file PersistentPointsToDS.h.

PTData backed by a PersistentPointsToCache.
PersistentPointsToCache< DataSet > & ptCache
PTData< Key, KeySet, Data, DataSet > BasePTData

◆ ~PersistentPTData()

template<typename Key, typename KeySet, typename Data, typename DataSet>
SVF::PersistentPTData< Key, KeySet, Data, DataSet >::~PersistentPTData ( )
overridedefault

Member Function Documentation

◆ addPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::addPts ( const Key & var,
const Data & element )
inlineoverridevirtual

Adds element to the points-to set associated with var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 70 of file PersistentPointsToDS.h.

71 {
73 srcPts.set(element);
74 PointsToID srcId = ptCache.emplacePts(srcPts);
76 }
bool unionPtsFromId(const Key &dstKey, PointsToID srcId)

◆ classof() [1/2]

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::classof ( const PersistentPTData< Key, KeySet, Data, DataSet > * )
inlinestatic

Methods to support type inquiry through isa, cast, and dyn_cast:

Definition at line 139 of file PersistentPointsToDS.h.

140 {
141 return true;
142 }

◆ classof() [2/2]

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::classof ( const PTData< Key, KeySet, Data, DataSet > * ptd)
inlinestatic

Definition at line 144 of file PersistentPointsToDS.h.

145 {
146 return ptd->getPTDTY() == PTDataTy::PersBase;
147 }
PTDataTy getPTDTY() const
Get the type of points-to data structure that this is.

◆ clear()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::clear ( )
inlineoverridevirtual

Clears all points-to sets as if nothing is stored.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 52 of file PersistentPointsToDS.h.

53 {
54 ptsMap.clear();
55 revPtsMap.clear();
56 }

◆ clearFullPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::clearFullPts ( const Key & var)
inlineoverridevirtual

Fully clears the points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 108 of file PersistentPointsToDS.h.

109 {
112 }
const DataSet & getPts(const Key &var) override
Get points-to set of var.
void clearRevPts(const DataSet &pts, const Key &k)
static PointsToID emptyPointsToId(void)

◆ clearPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::clearPts ( const Key & var,
const Data & element )
inlineoverridevirtual

Clears element from the points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 94 of file PersistentPointsToDS.h.

95 {
101 if (varId != complementId)
102 {
105 }
106 }
void clearSingleRevPts(KeySet &revSet, const Key &k)

◆ clearRevPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::clearRevPts ( const DataSet & pts,
const Key & k )
inlineprivate

Definition at line 183 of file PersistentPointsToDS.h.

184 {
185 if (this->rev)
186 {
187 for (const Data &d : pts) clearSingleRevPts(revPtsMap[d], k);
188 }
189 }
bool rev
Whether we maintain reverse points-to sets or not.

◆ clearSingleRevPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::clearSingleRevPts ( KeySet & revSet,
const Key & k )
inlineprivate

Definition at line 175 of file PersistentPointsToDS.h.

176 {
177 if (this->rev)
178 {
180 }
181 }
void removeKey(const Key &key, KeySet &keySet)
Removes an element from a Set/CondSet (or anything implementing erase).
Definition SVFUtil.h:253

◆ dumpPTData()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::dumpPTData ( )
inlineoverridevirtual

Dump stored keys and points-to sets.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 90 of file PersistentPointsToDS.h.

91 {
92 }

◆ getAllPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
Map< DataSet, unsigned > SVF::PersistentPTData< Key, KeySet, Data, DataSet >::getAllPts ( bool liveOnly) const
inlineoverridevirtual

Returns a mapping of points-to sets to the number of times they are stored. liveOnly indicates whether to include only points-to sets which correspond to a variable (matters when dealing with non-GC persistent PT).

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 119 of file PersistentPointsToDS.h.

120 {
122 if (liveOnly)
123 {
124 for (const typename KeyToIDMap::value_type &ki : ptsMap)
125 {
126 ++allPts[ptCache.getActualPts(ki.second)];
127 }
128 }
129 else
130 {
131 allPts = ptCache.getAllPts();
132 }
133
134 return allPts;
135 }

◆ getPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
const DataSet & SVF::PersistentPTData< Key, KeySet, Data, DataSet >::getPts ( const Key & var)
inlineoverridevirtual

Get points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 58 of file PersistentPointsToDS.h.

59 {
60 PointsToID id = ptsMap[var];
61 return ptCache.getActualPts(id);
62 }

◆ getRevPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
const KeySet & SVF::PersistentPTData< Key, KeySet, Data, DataSet >::getRevPts ( const Data & datum)
inlineoverridevirtual

Get reverse points-to set of a datum.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 64 of file PersistentPointsToDS.h.

65 {
66 assert(this->rev && "PersistentPTData::getRevPts: constructed without reverse PT support!");
67 return revPtsMap[data];
68 }

◆ remapAllPts()

template<typename Key, typename KeySet, typename Data, typename DataSet>
void SVF::PersistentPTData< Key, KeySet, Data, DataSet >::remapAllPts ( )
inlineoverridevirtual

Remaps all points-to sets to use the current mapping.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 114 of file PersistentPointsToDS.h.

115 {
116 ptCache.remapAllPts();
117 }

◆ unionPts() [1/2]

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::unionPts ( const Key & dstVar,
const DataSet & srcDataSet )
inlineoverridevirtual

Performs pts(dstVar) = pts(dstVar) U srcDataSet.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 84 of file PersistentPointsToDS.h.

85 {
86 PointsToID srcId = ptCache.emplacePts(srcData);
88 }

◆ unionPts() [2/2]

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::unionPts ( const Key & dstVar,
const Key & srcVar )
inlineoverridevirtual

Performs pts(dstVar) = pts(dstVar) U pts(srcVar).

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 78 of file PersistentPointsToDS.h.

79 {
82 }

◆ unionPtsFromId()

template<typename Key, typename KeySet, typename Data, typename DataSet>
bool SVF::PersistentPTData< Key, KeySet, Data, DataSet >::unionPtsFromId ( const Key & dstKey,
PointsToID srcId )
inlineprivate

Internal unionPts since other methods follow the same pattern. Renamed because PointsToID and Key may be the same type...

Definition at line 153 of file PersistentPointsToDS.h.

154 {
157
158 bool changed = newDstId != dstId;
159 if (changed)
160 {
162
163 // Reverse points-to only needs to be handled when dst's
164 // points-to set has changed (i.e., do it the first time only).
165 if (this->rev)
166 {
167 const DataSet &srcPts = ptCache.getActualPts(srcId);
168 for (const Data &d : srcPts) SVFUtil::insertKey(dstKey, revPtsMap[d]);
169 }
170 }
171
172 return changed;
173 }
void insertKey(const Key &key, KeySet &keySet)
Inserts an element into a Set/CondSet (with insert).
Definition SVFUtil.h:240

◆ PersistentDFPTData< Key, KeySet, Data, DataSet >

template<typename Key, typename KeySet, typename Data, typename DataSet>
friend class PersistentDFPTData< Key, KeySet, Data, DataSet >
friend

Definition at line 36 of file PersistentPointsToDS.h.

◆ PersistentIncDFPTData< Key, KeySet, Data, DataSet >

template<typename Key, typename KeySet, typename Data, typename DataSet>
friend class PersistentIncDFPTData< Key, KeySet, Data, DataSet >
friend

Definition at line 36 of file PersistentPointsToDS.h.

◆ PersistentVersionedPTData

template<typename Key, typename KeySet, typename Data, typename DataSet>
template<typename K, typename KS, typename D, typename DS, typename VK, typename VKS>
friend class PersistentVersionedPTData
friend

Definition at line 36 of file PersistentPointsToDS.h.

Member Data Documentation

◆ ptCache

template<typename Key, typename KeySet, typename Data, typename DataSet>
PersistentPointsToCache<DataSet>& SVF::PersistentPTData< Key, KeySet, Data, DataSet >::ptCache
protected

Definition at line 192 of file PersistentPointsToDS.h.

◆ ptsMap

template<typename Key, typename KeySet, typename Data, typename DataSet>
KeyToIDMap SVF::PersistentPTData< Key, KeySet, Data, DataSet >::ptsMap
protected

Definition at line 193 of file PersistentPointsToDS.h.

◆ revPtsMap

template<typename Key, typename KeySet, typename Data, typename DataSet>
RevPtsMap SVF::PersistentPTData< Key, KeySet, Data, DataSet >::revPtsMap
protected

Definition at line 194 of file PersistentPointsToDS.h.


The documentation for this class was generated from the following file: