ClearBlue
|
#include <SymbolicExprGraph.h>
Public Member Functions | |
SEGOperandNode (PersistedSEGOperandNode *Node, SymbolicExprGraph *SEG) | |
virtual void | assembleSEGObject (std::map< int, SEGObject * > &FuncSEGObjMap) |
Assemble the SEG object's related objects. More... | |
Value * | getLLVMValue () const |
SEGValue * | getSEGValue () const |
WrappedValue * | getWrappedLLVMValue () const |
void | dot (raw_fd_ostream &O) const override |
Dot its self to the given output stream. | |
virtual Value * | getLLVMDbgValue () const override |
virtual std::int32_t | getSrcLine () const |
Public Member Functions inherited from SEGNodeBase | |
SEGNodeBase (PersistedSEGNodeBase *Node, SymbolicExprGraph *SEG) | |
Type * | getLLVMType () const |
get the type size of the node | |
uint64_t | getTypeSize () const |
get the type size of the node | |
bool | isVectorTy () const |
check whether LLVMType is vector type | |
bool | isPointerTy () const |
bool | isSized () const |
bool | isStructTy () const |
SEGType * | getSEGType () const |
unsigned | getVectorNumElements () const |
check the number of elements in LLVMType | |
SEGNodeBase * | getChild (unsigned I) const |
float | getConfidence (const SEGNodeBase *ParentNode) const |
unsigned | getNumChildren () const |
unsigned | getNumParents () const |
void | addChild (SEGNodeBase *N, float Confidence=1.0f) |
void | eraseAllChildren () |
void | addUseSite (SEGSiteBase *U) |
virtual bool | isTerminalNode () const |
SEGRegionNode * | getRegion () const |
bool | containsParentNode (const SEGNodeBase *N) const |
const std::string & | getDescription () const |
ValueFlowIterator | vflow_begin () const |
ValueFlowIterator | vflow_end () const |
key_iterator< std::map< const SEGNodeBase *, float >::const_iterator > | parent_begin () const |
key_iterator< std::map< const SEGNodeBase *, float >::const_iterator > | parent_end () const |
iterator_range< std::map< const SEGNodeBase *, float >::const_iterator > | parents () const |
std::vector< SEGNodeBase * >::const_iterator | child_begin () const |
std::vector< SEGNodeBase * >::const_iterator | child_end () const |
iterator_range< std::vector< SEGNodeBase * >::const_iterator > | children () const |
std::map< const SEGNodeBase *, float >::const_iterator | parent_confidence_begin () const |
std::map< const SEGNodeBase *, float >::const_iterator | parent_confidence_end () const |
size_t | child_size () const |
size_t | parent_size () const |
std::vector< SEGSiteBase * >::const_iterator | use_site_begin () const |
std::vector< SEGSiteBase * >::const_iterator | use_site_end () const |
iterator_range< std::vector< SEGSiteBase * >::const_iterator > | use_sites () |
size_t | use_site_size () const |
Public Member Functions inherited from SEGObject | |
SEGObject (SEGObjectKind OK, SymbolicExprGraph *SEG, BasicBlock *BB) | |
SEGObject (PersistedSEGObject *Obj, SymbolicExprGraph *SEG) | |
virtual WrappedValue * | getWrappedLLVMDbgValue () const |
virtual Instruction * | getLLVMDbgInstruction () const |
virtual WrappedInstruction * | getWrappedLLVMDbgInstruction () const |
SEGObjectKind | getKind () const |
int | getSEGIndex () const |
int | getObjIndex () const |
const char * | getKindName () const |
BasicBlock * | getParentBasicBlock () const |
WrappedBasicBlock * | getWrappedParentBasicBlock () const |
Function * | getParentFunction () const |
const SymbolicExprGraph * | getParentGraph () const |
SymbolicExprGraph * | getParentGraph () |
virtual PersistedSEGObject * | createPersistedObject () const =0 |
virtual void | persistSEGData (PersistedSymbolicExprGraph *PersistedSEG) |
bool | isFromLibrary () const |
virtual std::string | getSrcFile () const |
virtual std::string | getAuxiliaryDebugStr () const |
Static Public Member Functions | |
static bool | classof (const SEGObject *N) |
Static Public Member Functions inherited from SEGNodeBase | |
static bool | classof (const SEGObject *N) |
Protected Member Functions | |
SEGOperandNode (SEGObjectKind K, Type *Ty, SymbolicExprGraph *SEG, BasicBlock *BB) | |
A node whose value which will be set to null. | |
SEGOperandNode (SEGObjectKind K, Value *Val, Type *Ty, SymbolicExprGraph *SEG, BasicBlock *BB) | |
Protected Member Functions inherited from SEGNodeBase | |
SEGNodeBase (SEGObjectKind K, Type *Ty, SymbolicExprGraph *SEG, BasicBlock *BB) | |
void | setDescription (std::string &Desc) |
Protected Attributes | |
Value * | LLVMValue = nullptr |
SEGValue * | segValue = nullptr |
WrappedValue * | WrappedLLVMValue = nullptr |
Protected Attributes inherited from SEGObject | |
PersistedSEGObject * | PersistedObj = nullptr |
the persistence object | |
Friends | |
class | SymbolicExprGraph |
The class only can be initialized in the seg graph. | |
raw_ostream & | operator<< (llvm::raw_ostream &Out, const SEGOperandNode &N) |
Additional Inherited Members | |
Public Types inherited from SEGObject | |
enum | SEGObjectKind { SEGOBJK_NodeBegin, SEGOBJK_OperandBegin, SEGOBJK_ArgumentBegin, SEGOBJK_CommonArgument, SEGOBJK_VarArgument, SEGOBJK_PseudoArgument, SEGOBJK_ArgumentEnd, SEGOBJK_CallSiteOutputBegin, SEGOBJK_CallSiteCommonOutput, SEGOBJK_CallSitePseudoOutput, SEGOBJK_CallSiteOutputEnd, SEGOBJK_ReturnBegin, SEGOBJK_CommonReturn, SEGOBJK_PseudoReturn, SEGOBJK_ReturnEnd, SEGOBJK_LoadMem, SEGOBJK_StoreMem, SEGOBJK_Phi, SEGOBJK_Region, SEGOBJK_SimpleOperand, SEGOBJK_Undef, SEGOBJK_CallSitePseudoInput, SEGOBJK_CallSiteSummaryArgument, SEGOBJK_CallSiteSummaryReturn, SEGOBJK_OperandEnd, SEGOBJK_OpcodeBegin, SEGOBJK_BinaryWithIntConst, SEGOBJK_Cast, SEGOBJK_SimpleOpcode, SEGOBJK_OpcodeEnd, SEGOBJK_NodeEnd, SEGOBJK_SiteBegin, SEGOBJK_CallSite, SEGOBJK_ReturnSite, SEGOBJK_SimpleSiteBegin, SEGOBJK_GEPSite, SEGOBJK_DereferenceSite, SEGOBJK_DivSite, SEGOBJK_CmpSite, SEGOBJK_AllocSite, SEGOBJK_SimpleSiteEnd, SEGOBJK_SiteEnd } |
The operand node of symbolic expression graph Each node has a corresponding llvm value (may be nullptr), as well as the value's type (cannot be nullptr)
SEGOperandNode::SEGOperandNode | ( | PersistedSEGOperandNode * | Node, |
SymbolicExprGraph * | SEG | ||
) |
A constructor specially designed for persistence Use the persistence obj to initialize SEGOperandNode
|
protected |
Note that when val is an llvm constant, users should do the following pre-process.
Global Value:
Please assign constant int values to them
Constant pointer null & undef:
A zero constant int (bit width should be the same as the type)
constant int/fp:
Use them directly
Other composite constant types:
Transform it to a bit vector first, and then compute the corresponding constant int of the bit vector. If the composite type contains floating point type, we model the floating point constant in the composite constant as integer without changing type size. E.g. {intN_t x=2, float y=1.2} is modeled as {intN_t x = 2, int' y = 1}, here sizeof(float) == sizeof(int')
The opcode node's llvm type should be the same as the result's type of the operation
|
inlinevirtual |
Assemble the SEG object's related objects.
initialize the children and parents
initialize the use sites
initialize the region
Reimplemented from SEGNodeBase.
Reimplemented in SEGPseudoArgumentNode, SEGVarArgumentNode, SEGCallSitePseudoOutputNode, SEGPseudoReturnNode, SEGCommonReturnNode, SEGCallSiteCommonOutputNode, SEGCommonArgumentNode, SEGCallSitePseudoInputNode, SEGRegionNode, SEGPhiNode, SEGReturnNode, SEGStoreMemNode, SEGLoadMemNode, SEGCallSiteReturnSummaryNode, SEGSimpleOperandNode, SEGCallSiteOutputNode, SEGArgumentNode, SEGCallSiteArgumentSummaryNode, and SEGUndefNode.
|
protected |
The llvm value corresponding to the node It may be nullptr