Static Value-Flow Analysis
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet > Class Template Reference

Incremental version of the mutable data-flow points-to data structure. More...

#include <MutablePointsToDS.h>

Inheritance diagram for SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >:
SVF::MutableDFPTData< Key, KeySet, Data, DataSet > SVF::DFPTData< Key, KeySet, Data, DataSet > SVF::PTData< Key, KeySet, Data, DataSet >

Public Types

typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef MutablePTData< Key, KeySet, Data, DataSet > BaseMutPTData
 
typedef DFPTData< Key, KeySet, Data, DataSet > BaseDFPTData
 
typedef MutableDFPTData< Key, KeySet, Data, DataSet > BaseMutDFPTData
 
typedef BasePTData::PTDataTy PTDataTy
 
typedef BaseDFPTData::LocID LocID
 
typedef Map< LocID, DataSet > UpdatedVarMap
 for propagating only newly added variable in IN/OUT set More...
 
typedef UpdatedVarMap::iterator UpdatedVarMapIter
 
typedef UpdatedVarMap::const_iterator UpdatedVarconstIter
 
typedef DataSet::iterator DataIter
 
- Public Types inherited from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >
typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef MutablePTData< Key, KeySet, Data, DataSet > BaseMutPTData
 
typedef DFPTData< Key, KeySet, Data, DataSet > BaseDFPTData
 
typedef BasePTData::PTDataTy PTDataTy
 
typedef BaseDFPTData::LocID LocID
 
typedef BaseMutPTData::PtsMap PtsMap
 
typedef BaseMutPTData::PtsMapConstIter PtsMapConstIter
 
typedef Map< LocID, PtsMapDFPtsMap
 Data-flow point-to map. More...
 
typedef DFPtsMap::iterator DFPtsMapIter
 
typedef DFPtsMap::const_iterator DFPtsMapconstIter
 
- Public Types inherited from SVF::DFPTData< Key, KeySet, Data, DataSet >
typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef BasePTData::PTDataTy PTDataTy
 
typedef NodeID LocID
 
- 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

 MutableIncDFPTData (bool reversePT=true, PTDataTy ty=BasePTData::MutIncDataFlow)
 Constructor. More...
 
virtual ~MutableIncDFPTData ()
 
