Static Value-Flow Analysis
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
SVF::CallPE Class Reference

#include <SVFStatements.h>

Inheritance diagram for SVF::CallPE:
SVF::MultiOpndStmt SVF::SVFStmt SVF::GenericEdge< NodeTy > SVF::TDForkPE

Public Types

typedef std::vector< const CallICFGNode * > CallICFGNodeVec
 
- Public Types inherited from SVF::MultiOpndStmt
typedef std::vector< ValVar * > OPVars
 
- Public Types inherited from SVF::SVFStmt
enum  PEDGEK {
  Addr , Copy , Store , Load ,
  Call , Ret , Gep , Phi ,
  Select , Cmp , BinaryOp , UnaryOp ,
  Branch , ThreadFork , ThreadJoin
}
 
typedef GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy
 
typedef Map< EdgeID, SVFStmtSetTyPAGEdgeToSetMapTy
 
typedef PAGEdgeToSetMapTy KindToSVFStmtMapTy
 
typedef SVFStmtSetTy PAGEdgeSetTy
 
- Public Types inherited from SVF::GenericEdge< NodeTy >
typedef NodeTy NodeType
 Node type.
 
typedef u64_t GEdgeFlag
 
typedef s64_t GEdgeKind
 
typedef struct SVF::GenericEdge::equalGEdge equalGEdge
 Add the hash function for std::set (we also can overload operator< to implement this)
 

Public Member Functions

 CallPE (ValVar *res, const OPVars &opnds, const CallICFGNodeVec &icfgNodes, const FunEntryICFGNode *e, GEdgeKind k=SVFStmt::Call)
 constructor
 
void addOpVar (ValVar *op, const CallICFGNode *call)
 Add an operand (actual param) from a call site.
 
const CallICFGNodegetOpCallICFGNode (u32_t op_idx) const
 Return the CallICFGNode of the i-th operand.
 
const CallICFGNodeVecgetOpCallICFGNodes () const
 Return all call site ICFGNodes.
 
const FunEntryICFGNodegetFunEntryICFGNode () const
 Return the function entry node.
 
virtual const std::string toString () const override
 
- Public Member Functions inherited from SVF::MultiOpndStmt
const ValVargetOpVar (u32_t pos) const
 Operand SVFVars.
 
const ValVargetRes () const
 Result SVFVar.
 
NodeID getOpVarID (u32_t pos) const
 
NodeID getResID () const
 
u32_t getOpVarNum () const
 
const OPVarsgetOpndVars () const
 
OPVars::const_iterator opVarBegin () const
 
OPVars::const_iterator opVerEnd () const
 
- Public Member Functions inherited from SVF::SVFStmt
 SVFStmt (SVFVar *s, SVFVar *d, GEdgeFlag k, bool real=true)
 Constructor.
 
 ~SVFStmt ()
 Destructor.
 
EdgeID getEdgeID () const
 Return Edge ID.
 
virtual bool isPTAEdge () const
 Whether src and dst nodes are both of pointer type.
 
void setValue (const SVFVar *val)
 Get/set methods for llvm instruction.
 
const SVFVargetValue () const
 
void setBB (const SVFBasicBlock *bb)
 
const SVFBasicBlockgetBB () const
 
void setICFGNode (ICFGNode *node)
 
ICFGNodegetICFGNode () const
 
- Public Member Functions inherited from SVF::GenericEdge< NodeTy >
 GenericEdge (NodeTy *s, NodeTy *d, GEdgeFlag k)
 Constructor.
 
virtual ~GenericEdge ()
 Destructor.
 
NodeID getSrcID () const
 get methods of the components
 
NodeID getDstID () const
 
GEdgeKind getEdgeKind () const
 
GEdgeKind getEdgeKindWithoutMask () const
 
NodeTypegetSrcNode () const
 
NodeTypegetDstNode () const
 
virtual bool operator== (const GenericEdge< NodeType > *rhs) const
 

Static Public Member Functions

static bool classof (const CallPE *)
 the function entry node
 
static bool classof (const SVFStmt *edge)
 
static bool classof (const GenericPAGEdgeTy *edge)
 
