Static Value-Flow Analysis
Loading...
Searching...
No Matches
SVFIR.h
Go to the documentation of this file.
1//===- SVFIR.h -- IR of SVF ---------------------------------------------//
2//
3// SVF: Static Value-Flow Analysis
4//
5// Copyright (C) <2013-> <Yulei Sui>
6//
7
8// This program is free software: you can redistribute it and/or modify
9// it under the terms of the GNU Affero General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU Affero General Public License for more details.
17
18// You should have received a copy of the GNU Affero General Public License
19// along with this program. If not, see <http://www.gnu.org/licenses/>.
20//
21//===----------------------------------------------------------------------===//
22
23/*
24 * SVFIR.h
25 *
26 * Created on: 31, 12, 2021
27 * Author: Yulei Sui
28 */
29
30#ifndef INCLUDE_SVFIR_H_
31#define INCLUDE_SVFIR_H_
32
33#include "Graphs/IRGraph.h"
34
35namespace SVF
36{
37class CommonCHGraph;
42class SVFIR : public IRGraph
43{
44 friend class SVFIRBuilder;
45 friend class ExternalPAG;
46 friend class PAGBuilderFromFile;
48 friend class BVDataPTAImpl;
49 friend class GraphDBClient;
50 friend class GraphDBSVFIRBuilder;
51
52public:
57 typedef std::vector<const SVFStmt*> SVFStmtList;
58 typedef std::vector<const ValVar*> ValVarList;
68 typedef std::pair<NodeID, APOffset> GepOffset;
69 typedef std::pair<NodeID, AccessPath> NodeAccessPath;
73 typedef std::pair<const SVFType*, std::vector<AccessPath>> SVFTypeLocSetsPair;
76
77private:
98 ICFG* icfg; // ICFG
99 CommonCHGraph* chgraph; // class hierarchy graph
102
103 static std::unique_ptr<SVFIR> pag;
104 static std::string pagReadFromTxt;
105
106 std::string moduleIdentifier;
107
109 SVFIR(bool buildFromFile);
110
112 void destroy();
113
114public:
115
117
118 static inline SVFIR* getPAG(bool buildFromFile = false)
119 {
120 if (pag == nullptr)
121 {
122 pag = std::unique_ptr<SVFIR>(new SVFIR(buildFromFile));
123 }
124 return pag.get();
125 }
126 static void releaseSVFIR()
127 {
128 pag = nullptr;
129 }
131
133 inline const SVFVar* getSVFVar(NodeID id) const
134 {
135 return getGNode(id);
136 }
137 inline const ValVar* getValVar(NodeID id) const
138 {
139 if(const SVFVar* var = getSVFVar(id))
140 return SVFUtil::dyn_cast<ValVar>(var);
141 else
142 {
143 assert(false && "the Node is not a ValVar");
144 return nullptr;
145 }
146 }
147 inline const ObjVar* getObjVar(NodeID id) const
148 {
149 if(const SVFVar* var = getSVFVar(id))
150 return SVFUtil::dyn_cast<ObjVar>(var);
151 else
152 {
153 assert(false && "the Node is not an ObjVar");
154 return nullptr;
155 }
156 }
157 inline const BaseObjVar* getBaseObjVar(NodeID id) const
158 {
159 if(const SVFVar* var = getSVFVar(id))
160 return SVFUtil::dyn_cast<BaseObjVar>(var);
161 else
162 {
163 assert(false && "the Node is not a BaseObjVar");
164 return nullptr;
165 }
166 }
167 inline const GepObjVar* getGepObjVar(NodeID id) const
168 {
169 if(const SVFVar* var = getSVFVar(id))
170 return SVFUtil::dyn_cast<GepObjVar>(var);
171 else
172 {
173 assert(false && "the Node is not a GepObjVar");
174 return nullptr;
175 }
176 }
177 inline bool isObjVar(NodeID id) const
178 {
179 return SVFUtil::isa<ObjVar>(getSVFVar(id));
180 }
181 inline bool isBaseObjVar(NodeID id) const
182 {
183 return SVFUtil::isa<BaseObjVar>(getSVFVar(id));
184 }
185 inline bool isGepObjVar(NodeID id) const
186 {
187 return SVFUtil::isa<GepObjVar>(getSVFVar(id));
188 }
190 inline const IDToNodeMapTy& getSVFVarMap() const
191 {
192 return IDToNodeMap;
193 }
195
197 {
198 return memToFieldsMap;
199 }
202 {
203 return GepObjVarMap;
204 }
207 {
208 return candidatePointers;
209 }
212
214 virtual ~SVFIR()
215 {
216 destroy();
217 }
219
220
221 static void handleBlackHole(bool b);
223
225 inline void setICFG(ICFG* i)
226 {
227 icfg = i;
228 }
229 inline ICFG* getICFG() const
230 {
231 assert(icfg->totalICFGNode>0 && "empty ICFG! Build SVF IR first!");
232 return icfg;
233 }
235 inline void setCHG(CommonCHGraph* c)
236 {
237 chgraph = c;
238 }
240 {
241 assert(chgraph && "empty ICFG! Build SVF IR first!");
242 return chgraph;
243 }
244
246 inline const CallGraph* getCallGraph()
247 {
248 assert(callGraph && "empty CallGraph! Build SVF IR first!");
249 return callGraph;
250 }
251
253 {
254 callGraph = cg;
255 }
256
257 const FunObjVar* getFunObjVar(const std::string& name);
258
259 inline const std::string& getModuleIdentifier() const
260 {
261 if (pagReadFromTxt.empty())
262 {
263 assert(!moduleIdentifier.empty() &&
264 "No module found! Reading from a file other than LLVM-IR?");
265 return moduleIdentifier;
266 }
267 else
268 {
269 return pagReadFromTxt;
270 }
271 }
272
273 static inline std::string pagFileName()
274 {
275 return pagReadFromTxt;
276 }
277
278 static inline bool pagReadFromTXT()
279 {
280 return !pagReadFromTxt.empty();
281 }
282
283 static inline void setPagFromTXT(const std::string& txt)
284 {
286 }
287
288 inline void setModuleIdentifier(const std::string& moduleIdentifier)
289 {
290 this->moduleIdentifier = moduleIdentifier;
291 }
292
294
295
297 {
298 return KindToSVFStmtSetMap[kind];
299 }
306 inline bool hasSVFStmtList(const ICFGNode* inst) const
307 {
308 return icfgNode2SVFStmtsMap.find(inst) != icfgNode2SVFStmtsMap.end();
309 }
310 inline bool hasPTASVFStmtList(const ICFGNode* inst) const
311 {
312 return icfgNode2PTASVFStmtsMap.find(inst) !=
314 }
317 {
318 return icfgNode2SVFStmtsMap[inst];
319 }
322 {
323 return icfgNode2PTASVFStmtsMap[inst];
324 }
327 {
328 edge->setICFGNode(inst);
329 icfgNode2SVFStmtsMap[inst].push_back(edge);
330 if (edge->isPTAEdge())
331 icfgNode2PTASVFStmtsMap[inst].push_back(edge);
332 }
345 {
346 return globSVFStmtSet;
347 }
349 inline const CallSiteSet& getCallSiteSet() const
350 {
351 return callSiteSet;
352 }
354 inline bool isPhiNode(const SVFVar* node) const
355 {
356 return phiNodeMap.find(node) != phiNodeMap.end();
357 }
359 inline CallPE* getCallPEForFormalParm(const SVFVar* param) const
360 {
361 auto it = fParmToCallPEMap.find(param);
362 return it != fParmToCallPEMap.end() ? it->second : nullptr;
363 }
364
366 inline bool hasFunArgsList(const FunObjVar* func) const
367 {
368 return (funArgsListMap.find(func) != funArgsListMap.end());
369 }
372 {
373 return funArgsListMap;
374 }
376 inline const ValVarList& getFunArgsList(const FunObjVar* func) const
377 {
378 FunToArgsListMap::const_iterator it = funArgsListMap.find(func);
379 assert(it != funArgsListMap.end() && "this function doesn't have arguments");
380 return it->second;
381 }
383 inline bool hasCallSiteArgsMap(const CallICFGNode* cs) const
384 {
385 return (callSiteArgsListMap.find(cs) != callSiteArgsListMap.end());
386 }
389 {
390 return callSiteArgsListMap;
391 }
393 inline const ValVarList& getCallSiteArgsList(const CallICFGNode* cs) const
394 {
395 CSToArgsListMap::const_iterator it = callSiteArgsListMap.find(cs);
396 assert(it != callSiteArgsListMap.end() && "this call site doesn't have arguments");
397 return it->second;
398 }
401 {
402 return callSiteRetMap;
403 }
405 inline const ValVar* getCallSiteRet(const RetICFGNode* cs) const
406 {
407 CSToRetMap::const_iterator it = callSiteRetMap.find(cs);
408 assert(it != callSiteRetMap.end() && "this call site doesn't have return");
409 return it->second;
410 }
411 inline bool callsiteHasRet(const RetICFGNode* cs) const
412 {
413 return callSiteRetMap.find(cs) != callSiteRetMap.end();
414 }
417 {
418 return funRetMap;
419 }
421 inline const ValVar* getFunRet(const FunObjVar* func) const
422 {
423 FunToRetMap::const_iterator it = funRetMap.find(func);
424 assert(it != funRetMap.end() && "this function doesn't have return");
425 return it->second;
426 }
427 inline bool funHasRet(const FunObjVar* func) const
428 {
429 return funRetMap.find(func) != funRetMap.end();
430 }
432
434
436 {
437 return GepValObjMap.size();
438 }
440 {
441 return GepObjVarMap.size();
442 }
444
447 const AccessPath& ap) const;
448
450
452 {
454 }
455 inline NodeID getFunPtr(const CallICFGNode* cs) const
456 {
457 CallSiteToFunPtrMap::const_iterator it = indCallSiteToFunPtrMap.find(cs);
458 assert(it!=indCallSiteToFunPtrMap.end() && "indirect callsite not have a function pointer?");
459 return it->second;
460 }
462 {
463 FunPtrToCallSitesMap::const_iterator it = funPtrToCallSitesMap.find(funPtr);
464 assert(it!=funPtrToCallSitesMap.end() && "function pointer not used at any indirect callsite?");
465 return it->second;
466 }
467 inline bool isIndirectCallSites(const CallICFGNode* cs) const
468 {
469 return (indCallSiteToFunPtrMap.find(cs) != indCallSiteToFunPtrMap.end());
470 }
471 inline bool isFunPtr(NodeID id) const
472 {
473 return (funPtrToCallSitesMap.find(id) != funPtrToCallSitesMap.end());
474 }
476
479 {
480 return getIntraPAGEdge(getGNode(src), getGNode(dst), kind);
481 }
483 {
484 SVFStmt edge(src, dst, kind, false);
486 SVFStmt::SVFStmtSetTy::const_iterator it = edgeSet.find(&edge);
487 assert(it != edgeSet.end() && "can not find pag edge");
488 return (*it);
489 }
491
495
496 inline const BaseObjVar* getBaseObject(NodeID id) const
497 {
498 const SVFVar* node = getSVFVar(id);
499 if(const GepObjVar* gepObjVar = SVFUtil::dyn_cast<GepObjVar>(node))
500 return SVFUtil::dyn_cast<BaseObjVar>(
501 getSVFVar(gepObjVar->getBaseNode()));
502 else
503 return SVFUtil::dyn_cast<BaseObjVar>(node);
504 }
505
506 inline const ValVar* getBaseValVar(NodeID id) const
507 {
508 const SVFVar* node = getSVFVar(id);
509 if(const GepValVar* gepVar = SVFUtil::dyn_cast<GepValVar>(node))
510 return gepVar->getBaseNode();
511 else
512 return SVFUtil::dyn_cast<ValVar>(node);
513 }
515
517 NodeID getGepObjVar(const BaseObjVar* baseObj, const APOffset& ap);
519 NodeID getGepObjVar(NodeID id, const APOffset& ap) ;
521
522 inline NodeID getFIObjVar(const BaseObjVar* obj) const
523 {
524 return obj->getId();
525 }
526 inline NodeID getFIObjVar(NodeID id) const
527 {
528 return getBaseObjVarID(id);
529 }
531
533
534
535 inline bool isBlkObjOrConstantObj(NodeID id) const
536 {
537 return (isBlkObj(id) || isConstantObj(id));
538 }
539
540 inline bool isConstantObj(NodeID id) const
541 {
542 const BaseObjVar* obj = getBaseObject(id);
543 assert(obj && "not an object node?");
544 return isConstantSym(id) ||
545 obj->isConstDataOrConstGlobal();
546 }
548
550
551
553 {
554 return getBaseObject(id)->getId();
555 }
557
559
565 {
566 return addDummyValNode(NodeIDAllocator::get()->allocateValueId(), nullptr);
567 }
569 {
570 return addDummyObjNode(NodeIDAllocator::get()->allocateObjectId(), type);
571 }
573
574 bool isValidPointer(NodeID nodeId) const;
575
576 bool isValidTopLevelPtr(const SVFVar* node);
578
580 void print();
581
582protected:
584 {
585 memToFieldsMap[node->getId()].set(node->getId());
586 return addObjNode(node);
587 }
588
590
591 NodeID addGepObjNode(GepObjVar* gepObj, NodeID base, const APOffset& apOffset);
592
594 {
595 GepValObjMap[curInstID][std::make_pair(gepValvar->getBaseNode()->getId(), gepValvar->getAccessPath())] = gepValvar->getId();
596 }
597
598private:
599
602 {
603 bool added = KindToSVFStmtSetMap[edge->getEdgeKind()].insert(edge).second;
604 (void)added; // Suppress warning of unused variable under release build
605 assert(added && "duplicated edge, not added!!!");
607 if (edge->isPTAEdge() || (SVFUtil::isa<CopyStmt>(edge) && SVFUtil::cast<CopyStmt>(edge)->isInt2Ptr()))
608 {
610 KindToPTASVFStmtSetMap[edge->getEdgeKind()].insert(edge);
611 }
612 }
614
615
616 inline void addFunArgs(const FunObjVar* fun, const ValVar* arg)
617 {
620 }
621
623 {
624 funEntryBlockNode->addFormalParms(arg);
625 funArgsListMap[fun].push_back(arg);
626 }
628 inline void addFunRet(const FunObjVar* fun, const ValVar* ret)
629 {
631 addFunRet(funExitBlockNode, fun, ret);
632 }
633
634 inline void addFunRet(FunExitICFGNode* funExitBlockNode, const FunObjVar* fun, const ValVar* ret)
635 {
636 funExitBlockNode->addFormalRet(ret);
637 funRetMap[fun] = ret;
638 }
640 inline void addCallSiteArgs(CallICFGNode* callBlockNode,const ValVar* arg)
641 {
642 callBlockNode->addActualParms(arg);
643 callSiteArgsListMap[callBlockNode].push_back(arg);
644 }
647 {
648 retBlockNode->addActualRet(arg);
650 }
653 {
654 bool added = indCallSiteToFunPtrMap.emplace(cs, funPtr).second;
655 (void) added;
656 funPtrToCallSitesMap[funPtr].insert(cs);
657 assert(added && "adding the same indirect callsite twice?");
658 }
659
661
662
663 inline NodeID addValNode(NodeID i, const SVFType* type, const ICFGNode* icfgNode)
664 {
665 ValVar *node = new ValVar(i, type, icfgNode, ValVar::ValNode);
666 return addValNode(node);
667 }
668
669 NodeID addFunValNode(NodeID i, const ICFGNode* icfgNode, const FunObjVar* funObjVar, const SVFType* type)
670 {
671 FunValVar* node = new FunValVar(i, icfgNode, funObjVar, type);
672 return addValNode(node);
673 }
674
675 NodeID addArgValNode(NodeID i, u32_t argNo, const ICFGNode* icfgNode, const FunObjVar* callGraphNode, const SVFType* type)
676 {
677 ArgValVar* node =
678 new ArgValVar(i, argNo, icfgNode, callGraphNode, type);
679 return addValNode(node);
680 }
681
682 inline NodeID addConstantFPValNode(const NodeID i, double dval,
683 const ICFGNode* icfgNode, const SVFType* type)
684 {
685 SVFVar* node = new ConstFPValVar(i, dval, icfgNode, type);
686 return addNode(node);
687 }
688
689 inline NodeID addConstantIntValNode(NodeID i, const std::pair<s64_t, u64_t>& intValue,
690 const ICFGNode* icfgNode, const SVFType* type)
691 {
692 SVFVar* node = new ConstIntValVar(i, intValue.first, intValue.second, icfgNode, type);
693 return addNode(node);
694 }
695
696 inline NodeID addConstantNullPtrValNode(const NodeID i, const ICFGNode* icfgNode, const SVFType* type)
697 {
698 SVFVar* node = new ConstNullPtrValVar(i, icfgNode, type);
699 return addNode(node);
700 }
701
702 inline NodeID addGlobalValNode(const NodeID i, const ICFGNode* icfgNode, const SVFType* svfType)
703 {
704 SVFVar* node = new GlobalValVar(i, icfgNode, svfType);
705 return addNode(node);
706 }
707
708 inline NodeID addConstantAggValNode(const NodeID i, const ICFGNode* icfgNode, const SVFType* svfType)
709 {
710 SVFVar* node = new ConstAggValVar(i, icfgNode, svfType);
711 return addNode(node);
712 }
713
714 inline NodeID addConstantDataValNode(const NodeID i, const ICFGNode* icfgNode, const SVFType* type)
715 {
716 SVFVar* node = new ConstDataValVar(i, icfgNode, type);
717 return addNode(node);
718 }
719
720
723 {
724 return addFIObjNode( i, ti, node);
725 }
726
731 {
732 HeapObjVar *heapObj = new HeapObjVar(i, ti, node);
733 return addBaseObjNode(heapObj);
734 }
735
740 {
741 StackObjVar *stackObj = new StackObjVar(i, ti, node);
742 return addBaseObjNode(stackObj);
743 }
744
746 {
747 FunObjVar* funObj = new FunObjVar(id, ti, node);
748 return addBaseObjNode(funObj);
749 }
750
751
752 inline NodeID addConstantFPObjNode(NodeID i, ObjTypeInfo* ti, double dval, const ICFGNode* node)
753 {
754 ConstFPObjVar* conObj = new ConstFPObjVar(i, dval, ti, node);
755 return addBaseObjNode(conObj);
756 }
757
758
759 inline NodeID addConstantIntObjNode(NodeID i, ObjTypeInfo* ti, const std::pair<s64_t, u64_t>& intValue, const ICFGNode* node)
760 {
762 new ConstIntObjVar(i, intValue.first, intValue.second, ti, node);
763 return addBaseObjNode(conObj);
764 }
765
766
768 {
770 return addBaseObjNode(conObj);
771 }
772
773 inline NodeID addGlobalObjNode(const NodeID i, ObjTypeInfo* ti, const ICFGNode* node)
774 {
775 GlobalObjVar* gObj = new GlobalObjVar(i, ti, node);
776 return addBaseObjNode(gObj);
777 }
779 {
780 ConstAggObjVar* conObj = new ConstAggObjVar(i, ti, node);
781 return addBaseObjNode(conObj);
782 }
784 {
786 return addBaseObjNode(conObj);
787 }
788
790 inline NodeID addRetNode(NodeID i, const FunObjVar* callGraphNode, const SVFType* type, const ICFGNode* icn)
791 {
792 SVFVar *node = new RetValPN(i, callGraphNode, type, icn);
793 return addRetNode(callGraphNode, node);
794 }
796 inline NodeID addVarargNode(NodeID i, const FunObjVar* val, const SVFType* type, const ICFGNode* n)
797 {
798 SVFVar *node = new VarArgValPN(i, val, type, n);
799 return addNode(node);
800 }
801
803 NodeID addGepValNode(NodeID curInst, const ValVar* base, const AccessPath& ap, NodeID i, const SVFType* type, const ICFGNode* node);
805 NodeID addGepObjNode(const BaseObjVar* baseObj, const APOffset& apOffset, const NodeID gepId);
808 {
809 BaseObjVar* baseObj = new BaseObjVar(i, ti, node);
810 return addBaseObjNode(baseObj);
811 }
812
813
815
817
819 {
820 return addValNode(new DummyValVar(i, node));
821 }
823 {
824 if (idToObjTypeInfoMap().find(i) == idToObjTypeInfoMap().end())
825 {
828 return addDummyObjNode(new DummyObjVar(i, ti, nullptr));
829 }
830 else
831 {
832 return addDummyObjNode(new DummyObjVar(i, getObjTypeInfo(i), nullptr));
833 }
834 }
835
841 {
843 }
845 {
846 return addDummyValNode(getBlkPtr(), nullptr);
847 }
849 {
850 return addValNode(new IntrinsicValVar(i, type));
851 }
853 {
854 return addValNode(new BasicBlockValVar(i, type));
855 }
857 {
858 return addValNode(new AsmPCValVar(i, type));
859 }
861
863 NodeID addValNode(ValVar* node);
865 NodeID addObjNode(ObjVar *node);
867 inline NodeID addRetNode(const FunObjVar*, SVFVar *node)
868 {
869 return addNode(node);
870 }
872 inline NodeID addVarargNode(const FunObjVar*, SVFVar *node)
873 {
874 return addNode(node);
875 }
876
878 inline void addGlobalPAGEdge(const SVFStmt* edge)
879 {
880 globSVFStmtSet.insert(edge);
881 }
883 inline void addCallSite(const CallICFGNode* call)
884 {
885 callSiteSet.insert(call);
886 }
888
889
895
898 void addPhiStmt(PhiStmt* edge, SVFVar* src, SVFVar* dst);
901 void addSelectStmt(SelectStmt* edge, SVFVar* src, SVFVar* dst);
904 void addCmpStmt(CmpStmt* edge, SVFVar* src, SVFVar* dst);
907 u32_t opcode);
908 void addBinaryOPStmt(BinaryOPStmt* edge, SVFVar* src, SVFVar* dst);
910 UnaryOPStmt* addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode);
911 void addUnaryOPStmt(UnaryOPStmt* edge, SVFVar* src, SVFVar* dst);
915 void addBranchStmt(BranchStmt* edge, SVFVar* src, SVFVar* dst);
920 StoreStmt* addStoreStmt(NodeID src, NodeID dst, const ICFGNode* val);
921 void addStoreStmt(StoreStmt* edge, SVFVar* src, SVFVar* dst);
923 CallPE* addCallPE(NodeID src, NodeID dst, const CallICFGNode* cs,
924 const FunEntryICFGNode* entry);
925 void addCallPE(CallPE* edge, SVFVar* src, SVFVar* dst);
927 RetPE* addRetPE(NodeID src, NodeID dst, const CallICFGNode* cs,
928 const FunExitICFGNode* exit);
929 void addRetPE(RetPE* edge, SVFVar* src, SVFVar* dst);
931 GepStmt* addGepStmt(NodeID src, NodeID dst, const AccessPath& ap,
932 bool constGep);
933 void addGepStmt(GepStmt* edge);
935 GepStmt* addNormalGepStmt(NodeID src, NodeID dst, const AccessPath& ap);
937 GepStmt* addVariantGepStmt(NodeID src, NodeID dst, const AccessPath& ap);
940 const FunEntryICFGNode* entry);
943 const FunExitICFGNode* exit);
945
948};
949
950typedef SVFIR PAG;
951
952} // End namespace SVF
953
954
955
956#endif /* INCLUDE_SVFIR_H_ */
newitem type
Definition cJSON.cpp:2739
cJSON * n
Definition cJSON.cpp:2558
const cJSON *const b
Definition cJSON.h:255
const char *const name
Definition cJSON.h:264
Class representing a function argument variable in the SVFIR.
NodeID getId() const
Get the memory object id.
std::vector< std::pair< const ICFGNode *, s32_t > > SuccAndCondPairVec
void addActualParms(const ValVar *ap)
Add actual parameters.
Definition ICFGNode.h:476
Common base for class hierarchy graph. Only implements what PointerAnalysis needs.
Definition CHG.h:51
NodeType * getGNode(NodeID id) const
Get a node.
OrderedMap< NodeID, NodeType * > IDToNodeMapTy
NodeID to GenericNode map.
Class representing a heap object variable in the SVFIR.
NodeID totalICFGNode
Definition ICFG.h:66
FunExitICFGNode * getFunExitICFGNode(const FunObjVar *fun)
Add a function exit node.
Definition ICFG.cpp:249
FunEntryICFGNode * getFunEntryICFGNode(const FunObjVar *fun)
Add a function entry node.
Definition ICFG.cpp:242
Set< const SVFStmt * > SVFStmtSet
Definition IRGraph.h:105
NodeID addNode(SVFVar *node)
Add a node into the graph.
Definition IRGraph.h:117
NodeID getBlkPtr() const
Definition IRGraph.h:255
NodeID getBlackHoleNode() const
Definition IRGraph.h:247
SVFStmt::KindToSVFStmtMapTy KindToSVFStmtSetMap
SVFIR edge map containing all PAGEdges.
Definition IRGraph.h:108
ObjTypeInfo * createObjTypeInfo(const SVFType *type)
Create an objectInfo based on LLVM type (value is null, and type could be null, representing a dummy ...
Definition IRGraph.cpp:231
static bool isBlkObj(NodeID id)
Definition IRGraph.h:165
u32_t totalPTAPAGEdge
Definition IRGraph.h:112
static bool isConstantSym(NodeID id)
Definition IRGraph.h:169
ObjTypeInfo * getObjTypeInfo(NodeID id) const
Definition IRGraph.h:234
NodeID getConstantNode() const
Definition IRGraph.h:251
SVFStmt::KindToSVFStmtMapTy KindToPTASVFStmtSetMap
SVFIR edge map containing only pointer-related edges, i.e., both LHS and RHS are of pointer type.
Definition IRGraph.h:109
IDToTypeInfoMapTy & idToObjTypeInfoMap()
Get different kinds of syms maps.
Definition IRGraph.h:212
static NodeIDAllocator * get(void)
Return (singleton) allocator.
static void releaseSVFIR()
Definition SVFIR.h:126
NodeID addFIObjNode(NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Add a field-insensitive node, this method can only invoked by getFIGepObjNode.
Definition SVFIR.h:807
const CallSiteSet & getCallSiteSet() const
Get all callsites.
Definition SVFIR.h:349
CSToArgsListMap & getCallSiteArgsMap()
Get callsite argument list.
Definition SVFIR.h:388
SVFStmt::SVFStmtSetTy & getPTASVFStmtSet(SVFStmt::PEDGEK kind)
Get PTA edges set according to its kind.
Definition SVFIR.h:301
NodeID addDummyValNode(NodeID i, const ICFGNode *node)
Add a dummy value/object node according to node ID (llvm value is null)
Definition SVFIR.h:818
bool hasPTASVFStmtList(const ICFGNode *inst) const
Definition SVFIR.h:310
GepStmt * addVariantGepStmt(NodeID src, NodeID dst, const AccessPath &ap)
Add Variant(Gep) edge.
Definition SVFIR.cpp:464
SVFStmt::SVFStmtSetTy & getSVFStmtSet(SVFStmt::PEDGEK kind)
Get/set methods to get SVFStmts based on their kinds and ICFGNodes.
Definition SVFIR.h:296
Map< const SVFVar *, PhiStmt * > PHINodeMap
Definition SVFIR.h:59
bool funHasRet(const FunObjVar *func) const
Definition SVFIR.h:427
CallSiteToFunPtrMap indCallSiteToFunPtrMap
Map an indirect callsite to its function pointer.
Definition SVFIR.h:93
NodeID addGlobalValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *svfType)
Definition SVFIR.h:702
void addFunArgs(const FunObjVar *fun, const ValVar *arg)
Get/set method for function/callsite arguments and returns.
Definition SVFIR.h:616
CopyStmt * addCopyStmt(NodeID src, NodeID dst, CopyStmt::CopyKind type)
Add Copy edge.
Definition SVFIR.cpp:85
CSToRetMap callSiteRetMap
Map a callsite to its callsite returns PAGNodes.
Definition SVFIR.h:91
NodeID getGepValVar(NodeID curInst, NodeID base, const AccessPath &ap) const
Due to constraint expression, curInst is used to distinguish different instructions (e....
Definition SVFIR.cpp:611
RetPE * addRetPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunExitICFGNode *exit)
Add Return edge.
Definition SVFIR.cpp:340
NodeID getFunPtr(const CallICFGNode *cs) const
Definition SVFIR.h:455
bool hasFunArgsList(const FunObjVar *func) const
Function has arguments list.
Definition SVFIR.h:366
std::pair< NodeID, APOffset > GepOffset
Definition SVFIR.h:68
Map< const CallICFGNode *, ValVarList > CSToArgsListMap
Definition SVFIR.h:62
const IDToNodeMapTy & getSVFVarMap() const
Return the entire SVFID to SVFVar map.
Definition SVFIR.h:190
GepStmt * addGepStmt(NodeID src, NodeID dst, const AccessPath &ap, bool constGep)
Add Gep edge.
Definition SVFIR.cpp:418
void print()
Print SVFIR.
Definition SVFIR.cpp:646
static void handleBlackHole(bool b)
SVFIR build configurations.
Definition SVFIR.cpp:779
FParmToCallPEMap fParmToCallPEMap
Map a formal param to its CallPE.
Definition SVFIR.h:88
NodeID getBaseObjVarID(NodeID id) const
Base and Offset methods for Value and Object node.
Definition SVFIR.h:552
const ValVar * getCallSiteRet(const RetICFGNode *cs) const
Get callsite return.
Definition SVFIR.h:405
const ValVarList & getFunArgsList(const FunObjVar *func) const
Get function arguments list.
Definition SVFIR.h:376
NodeID addConstantAggObjNode(const NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:778
void addToStmt2TypeMap(SVFStmt *edge)
Map a SVFStatement type to a set of corresponding SVF statements.
Definition SVFIR.h:601
friend class ExternalPAG
Definition SVFIR.h:45
NodeID addBlackholePtrNode()
Definition SVFIR.h:844
Set< const CallICFGNode * > CallSiteSet
Definition SVFIR.h:53
NodeID addBlackholeObjNode()
Definition SVFIR.h:836
NodeID addGlobalObjNode(const NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:773
CommonCHGraph * chgraph
Definition SVFIR.h:99
SVFStmt * addBlackHoleAddrStmt(NodeID node)
Set a pointer points-to black hole (e.g. int2ptr)
Definition SVFIR.cpp:363
NodeID addDummyObjNode(NodeID i, const SVFType *type)
Definition SVFIR.h:822
LoadStmt * addLoadStmt(NodeID src, NodeID dst)
Add Load edge.
Definition SVFIR.cpp:263
NodeID addGepValNode(NodeID curInst, const ValVar *base, const AccessPath &ap, NodeID i, const SVFType *type, const ICFGNode *node)
Add a temp field value node, this method can only invoked by getGepValVar.
Definition SVFIR.cpp:485
NodeID addConstantDataObjNode(const NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:783
GepStmt * addNormalGepStmt(NodeID src, NodeID dst, const AccessPath &ap)
Add Offset(Gep) edge.
Definition SVFIR.cpp:437
u32_t getFieldObjNodeNum() const
Definition SVFIR.h:439
MemObjToFieldsMap memToFieldsMap
Map a mem object id to all its fields.
Definition SVFIR.h:85
virtual ~SVFIR()
Destructor.
Definition SVFIR.h:214
bool isIndirectCallSites(const CallICFGNode *cs) const
Definition SVFIR.h:467
NodeID addConstantFPObjNode(NodeID i, ObjTypeInfo *ti, double dval, const ICFGNode *node)
Definition SVFIR.h:752
SVFStmt * getIntraPAGEdge(SVFVar *src, SVFVar *dst, SVFStmt::PEDGEK kind)
Definition SVFIR.h:482
PHINodeMap phiNodeMap
A set of phi copy edges.
Definition SVFIR.h:87
NodeBS getFieldsAfterCollapse(NodeID id)
Definition SVFIR.cpp:593
std::vector< const ValVar * > ValVarList
Definition SVFIR.h:58
NodeID addVarargNode(const FunObjVar *, SVFVar *node)
Add a unique vararg node for a procedure.
Definition SVFIR.h:872
Map< const ICFGNode *, SVFStmtList > ICFGNode2SVFStmtsMap
Definition SVFIR.h:66
NodeID addObjNode(NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Add a memory obj node.
Definition SVFIR.h:722
FunToRetMap funRetMap
Map a function to its unique function return PAGNodes.
Definition SVFIR.h:92
void addFunRet(const FunObjVar *fun, const ValVar *ret)
Add function returns.
Definition SVFIR.h:628
OrderedMap< const CallICFGNode *, NodeID > CallSiteToFunPtrMap
Definition SVFIR.h:54
NodeID addBasicBlockValNode(NodeID i, const SVFType *type)
Definition SVFIR.h:852
static std::string pagFileName()
Definition SVFIR.h:273
CallPE * addCallPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunEntryICFGNode *entry)
Add Call edge (phi-like: merges actual params from all call sites into formal param)
Definition SVFIR.cpp:310
NodeID addConstantNullPtrValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *type)
Definition SVFIR.h:696
NodeID addHeapObjNode(NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:730
SVFStmtList & getSVFStmtList(const ICFGNode *inst)
Given an instruction, get all its PAGEdges.
Definition SVFIR.h:316
bool isValidTopLevelPtr(const SVFVar *node)
Definition SVFIR.cpp:762
bool isConstantObj(NodeID id) const
Definition SVFIR.h:540
bool isPhiNode(const SVFVar *node) const
Whether this SVFVar is a result operand a of phi node.
Definition SVFIR.h:354
static bool pagReadFromTXT()
Definition SVFIR.h:278
OrderedNodeSet & getAllValidPtrs()
Return valid pointers.
Definition SVFIR.h:206
bool hasSVFStmtList(const ICFGNode *inst) const
Whether this instruction has SVFIR Edge.
Definition SVFIR.h:306
TypeLocSetsMap typeLocSetsMap
Map an arg to its base SVFType* and all its field location sets.
Definition SVFIR.h:83
TDJoinPE * addThreadJoinPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunExitICFGNode *exit)
Add Thread join edge for parameter passing.
Definition SVFIR.cpp:398
CallGraph * callGraph
all the callsites of a program
Definition SVFIR.h:101
Map< NodeID, NodeID > NodeToNodeMap
Definition SVFIR.h:67
static std::string pagReadFromTxt
Definition SVFIR.h:104
friend class GraphDBSVFIRBuilder
Definition SVFIR.h:50
CSToRetMap & getCallSiteRets()
Get callsite return.
Definition SVFIR.h:400
void destroy()
Clean up memory.
Definition SVFIR.cpp:633
void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)
Add a SVFStmt into instruction map.
Definition SVFIR.h:326
std::vector< const SVFStmt * > SVFStmtList
Definition SVFIR.h:57
const BaseObjVar * getBaseObject(NodeID id) const
Definition SVFIR.h:496
const CallGraph * getCallGraph()
Get CG.
Definition SVFIR.h:246
NodeID addConstantNullPtrObjNode(const NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:767
SVFStmtSet globSVFStmtSet
Global PAGEdges without control flow information.
Definition SVFIR.h:86
NodeID addConstantDataValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *type)
Definition SVFIR.h:714
std::pair< NodeID, AccessPath > NodeAccessPath
Definition SVFIR.h:69
void setICFG(ICFG *i)
Set/Get ICFG.
Definition SVFIR.h:225
Map< NodeAccessPath, NodeID > NodeAccessPathMap
Definition SVFIR.h:71
std::string moduleIdentifier
Definition SVFIR.h:106
const FunObjVar * getFunObjVar(const std::string &name)
Definition SVFIR.cpp:47
CmpStmt * addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predict)
Add Copy edge.
Definition SVFIR.cpp:167
FunToRetMap & getFunRets()
Get function return list.
Definition SVFIR.h:416
const BaseObjVar * getBaseObjVar(NodeID id) const
Definition SVFIR.h:157
SVFStmtSet & getGlobalSVFStmtSet()
Get global PAGEdges (not in a procedure)
Definition SVFIR.h:344
NodeID addIntrinsicValNode(NodeID i, const SVFType *type)
Definition SVFIR.h:848
void addCallSiteArgs(CallICFGNode *callBlockNode, const ValVar *arg)
Add callsite arguments.
Definition SVFIR.h:640
AddrStmt * addAddrStmt(NodeID src, NodeID dst)
Add an edge into SVFIR.
Definition SVFIR.cpp:63
Map< const FunObjVar *, ValVarList > FunToArgsListMap
Definition SVFIR.h:61
FunToArgsListMap funArgsListMap
Map a function to a list of all its formal parameters.
Definition SVFIR.h:89
ICFGNode2SVFStmtsMap icfgNode2SVFStmtsMap
Map an ICFGNode to its SVFStmts.
Definition SVFIR.h:80
NodeID addStackObjNode(NodeID i, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:739
NodeID addConstantIntValNode(NodeID i, const std::pair< s64_t, u64_t > &intValue, const ICFGNode *icfgNode, const SVFType *type)
Definition SVFIR.h:689
ICFG * getICFG() const
Definition SVFIR.h:229
u32_t getFieldValNodeNum() const
Node and edge statistics.
Definition SVFIR.h:435
NodeID addFunValNode(NodeID i, const ICFGNode *icfgNode, const FunObjVar *funObjVar, const SVFType *type)
Definition SVFIR.h:669
NodeID addConstantFPValNode(const NodeID i, double dval, const ICFGNode *icfgNode, const SVFType *type)
Definition SVFIR.h:682
UnaryOPStmt * addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode)
Add Unary edge.
Definition SVFIR.cpp:217
NodeID addConstantAggValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *svfType)
Definition SVFIR.h:708
std::pair< const SVFType *, std::vector< AccessPath > > SVFTypeLocSetsPair
Definition SVFIR.h:73
TDForkPE * addThreadForkPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunEntryICFGNode *entry)
Add Thread fork edge for parameter passing.
Definition SVFIR.cpp:374
bool isFunPtr(NodeID id) const
Definition SVFIR.h:471
SVFStmt * getIntraPAGEdge(NodeID src, NodeID dst, SVFStmt::PEDGEK kind)
Get an edge according to src, dst and kind.
Definition SVFIR.h:478
BinaryOPStmt * addBinaryOPStmt(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)
Add Copy edge.
Definition SVFIR.cpp:193
bool hasCallSiteArgsMap(const CallICFGNode *cs) const
Callsite has argument list.
Definition SVFIR.h:383
const ObjVar * getObjVar(NodeID id) const
Definition SVFIR.h:147
NodeBS & getAllFieldsObjVars(const BaseObjVar *obj)
Get all fields of an object.
Definition SVFIR.cpp:572
void addCallSite(const CallICFGNode *call)
Add callsites.
Definition SVFIR.h:883
static std::unique_ptr< SVFIR > pag
Callgraph with direct calls only; no change allowed after init and use callgraph in PointerAnalysis f...
Definition SVFIR.h:103
NodeID addValNode(NodeID i, const SVFType *type, const ICFGNode *icfgNode)
add node into SVFIR
Definition SVFIR.h:663
StoreStmt * addStoreStmt(NodeID src, NodeID dst, const ICFGNode *val)
Add Store edge.
Definition SVFIR.cpp:287
NodeID addGepObjNode(GepObjVar *gepObj, NodeID base, const APOffset &apOffset)
Definition SVFIR.cpp:546
void addFunArgs(FunEntryICFGNode *funEntryBlockNode, const FunObjVar *fun, const ValVar *arg)
Definition SVFIR.h:622
NodeID addVarargNode(NodeID i, const FunObjVar *val, const SVFType *type, const ICFGNode *n)
Add a unique vararg node for a procedure.
Definition SVFIR.h:796
void setCallGraph(CallGraph *cg)
Definition SVFIR.h:252
void addToTypeLocSetsMap(NodeID argId, SVFTypeLocSetsPair &locSets)
Add a base SVFType* and all its field location sets to an arg NodeId.
Definition SVFIR.h:334
NodeID addAsmPCValNode(NodeID i, const SVFType *type)
Definition SVFIR.h:856
CSToArgsListMap callSiteArgsListMap
Map a callsite to a list of all its actual parameters.
Definition SVFIR.h:90
void setCHG(CommonCHGraph *c)
Set/Get CHG.
Definition SVFIR.h:235
OffsetToGepVarMap GepObjVarMap
Map a pair<base,off> to a gep obj node id.
Definition SVFIR.h:84
const CallSiteToFunPtrMap & getIndirectCallsites() const
Add/get indirect callsites.
Definition SVFIR.h:451
bool isGepObjVar(NodeID id) const
Definition SVFIR.h:185
CommonCHGraph * getCHG()
Definition SVFIR.h:239
const SVFVar * getSVFVar(NodeID id) const
ObjVar/GepObjVar/BaseObjVar.
Definition SVFIR.h:133
bool callsiteHasRet(const RetICFGNode *cs) const
Definition SVFIR.h:411
NodeID addDummyValNode()
Definition SVFIR.h:564
SVFStmtList & getPTASVFStmtList(const ICFGNode *inst)
Given an instruction, get all its PTA PAGEdges.
Definition SVFIR.h:321
void addGepValObjFromDB(NodeID curInstID, const GepValVar *gepValvar)
Definition SVFIR.h:593
ICFGNode2SVFStmtsMap icfgNode2PTASVFStmtsMap
Map an ICFGNode to its PointerAnalysis related SVFStmts.
Definition SVFIR.h:81
NodeID addFunObjNode(NodeID id, ObjTypeInfo *ti, const ICFGNode *node)
Definition SVFIR.h:745
Map< const SVFVar *, CallPE * > FParmToCallPEMap
Definition SVFIR.h:60
OffsetToGepVarMap & getGepObjNodeMap()
Return GepObjVarMap.
Definition SVFIR.h:201
friend class GraphDBClient
Definition SVFIR.h:49
bool isObjVar(NodeID id) const
Definition SVFIR.h:177
Map< NodeID, NodeBS > MemObjToFieldsMap
Definition SVFIR.h:56
Map< NodePair, NodeID > NodePairSetMap
Definition SVFIR.h:75
Map< GepOffset, NodeID > OffsetToGepVarMap
Definition SVFIR.h:70
PhiStmt * addPhiStmt(NodeID res, NodeID opnd, const ICFGNode *pred)
Add phi node information.
Definition SVFIR.cpp:108
const ValVar * getFunRet(const FunObjVar *func) const
Get function return list.
Definition SVFIR.h:421
NodeID addBaseObjNode(BaseObjVar *node)
Definition SVFIR.h:583
OrderedNodeSet candidatePointers
Definition SVFIR.h:97
ICFG * icfg
Definition SVFIR.h:98
void setModuleIdentifier(const std::string &moduleIdentifier)
Definition SVFIR.h:288
Map< const FunObjVar *, const ValVar * > FunToRetMap
Definition SVFIR.h:64
CallSiteSet callSiteSet
Definition SVFIR.h:100
friend class TypeBasedHeapCloning
Definition SVFIR.h:47
NodeID getFIObjVar(NodeID id) const
Definition SVFIR.h:526
Map< const RetICFGNode *, const ValVar * > CSToRetMap
Definition SVFIR.h:63
SelectStmt * addSelectStmt(NodeID res, NodeID op1, NodeID op2, NodeID cond)
Add SelectStmt.
Definition SVFIR.cpp:141
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
Definition SVFIR.h:118
NodeID addConstantIntObjNode(NodeID i, ObjTypeInfo *ti, const std::pair< s64_t, u64_t > &intValue, const ICFGNode *node)
Definition SVFIR.h:759
Map< const FunObjVar *, SVFStmtSet > FunToPAGEdgeSetMap
Definition SVFIR.h:65
Map< NodeID, SVFTypeLocSetsPair > TypeLocSetsMap
Definition SVFIR.h:74
GepValueVarMap GepValObjMap
Map a pair<base,off> to a gep value node id.
Definition SVFIR.h:82
const ValVar * getBaseValVar(NodeID id) const
Definition SVFIR.h:506
const ValVarList & getCallSiteArgsList(const CallICFGNode *cs) const
Get callsite argument list.
Definition SVFIR.h:393
bool isBlkObjOrConstantObj(NodeID id) const
Get black hole and constant id.
Definition SVFIR.h:535
const GepObjVar * getGepObjVar(NodeID id) const
Definition SVFIR.h:167
const CallSiteSet & getIndCallSites(NodeID funPtr) const
Definition SVFIR.h:461
Map< NodeID, NodeAccessPathMap > GepValueVarMap
Definition SVFIR.h:72
bool isValidPointer(NodeID nodeId) const
Whether a node is a valid pointer.
Definition SVFIR.cpp:747
void addFunRet(FunExitICFGNode *funExitBlockNode, const FunObjVar *fun, const ValVar *ret)
Definition SVFIR.h:634
Map< NodeID, CallSiteSet > FunPtrToCallSitesMap
Definition SVFIR.h:55
void addGlobalPAGEdge(const SVFStmt *edge)
Add global PAGEdges (not in a procedure)
Definition SVFIR.h:878
const std::string & getModuleIdentifier() const
Definition SVFIR.h:259
BranchStmt * addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec &succs)
Add BranchStmt.
Definition SVFIR.cpp:240
NodeID addRetNode(const FunObjVar *, SVFVar *node)
Add a unique return node for a procedure.
Definition SVFIR.h:867
const ValVar * getValVar(NodeID id) const
Definition SVFIR.h:137
CallPE * getCallPEForFormalParm(const SVFVar *param) const
Get the CallPE for a formal parameter (phi-like, nullptr if not found)
Definition SVFIR.h:359
void addIndirectCallsites(const CallICFGNode *cs, NodeID funPtr)
Add indirect callsites.
Definition SVFIR.h:652
bool isBaseObjVar(NodeID id) const
Definition SVFIR.h:181
FunToArgsListMap & getFunArgsMap()
Get function arguments list.
Definition SVFIR.h:371
void initialiseCandidatePointers()
Initialize candidate pointers.
Definition SVFIR.cpp:731
NodeID addRetNode(NodeID i, const FunObjVar *callGraphNode, const SVFType *type, const ICFGNode *icn)
Add a unique return node for a procedure.
Definition SVFIR.h:790
static void setPagFromTXT(const std::string &txt)
Definition SVFIR.h:283
NodeID getFIObjVar(const BaseObjVar *obj) const
Get a field-insensitive obj SVFIR node according to a mem obj.
Definition SVFIR.h:522
FunPtrToCallSitesMap funPtrToCallSitesMap
Definition SVFIR.h:94
NodeID addArgValNode(NodeID i, u32_t argNo, const ICFGNode *icfgNode, const FunObjVar *callGraphNode, const SVFType *type)
Definition SVFIR.h:675
void addCallSiteRets(RetICFGNode *retBlockNode, const ValVar *arg)
Add callsite returns.
Definition SVFIR.h:646
SVFTypeLocSetsPair & getTypeLocSetsMap(NodeID argId)
Given an arg NodeId, get its base SVFType* and all its field location sets.
Definition SVFIR.h:339
NodeID addDummyObjNode(const SVFType *type)
Definition SVFIR.h:568
MemObjToFieldsMap & getMemToFieldsMap()
Return memToFieldsMap.
Definition SVFIR.h:196
NodeID addConstantObjNode()
Definition SVFIR.h:840
GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy
Represents a stack-allocated object variable in the SVFIR (SVF Intermediate Representation) @inherits...
for isBitcode
Definition BasicTypes.h:70
OrderedSet< NodeID > OrderedNodeSet
u32_t NodeID
Definition GeneralType.h:56
s64_t APOffset
Definition GeneralType.h:60
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76
SVFIR PAG
Definition SVFIR.h:950
unsigned u32_t
Definition GeneralType.h:47