virtual bool updateDFInFromIn (LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 
virtual bool updateDFInFromOut (LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 Union (IN[dstLoc:dstVar], OUT[srcLoc:srcVar]). More...
 
virtual bool updateDFOutFromIn (LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]). More...
 
virtual bool updateAllDFInFromOut (LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 Union (IN[dstLoc::dstVar], OUT[srcLoc:srcVar]. There is no flag check, unlike the above. More...
 
virtual bool updateAllDFInFromIn (LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 Union (IN[dstLoc::dstVar], IN[srcLoc:srcVar]. There is no flag check, unlike the above. More...
 
virtual bool updateAllDFOutFromIn (LocID loc, const Key &singleton, bool strongUpdates) override
 For each variable var in IN at loc, do updateDFOutFromIn(loc, var, loc, var). More...
 
virtual bool updateTLVPts (LocID srcLoc, const Key &srcVar, const Key &dstVar) override
 Update points-to set of top-level pointers with IN[srcLoc:srcVar]. More...
 
virtual bool updateATVPts (const Key &srcVar, LocID dstLoc, const Key &dstVar) override
 Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers. More...
 
virtual void clearAllDFOutUpdatedVar (LocID loc) override
 
- Public Member Functions inherited from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >
 MutableDFPTData (bool reversePT=true, PTDataTy ty=BaseDFPTData::MutDataFlow)
 Constructor. More...
 
virtual ~MutableDFPTData ()
 
virtual const PtsMapgetPtsMap () const
 
virtual void clear () override
 Clears all points-to sets as if nothing is stored. More...
 
virtual const DataSet & getPts (const Key &var) override
 Get points-to set of var. More...
 
virtual const KeySet & getRevPts (const Data &datum) override
 Get reverse points-to set of a datum. More...
 
virtual bool hasDFInSet (LocID loc) const override
 
virtual bool hasDFOutSet (LocID loc) const override
 
virtual bool hasDFInSet (LocID loc, const Key &var) const override
 
virtual bool hasDFOutSet (LocID loc, const Key &var) const override
 
virtual DataSet & getDFInPtsSet (LocID loc, const Key &var) override
 
virtual DataSet & getDFOutPtsSet (LocID loc, const Key &var) override
 
virtual Map< DataSet, unsigned > getAllPts (bool liveOnly) const override
 
const PtsMapgetDFInPtsMap (LocID loc)
 
const PtsMapgetDFOutPtsMap (LocID loc)
 
const DFPtsMapgetDFIn ()
 
const DFPtsMapgetDFOut ()
 
virtual bool addPts (const Key &dstKey, const Key &srcKey) override
 
virtual bool unionPts (const Key &dstKey, const Key &srcKey) override
 Performs pts(dstVar) = pts(dstVar) U pts(srcVar). More...
 
virtual bool unionPts (const Key &dstKey, const DataSet &srcDataSet) override
 Performs pts(dstVar) = pts(dstVar) U srcDataSet. More...
 
virtual void clearPts (const Key &var, const Data &element) override
 Clears element from the points-to set of var. More...
 
virtual void clearFullPts (const Key &var) override
 Fully clears the points-to set of var. More...
 
virtual void remapAllPts (void) override
 Remaps all points-to sets to use the current mapping. More...
 
virtual void dumpPTData () override
 
virtual void dumpPts (const PtsMap &ptsSet, OutStream &O=SVFUtil::outs()) const
 
- Public Member Functions inherited from SVF::DFPTData< Key, KeySet, Data, DataSet >
 DFPTData (bool reversePT=true, PTDataTy ty=BasePTData::DataFlow)
 Constructor. More...
 
virtual ~DFPTData ()
 
- 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. More...
 
virtual bool addPts (const Key &var, const Data &element)=0
 Adds element to the points-to set associated with var. More...
 

Static Public Member Functions

static bool classof (const MutableIncDFPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 
- Static Public Member Functions inherited from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >
static bool classof (const MutableDFPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 
- Static Public Member Functions inherited from SVF::DFPTData< Key, KeySet, Data, DataSet >
static bool classof (const DFPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 

Private Member Functions

void setVarDFInSetUpdated (LocID loc, const Key &var)
 Handle address-taken variables whose IN pts changed. More...
 
void removeVarFromDFInUpdatedSet (LocID loc, const Key &var)
 Remove var from loc's IN updated set. More...
 
bool varHasNewDFInPts (LocID loc, const Key &var)
 Return TRUE if var has new pts in loc's IN set. More...
 
const DataSet & getDFInUpdatedVar (LocID loc)
 Get all var which have new pts information in loc's IN set. More...
 
void setVarDFOutSetUpdated (LocID loc, const Key &var)
 Handle address-taken variables whose OUT pts changed. More...
 
void removeVarFromDFOutUpdatedSet (LocID loc, const Key &var)
 Remove var from loc's OUT updated set. More...
 
bool varHasNewDFOutPts (LocID loc, const Key &var)
 Return TRUE if var has new pts in loc's OUT set. More...
 
const DataSet & getDFOutUpdatedVar (LocID loc)
 Get all var which have new pts information in loc's OUT set. More...
 

Private Attributes

UpdatedVarMap outUpdatedVarMap
 
UpdatedVarMap inUpdatedVarMap
 

Additional Inherited Members

- Protected Member Functions inherited from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >
bool unionPts (DataSet &dstDataSet, const DataSet &srcDataSet)
 
bool addPts (DataSet &d, const Data &e)
 
- Protected Attributes inherited from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >
DFPtsMap dfInPtsMap
 Data-flow IN set. More...
 
DFPtsMap dfOutPtsMap
 Data-flow OUT set. More...
 
MutablePTData< Key, KeySet, Data, DataSet > mutPTData
 
- Protected Attributes inherited from SVF::PTData< Key, KeySet, Data, DataSet >
bool rev
 Whether we maintain reverse points-to sets or not. More...
 
PTDataTy ptdTy
 

Detailed Description

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

Incremental version of the mutable data-flow points-to data structure.

Definition at line 682 of file MutablePointsToDS.h.

Member Typedef Documentation

◆ BaseDFPTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef DFPTData<Key, KeySet, Data, DataSet> SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::BaseDFPTData

Definition at line 687 of file MutablePointsToDS.h.

◆ BaseMutDFPTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef MutableDFPTData<Key, KeySet, Data, DataSet> SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::BaseMutDFPTData

Definition at line 688 of file MutablePointsToDS.h.

◆ BaseMutPTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef MutablePTData<Key, KeySet, Data, DataSet> SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::BaseMutPTData

Definition at line 686 of file MutablePointsToDS.h.

◆ BasePTData

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

Definition at line 685 of file MutablePointsToDS.h.

◆ DataIter

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef DataSet::iterator SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::DataIter

Definition at line 695 of file MutablePointsToDS.h.

◆ LocID

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef BaseDFPTData::LocID SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::LocID

Definition at line 691 of file MutablePointsToDS.h.

◆ PTDataTy

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

Definition at line 689 of file MutablePointsToDS.h.

◆ UpdatedVarconstIter

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef UpdatedVarMap::const_iterator SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::UpdatedVarconstIter

Definition at line 694 of file MutablePointsToDS.h.

◆ UpdatedVarMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef Map<LocID, DataSet> SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::UpdatedVarMap

for propagating only newly added variable in IN/OUT set

Definition at line 692 of file MutablePointsToDS.h.

◆ UpdatedVarMapIter

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef UpdatedVarMap::iterator SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::UpdatedVarMapIter

Definition at line 693 of file MutablePointsToDS.h.

Constructor & Destructor Documentation

◆ MutableIncDFPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::MutableIncDFPTData ( bool  reversePT = true,
PTDataTy  ty = BasePTData::MutIncDataFlow 
)
inline

Constructor.

Definition at line 703 of file MutablePointsToDS.h.

703 : BaseMutDFPTData(reversePT, ty) { }
MutableDFPTData< Key, KeySet, Data, DataSet > BaseMutDFPTData

◆ ~MutableIncDFPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::~MutableIncDFPTData ( )
inlinevirtual

Definition at line 705 of file MutablePointsToDS.h.

705 { }

Member Function Documentation

◆ classof() [1/2]

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

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

Definition at line 818 of file MutablePointsToDS.h.

819  {
820  return true;
821  }

◆ classof() [2/2]

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

Definition at line 823 of file MutablePointsToDS.h.

824  {
825  return ptd->getPTDTY() == BasePTData::MutIncDataFlow;
826  }

◆ clearAllDFOutUpdatedVar()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::clearAllDFOutUpdatedVar ( LocID  loc)
inlineoverridevirtual

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 803 of file MutablePointsToDS.h.

804  {
805  if (this->hasDFOutSet(loc))
806  {
807  DataSet pts = getDFOutUpdatedVar(loc);
808  for (DataIter ptsIt = pts.begin(), ptsEit = pts.end(); ptsIt != ptsEit; ++ptsIt)
809  {
810  const Key var = *ptsIt;
812  }
813  }
814  }
virtual bool hasDFOutSet(LocID loc) const override
DataSet::iterator DataIter
void removeVarFromDFOutUpdatedSet(LocID loc, const Key &var)
Remove var from loc's OUT updated set.
const DataSet & getDFOutUpdatedVar(LocID loc)
Get all var which have new pts information in loc's OUT set.

◆ getDFInUpdatedVar()

template<typename Key , typename KeySet , typename Data , typename DataSet >
const DataSet& SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::getDFInUpdatedVar ( LocID  loc)
inlineprivate

Get all var which have new pts information in loc's IN set.

Definition at line 852 of file MutablePointsToDS.h.

853  {
854  return inUpdatedVarMap[loc];
855  }

◆ getDFOutUpdatedVar()

template<typename Key , typename KeySet , typename Data , typename DataSet >
const DataSet& SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::getDFOutUpdatedVar ( LocID  loc)
inlineprivate

Get all var which have new pts information in loc's OUT set.

Definition at line 881 of file MutablePointsToDS.h.

882  {
883  return outUpdatedVarMap[loc];
884  }

◆ removeVarFromDFInUpdatedSet()

template<typename Key , typename KeySet , typename Data , typename DataSet >
void SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::removeVarFromDFInUpdatedSet ( LocID  loc,
const Key &  var 
)
inlineprivate

Remove var from loc's IN updated set.

Definition at line 837 of file MutablePointsToDS.h.

838  {
839  UpdatedVarMapIter it = inUpdatedVarMap.find(loc);
840  if (it != inUpdatedVarMap.end())
841  it->second.reset(var);
842  }
UpdatedVarMap::iterator UpdatedVarMapIter

◆ removeVarFromDFOutUpdatedSet()

template<typename Key , typename KeySet , typename Data , typename DataSet >
void SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::removeVarFromDFOutUpdatedSet ( LocID  loc,
const Key &  var 
)
inlineprivate

Remove var from loc's OUT updated set.

Definition at line 866 of file MutablePointsToDS.h.

867  {
868  UpdatedVarMapIter it = outUpdatedVarMap.find(loc);
869  if (it != outUpdatedVarMap.end())
870  it->second.reset(var);
871  }

◆ setVarDFInSetUpdated()

template<typename Key , typename KeySet , typename Data , typename DataSet >
void SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::setVarDFInSetUpdated ( LocID  loc,
const Key &  var 
)
inlineprivate

Handle address-taken variables whose IN pts changed.

Add var into loc's IN updated set. Called when var's pts in loc's IN set changed

Definition at line 832 of file MutablePointsToDS.h.

833  {
834  inUpdatedVarMap[loc].set(var);
835  }

◆ setVarDFOutSetUpdated()

template<typename Key , typename KeySet , typename Data , typename DataSet >
void SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::setVarDFOutSetUpdated ( LocID  loc,
const Key &  var 
)
inlineprivate

Handle address-taken variables whose OUT pts changed.

Add var into loc's OUT updated set. Called when var's pts in loc's OUT set changed

Definition at line 861 of file MutablePointsToDS.h.

862  {
863  outUpdatedVarMap[loc].set(var);
864  }

◆ updateAllDFInFromIn()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateAllDFInFromIn ( LocID  srcLoc,
const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Union (IN[dstLoc::dstVar], IN[srcLoc:srcVar]. There is no flag check, unlike the above.

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 753 of file MutablePointsToDS.h.

754  {
755  if(this->unionPts(this->getDFInPtsSet(dstLoc,dstVar), this->getDFInPtsSet(srcLoc,srcVar)))
756  {
757  setVarDFInSetUpdated(dstLoc,dstVar);
758  return true;
759  }
760  return false;
761  }
virtual DataSet & getDFInPtsSet(LocID loc, const Key &var) override
virtual bool unionPts(const Key &dstKey, const Key &srcKey) override
Performs pts(dstVar) = pts(dstVar) U pts(srcVar).
void setVarDFInSetUpdated(LocID loc, const Key &var)
Handle address-taken variables whose IN pts changed.

◆ updateAllDFInFromOut()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateAllDFInFromOut ( LocID  srcLoc,
const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Union (IN[dstLoc::dstVar], OUT[srcLoc:srcVar]. There is no flag check, unlike the above.

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 743 of file MutablePointsToDS.h.

744  {
745  if(this->unionPts(this->getDFInPtsSet(dstLoc,dstVar), this->getDFOutPtsSet(srcLoc,srcVar)))
746  {
747  setVarDFInSetUpdated(dstLoc,dstVar);
748  return true;
749  }
750  return false;
751  }
virtual DataSet & getDFOutPtsSet(LocID loc, const Key &var) override

◆ updateAllDFOutFromIn()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateAllDFOutFromIn ( LocID  loc,
const Key &  singleton,
bool  strongUpdates 
)
inlineoverridevirtual

For each variable var in IN at loc, do updateDFOutFromIn(loc, var, loc, var).

Only variables has new pts from IN set need to be updated.

Enable strong updates if it is required to do so

Only variables has new pts from IN set need to be updated.

Enable strong updates if it is required to do so

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 763 of file MutablePointsToDS.h.

764  {
765  bool changed = false;
766  if (this->hasDFInSet(loc))
767  {
769  DataSet pts = getDFInUpdatedVar(loc);
770  for (DataIter ptsIt = pts.begin(), ptsEit = pts.end(); ptsIt != ptsEit; ++ptsIt)
771  {
772  const Key var = *ptsIt;
774  if (strongUpdates && var == singleton)
775  continue;
776  if (updateDFOutFromIn(loc, var, loc, var))
777  changed = true;
778  }
779  }
780  return changed;
781  }
virtual bool hasDFInSet(LocID loc) const override
virtual bool updateDFOutFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override
Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]).
const DataSet & getDFInUpdatedVar(LocID loc)
Get all var which have new pts information in loc's IN set.

◆ updateATVPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateATVPts ( const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers.

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 793 of file MutablePointsToDS.h.

794  {
795  if (this->unionPts(this->getDFOutPtsSet(dstLoc, dstVar), this->mutPTData.getPts(srcVar)))
796  {
797  setVarDFOutSetUpdated(dstLoc, dstVar);
798  return true;
799  }
800  return false;
801  }
MutablePTData< Key, KeySet, Data, DataSet > mutPTData
void setVarDFOutSetUpdated(LocID loc, const Key &var)
Handle address-taken variables whose OUT pts changed.

◆ updateDFInFromIn()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateDFInFromIn ( LocID  srcLoc,
const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Update points-to for IN/OUT set IN[loc:var] represents the points-to of variable var in the IN set of location loc. union(ptsDst, ptsSrc) represents ptsDst = ptsDst U ptsSrc.

Union (IN[dstLoc:dstVar], IN[srcLoc:srcVar]).

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 707 of file MutablePointsToDS.h.

708  {
709  if(varHasNewDFInPts(srcLoc, srcVar) &&
710  this->unionPts(this->getDFInPtsSet(dstLoc,dstVar), this->getDFInPtsSet(srcLoc,srcVar)))
711  {
712  setVarDFInSetUpdated(dstLoc,dstVar);
713  return true;
714  }
715  return false;
716  }
bool varHasNewDFInPts(LocID loc, const Key &var)
Return TRUE if var has new pts in loc's IN set.

◆ updateDFInFromOut()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateDFInFromOut ( LocID  srcLoc,
const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Union (IN[dstLoc:dstVar], OUT[srcLoc:srcVar]).

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 718 of file MutablePointsToDS.h.

719  {
720  if(varHasNewDFOutPts(srcLoc, srcVar) &&
721  this->unionPts(this->getDFInPtsSet(dstLoc,dstVar), this->getDFOutPtsSet(srcLoc,srcVar)))
722  {
723  setVarDFInSetUpdated(dstLoc,dstVar);
724  return true;
725  }
726  return false;
727  }
bool varHasNewDFOutPts(LocID loc, const Key &var)
Return TRUE if var has new pts in loc's OUT set.

◆ updateDFOutFromIn()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateDFOutFromIn ( LocID  srcLoc,
const Key &  srcVar,
LocID  dstLoc,
const Key &  dstVar 
)
inlineoverridevirtual

Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]).

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 729 of file MutablePointsToDS.h.

730  {
731  if(varHasNewDFInPts(srcLoc,srcVar))
732  {
733  removeVarFromDFInUpdatedSet(srcLoc,srcVar);
734  if (this->unionPts(this->getDFOutPtsSet(dstLoc,dstVar), this->getDFInPtsSet(srcLoc,srcVar)))
735  {
736  setVarDFOutSetUpdated(dstLoc,dstVar);
737  return true;
738  }
739  }
740  return false;
741  }
void removeVarFromDFInUpdatedSet(LocID loc, const Key &var)
Remove var from loc's IN updated set.

◆ updateTLVPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::updateTLVPts ( LocID  srcLoc,
const Key &  srcVar,
const Key &  dstVar 
)
inlineoverridevirtual

Update points-to set of top-level pointers with IN[srcLoc:srcVar].

Reimplemented from SVF::MutableDFPTData< Key, KeySet, Data, DataSet >.

Definition at line 783 of file MutablePointsToDS.h.

784  {
785  if(varHasNewDFInPts(srcLoc,srcVar))
786  {
787  removeVarFromDFInUpdatedSet(srcLoc,srcVar);
788  return this->mutPTData.unionPts(dstVar, this->getDFInPtsSet(srcLoc,srcVar));
789  }
790  return false;
791  }

◆ varHasNewDFInPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::varHasNewDFInPts ( LocID  loc,
const Key &  var 
)
inlineprivate

Return TRUE if var has new pts in loc's IN set.

Definition at line 844 of file MutablePointsToDS.h.

845  {
846  UpdatedVarMapIter it = inUpdatedVarMap.find(loc);
847  if (it != inUpdatedVarMap.end())
848  return it->second.test(var);
849  return false;
850  }

◆ varHasNewDFOutPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
bool SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::varHasNewDFOutPts ( LocID  loc,
const Key &  var 
)
inlineprivate

Return TRUE if var has new pts in loc's OUT set.

Definition at line 873 of file MutablePointsToDS.h.

874  {
875  UpdatedVarMapIter it = outUpdatedVarMap.find(loc);
876  if (it != outUpdatedVarMap.end())
877  return it->second.test(var);
878  return false;
879  }

Member Data Documentation

◆ inUpdatedVarMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
UpdatedVarMap SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::inUpdatedVarMap
private

Definition at line 699 of file MutablePointsToDS.h.

◆ outUpdatedVarMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
UpdatedVarMap SVF::MutableIncDFPTData< Key, KeySet, Data, DataSet >::outUpdatedVarMap
private

Definition at line 698 of file MutablePointsToDS.h.


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