- Static Public Member Functions inherited from SVF::MultiOpndStmt
static bool classof (const MultiOpndStmt *)
 Methods for support type inquiry through isa, cast, and dyn_cast:
 
static bool classof (const SVFStmt *node)
 
static bool classof (const GenericPAGEdgeTy *node)
 
- Static Public Member Functions inherited from SVF::SVFStmt
static bool classof (const SVFStmt *)
 ClassOf.
 
static bool classof (const GenericPAGEdgeTy *edge)
 
static GEdgeFlag makeEdgeFlagWithAddionalOpnd (GEdgeKind k, const SVFVar *var)
 
static GEdgeFlag makeEdgeFlagWithCallInst (GEdgeKind k, const ICFGNode *cs)
 
static GEdgeFlag makeEdgeFlagWithStoreInst (GEdgeKind k, const ICFGNode *store)
 
static const Inst2LabelMapgetInst2LabelMap ()
 
static const Var2LabelMapgetVar2LabelMap ()
 
static const u64_tgetCallEdgeLabelCounter ()
 
static const u64_tgetStoreEdgeLabelCounter ()
 
static const u64_tgetMultiOpndLabelCounter ()
 

Private Member Functions

 CallPE (const CallPE &)
 place holder
 
void operator= (const CallPE &)
 place holder
 

Private Attributes

CallICFGNodeVec opCallICFGNodes
 
const FunEntryICFGNodeentry
 each operand's call site
 

Friends

class GraphDBClient
 

Additional Inherited Members

- Protected Member Functions inherited from SVF::MultiOpndStmt
 MultiOpndStmt (ValVar *r, const OPVars &opnds, GEdgeFlag k)
 Constructor, only used by subclasses but not external users.
 
- Protected Member Functions inherited from SVF::SVFStmt
 SVFStmt (GEdgeFlag k)
 Private constructor for reading SVFIR from file without side-effect.
 
 SVFStmt (SVFVar *s, SVFVar *d, GEdgeFlag k, EdgeID eid, SVFVar *value, ICFGNode *icfgNode, bool real=true)
 
void setBasicBlock (const SVFBasicBlock *bb)
 
void setCallEdgeLabelCounter (u64_t counter)
 
void setStoreEdgeLabelCounter (u64_t counter)
 
void setMultiOpndLabelCounter (u64_t counter)
 
- Static Protected Member Functions inherited from SVF::SVFStmt
static void addInst2Labeled (const ICFGNode *cs, u32_t label)
 
static void addVar2Labeled (const SVFVar *var, u32_t label)
 
- Protected Attributes inherited from SVF::MultiOpndStmt
OPVars opVars
 
- Static Protected Attributes inherited from SVF::GenericEdge< NodeTy >
static constexpr unsigned char EdgeKindMaskBits = 8
 We use the lower 8 bits to denote edge kind.
 
static constexpr u64_t EdgeKindMask = (~0ULL) >> (64 - EdgeKindMaskBits)
 

Detailed Description

Call CallPE is a phi-like statement at function entry that merges actual parameters from all call sites into the formal parameter. e.g., formal_param = CallPE(actual1@callsite1, actual2@callsite2, ...)

Definition at line 837 of file SVFStatements.h.

Member Typedef Documentation

◆ CallICFGNodeVec

Definition at line 842 of file SVFStatements.h.

Constructor & Destructor Documentation

◆ CallPE() [1/2]

SVF::CallPE::CallPE ( const CallPE )
private

place holder

◆ CallPE() [2/2]

CallPE::CallPE ( ValVar res,
const OPVars opnds,
const CallICFGNodeVec icfgNodes,
const FunEntryICFGNode e,
GEdgeKind  k = SVFStmt::Call 
)

constructor

Definition at line 503 of file SVFStatements.cpp.

