9 #ifndef IR_SEG_SEGRETURNNODE_H
10 #define IR_SEG_SEGRETURNNODE_H
12 #include <llvm/IR/BasicBlock.h>
14 #include <unordered_map>
15 #include <unordered_set>
17 #include "CBAccessPath.h"
18 #include "IR/SEG/SymbolicExprGraph.h"
22 class PersistedSEGReturnNode;
24 class PersistedSEGCommonReturnNode;
26 class PersistedSEGPseudoReturnNode;
37 virtual void assembleSEGObject(std::map<int, SEGObject *> &FuncSEGObjMap);
40 std::unordered_set<SEGReturnSite *> RetInsts;
41 std::unordered_map<const SEGNodeBase *, SEGReturnSite *> RetNodeSiteMap;
57 virtual size_t getIndex()
const = 0;
61 return O->getKind() >= SEGOBJK_ReturnBegin &&
62 O->getKind() <= SEGOBJK_ReturnEnd;
83 virtual PersistedSEGObject *createPersistedObject()
const;
85 virtual size_t getIndex()
const {
92 return O->getKind() == SEGOBJK_CommonReturn;
119 virtual PersistedSEGObject *createPersistedObject()
const;
121 virtual size_t getIndex()
const {
return Index; }
123 const CBAccessPath &getAccessPath()
const {
return AP; }
128 static bool classof(
const SEGObject *O) {
129 return O->getKind() == SEGOBJK_PseudoReturn;