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, SVFStmtSetTy > PAGEdgeToSetMapTy
 
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 CallICFGNode * getOpCallICFGNode (u32_t op_idx) const
 Return the CallICFGNode of the i-th operand.
 
const CallICFGNodeVec & getOpCallICFGNodes () const
 Return all call site ICFGNodes.
 
const FunEntryICFGNode * getFunEntryICFGNode () const
 Return the function entry node.
 
virtual const std::string toString () const override
 
- Public Member Functions inherited from SVF::MultiOpndStmt
const ValVar * getOpVar (u32_t pos) const
 Operand SVFVars.
 
const ValVar * getRes () const
 Result SVFVar.
 
NodeID getOpVarID (u32_t pos) const
 
NodeID getResID () const
 
u32_t getOpVarNum () const
 
const OPVars & getOpndVars () 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 SVFVar * getValue () const
 
void setBB (const SVFBasicBlock *bb)
 
const SVFBasicBlock * getBB () const
 
void setICFGNode (ICFGNode *node)
 
ICFGNode * getICFGNode () 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
 
NodeType * getSrcNode () const
 
NodeType * getDstNode () 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 Inst2LabelMap * getInst2LabelMap ()
 
static const Var2LabelMap * getVar2LabelMap ()
 
static const u64_t * getCallEdgeLabelCounter ()
 
static const u64_t * getStoreEdgeLabelCounter ()
 
static const u64_t * getMultiOpndLabelCounter ()
 

Private Member Functions

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

Private Attributes

CallICFGNodeVec opCallICFGNodes
 
const FunEntryICFGNode * entry
 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 838 of file SVFStatements.h.

Member Typedef Documentation

◆ CallICFGNodeVec

Definition at line 843 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 878 of file SVFStatements.h.

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

◆ 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 855 of file SVFStatements.h.

856 {
857 return true;
858 }

◆ classof() [2/3]

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

Definition at line 864 of file SVFStatements.h.

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

◆ classof() [3/3]

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

Definition at line 859 of file SVFStatements.h.

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

◆ getFunEntryICFGNode()

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

Return the function entry node.

Definition at line 899 of file SVFStatements.h.

900 {
901 return entry;
902 }

◆ getOpCallICFGNode()

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

Return the CallICFGNode of the i-th operand.

Definition at line 887 of file SVFStatements.h.

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

◆ getOpCallICFGNodes()

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

Return all call site ICFGNodes.

Definition at line 893 of file SVFStatements.h.

894 {
895 return opCallICFGNodes;
896 }

◆ 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:158
virtual const std::string toString() const
Get string representation.

Friends And Related Symbol Documentation

◆ GraphDBClient

friend class GraphDBClient
friend

Definition at line 840 of file SVFStatements.h.

Member Data Documentation

◆ entry

const FunEntryICFGNode* SVF::CallPE::entry
private

each operand's call site

Definition at line 850 of file SVFStatements.h.

◆ opCallICFGNodes

CallICFGNodeVec SVF::CallPE::opCallICFGNodes
private

Definition at line 849 of file SVFStatements.h.


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