507 : MultiOpndStmt(res, opnds,
509 opCallICFGNodes(icfgNodes), entry(e)
510{
511 assert(opnds.size() == icfgNodes.size() &&
512 "Numbers of operands and their CallICFGNodes are not consistent?");
513}
CallICFGNodeVec opCallICFGNodes
const FunEntryICFGNode * entry
each operand's call site
MultiOpndStmt()
place holder
static GEdgeFlag makeEdgeFlagWithAddionalOpnd(GEdgeKind k, const SVFVar *var)
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76

Member Function Documentation

◆ addOpVar()

void SVF::CallPE::addOpVar ( ValVar op,
const CallICFGNode call 
)
inline

Add an operand (actual param) from a call site.

Definition at line 877 of file SVFStatements.h.

878 {
879 opVars.push_back(op);
880 opCallICFGNodes.push_back(call);
881 assert(opVars.size() == opCallICFGNodes.size() &&
882 "Numbers of operands and their CallICFGNodes are not consistent?");
883 }

◆ classof() [1/3]

static bool SVF::CallPE::classof ( const CallPE )
inlinestatic

the function entry node

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

Definition at line 854 of file SVFStatements.h.

855 {
856 return true;
857 }

◆ classof() [2/3]

static bool SVF::CallPE::classof ( const GenericPAGEdgeTy edge)
inlinestatic

Definition at line 863 of file SVFStatements.h.

864 {
865 return edge->getEdgeKind() == SVFStmt::Call ||
866 edge->getEdgeKind() == SVFStmt::ThreadFork;
867 }

◆ classof() [3/3]

static bool SVF::CallPE::classof ( const SVFStmt edge)
inlinestatic

Definition at line 858 of file SVFStatements.h.

859 {
860 return edge->getEdgeKind() == SVFStmt::Call ||
861 edge->getEdgeKind() == SVFStmt::ThreadFork;
862 }

◆ getFunEntryICFGNode()

const FunEntryICFGNode * SVF::CallPE::getFunEntryICFGNode ( ) const
inline

Return the function entry node.

Definition at line 898 of file SVFStatements.h.

899 {
900 return entry;
901 }

◆ getOpCallICFGNode()

const CallICFGNode * SVF::CallPE::getOpCallICFGNode ( u32_t  op_idx) const
inline

Return the CallICFGNode of the i-th operand.

Definition at line 886 of file SVFStatements.h.

887 {
888 return opCallICFGNodes.at(op_idx);
889 }

◆ getOpCallICFGNodes()

const CallICFGNodeVec & SVF::CallPE::getOpCallICFGNodes ( ) const
inline

Return all call site ICFGNodes.

Definition at line 892 of file SVFStatements.h.

893 {
894 return opCallICFGNodes;
895 }

◆ operator=()

void SVF::CallPE::operator= ( const CallPE )
private

place holder

◆ toString()

const std::string CallPE::toString ( ) const
overridevirtual

Reimplemented from SVF::SVFStmt.

Reimplemented in SVF::TDForkPE.

Definition at line 241 of file SVFStatements.cpp.

242{
243 std::string str;
244 std::stringstream rawstr(str);
245 rawstr << "CallPE: [Var" << getResID() << " <-- (";
246 for (u32_t i = 0; i < getOpVarNum(); i++)
247 {
248 rawstr << "[Var" << getOpVarID(i) << ", ICFGNode" << getOpCallICFGNode(i)->getId() << "]";
249 if (i + 1 < getOpVarNum())
250 rawstr << ", ";
251 }
252 rawstr << ")] ";
254 {
255 rawstr << "\n";
256 rawstr << getValue()->toString();
257 }
258 return rawstr.str();
259}
unsigned u32_t
Definition CommandLine.h:18
const CallICFGNode * getOpCallICFGNode(u32_t op_idx) const
Return the CallICFGNode of the i-th operand.
NodeID getOpVarID(u32_t pos) const
NodeID getResID() const
u32_t getOpVarNum() const
static const Option< bool > ShowSVFIRValue
Definition Options.h:119
const SVFVar * getValue() const
NodeID getId() const
Get ID.
Definition SVFValue.h:163
virtual const std::string toString() const
Get string representation.

Friends And Related Symbol Documentation

◆ GraphDBClient

friend class GraphDBClient
friend

Definition at line 839 of file SVFStatements.h.

Member Data Documentation

◆ entry

const FunEntryICFGNode* SVF::CallPE::entry
private

each operand's call site

Definition at line 849 of file SVFStatements.h.

◆ opCallICFGNodes

CallICFGNodeVec SVF::CallPE::opCallICFGNodes
private

Definition at line 848 of file SVFStatements.h.


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