Static Value-Flow Analysis
Loading...
Searching...
No Matches
LLVMModule.h
Go to the documentation of this file.
1//===- LLVMModule.h -- LLVM Module class-----------------------------------------//
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 * LLVMModule.h
25 *
26 * Created on: 23 Mar.2020
27 * Author: Yulei Sui
28 * Refactored on: Jan 25, 2024
29 * Author: Xiao Cheng, Yulei Sui
30 */
31
32#ifndef INCLUDE_SVF_FE_LLVMMODULE_H_
33#define INCLUDE_SVF_FE_LLVMMODULE_H_
34
35#include "SVF-LLVM/BasicTypes.h"
36#include "SVF-LLVM/LLVMUtil.h"
37#include "Util/Options.h"
38#include "Graphs/BasicBlockG.h"
39#include "Graphs/ICFGNode.h"
40#include "SVFIR/SVFIR.h"
41
42namespace SVF
43{
44
45class ObjTypeInference;
46
48{
49 friend class SVFIRBuilder;
50 friend class ICFGBuilder;
51 friend class SymbolTableBuilder;
52
53public:
54
55 typedef std::vector<const Function*> FunctionSetType;
59
66
72
76
78
79 typedef std::vector<const Function*> FunctionSet;
82
83private:
85 static bool preProcessed;
87 std::unique_ptr<LLVMContext> owned_ctx;
88 std::vector<std::unique_ptr<Module>> owned_modules;
89 std::vector<std::reference_wrapper<Module>> modules;
90
93
98
99 // Map SVFFunction to its annotations
101
104
110
117
119
124
128
131
132 void build();
133
134public:
136
138 {
139 if (!llvmModuleSet)
141 return llvmModuleSet;
142 }
143
145 {
146 delete llvmModuleSet;
147 llvmModuleSet = nullptr;
149 }
150
151 // Build an SVF module from a given LLVM Module instance (for use e.g. in a LLVM pass)
152 static void buildSVFModule(Module& mod);
153
154 // Build an SVF module from the bitcode files provided in `moduleNameVec`
155 static void buildSVFModule(const std::vector<std::string>& moduleNameVec);
156
157 static void preProcessBCs(std::vector<std::string>& moduleNameVec);
158
160 {
161 return modules.size();
162 }
163
164 const std::vector<std::reference_wrapper<Module>>& getLLVMModules() const
165 {
166 return modules;
167 }
168
170 {
171 return &getModuleRef(idx);
172 }
173
175 {
176 assert(idx < getModuleNum() && "Out of range.");
177 return modules[idx];
178 }
179
180 // Dump modules to files
181 void dumpModulesToFile(const std::string& suffix);
182
183public:
184
185 inline const BasicBlock* getFunExitBB(const Function* fun) const
186 {
187 auto it = funToExitBB.find(fun);
188 if (it == funToExitBB.end()) return nullptr;
189 else return it->second;
190 }
191
192 inline const Function* getRealDefFun(const Function* fun) const
193 {
194 auto it = funToRealDefFun.find(fun);
195 if (it == funToRealDefFun.end()) return nullptr;
196 else return it->second;
197 }
198
199 inline const FunctionSet& getFunctionSet() const
200 {
201 return funSet;
202 }
203
204 inline u32_t getValueNodeNum() const
205 {
206 return valSymMap.size();
207 }
208
209 inline u32_t getObjNodeNum() const
210 {
211 return objSymMap.size();
212 }
213
215 {
216 return valSymMap;
217 }
218
220 {
221 return objSymMap;
222 }
223
226 NodeID getValueNode(const Value* V);
227
228 bool hasValueNode(const Value* V);
229
232 NodeID getObjectNode(const Value* V);
233
234 void dumpSymTable();
235
236public:
237
238 // create a SVFBasicBlock according to LLVM BasicBlock, then add it to SVFFunction's BasicBlockGraph
239 inline void addBasicBlock(FunObjVar* fun, const BasicBlock* bb)
240 {
241 SVFBasicBlock* svfBB = fun->getBasicBlockGraph()->addBasicBlock(bb->getName().str());
242 LLVMBB2SVFBB[bb] = svfBB;
244 }
245
247 {
248 CSToCallNodeMap[inst] = svfInst;
250 }
252 {
253 CSToRetNodeMap[inst] = svfInst;
255 }
257 {
260 }
261
262 inline bool hasLLVMValue(const SVFValue* value) const
263 {
264 return SVFBaseNode2LLVMValue.find(value) != SVFBaseNode2LLVMValue.end();
265 }
266
267 const Value* getLLVMValue(const SVFValue* value) const
268 {
269 SVFBaseNode2LLVMValueMap ::const_iterator it = SVFBaseNode2LLVMValue.find(value);
270 assert(it != SVFBaseNode2LLVMValue.end() && "can't find corresponding llvm value!");
271 return it->second;
272 }
273
274 inline const FunObjVar* getFunObjVar(const Function* fun) const
275 {
276 LLVMFun2FunObjVarMap::const_iterator it = LLVMFun2FunObjVar.find(fun);
277 assert(it!=LLVMFun2FunObjVar.end() && "SVF Function not found!");
278 return it->second;
279 }
280
282 {
283 return returnSymMap;
284 }
285
287 {
288 return varargSymMap;
289 }
290
292 {
293 FunToIDMapTy::const_iterator iter = returnSymMap.find(func);
294 assert(iter!=returnSymMap.end() && "ret sym not found");
295 return iter->second;
296 }
297
299 {
300 FunToIDMapTy::const_iterator iter = varargSymMap.find(func);
301 assert(iter!=varargSymMap.end() && "vararg sym not found");
302 return iter->second;
303 }
304
306 {
307 LLVMBB2SVFBBMap::const_iterator it = LLVMBB2SVFBB.find(bb);
308 assert(it!=LLVMBB2SVFBB.end() && "SVF BasicBlock not found!");
309 return it->second;
310 }
311
313 inline const Function* getFunction(const std::string& name)
314 {
315 Function* fun = nullptr;
316
317 for (u32_t i = 0; i < llvmModuleSet->getModuleNum(); ++i)
318 {
320 fun = mod->getFunction(name);
321 if (fun)
322 {
323 return fun;
324 }
325 }
326 return nullptr;
327 }
328
330 const FunObjVar* getFunObjVar(const std::string& name);
331
332 ICFGNode* getICFGNode(const Instruction* inst);
333
334 bool hasICFGNode(const Instruction* inst);
335
342
345 {
347 assert(b && "Function entry not created?");
348 return b;
349 }
352 {
354 assert(b && "Function exit not created?");
355 return b;
356 }
357
358
360 bool hasGlobalRep(const GlobalVariable* val) const
361 {
362 GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
363 return it != GlobalDefToRepMap.end();
364 }
365
367 {
368 GlobalDefToRepMapTy::const_iterator it = GlobalDefToRepMap.find(val);
369 assert(it != GlobalDefToRepMap.end() && "has no rep?");
370 return it->second;
371 }
372
374 {
375 assert(!empty() && "empty LLVM module!!");
376 for (size_t i = 0; i < getModuleNum(); ++i)
377 {
378 Module& module = getModuleRef(i);
379 if (module.getName().str() != ExtAPI::getExtAPI()->getExtBcPath())
380 {
381 return &module;
382 }
383 }
384 assert(false && "no main module found!");
385 return nullptr;
386 }
387
389 {
390 return targetABI;
391 }
392
394 {
395 assert(!empty() && "empty LLVM module!!");
396 return getMainLLVMModule()->getContext();
397 }
398
399 bool empty() const
400 {
401 return getModuleNum() == 0;
402 }
403
405 SVFType* getSVFType(const Type* T);
407 const Type* getLLVMType(const SVFType* T) const;
408
410
411 DominatorTree& getDomTree(const Function* fun);
412
413 std::string getExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
414
415 const std::vector<std::string>& getExtFuncAnnotations(const Function* fun);
416
417 // Does (F) have some annotation?
418 bool hasExtFuncAnnotation(const Function* fun, const std::string& funcAnnotation);
419
420 // Does (F) have a static var X (unavailable to us) that its return points to?
421 bool has_static(const Function *F);
422
423 // Does (F) have a memcpy_like operation?
424 bool is_memcpy(const Function *F);
425
426 // Does (F) have a memset_like operation?
427 bool is_memset(const Function *F);
428
429 // Does (F) allocate a new object and return it?
430 bool is_alloc(const Function *F);
431
432 // Does (F) allocate a new object and assign it to one of its arguments?
433 bool is_arg_alloc(const Function *F);
434
435 // Does (F) allocate a new stack object and return it?
436 bool is_alloc_stack_ret(const Function *F);
437
438 // Get the position of argument which holds the new object
440
441 // Does (F) reallocate a new object?
442 bool is_realloc(const Function *F);
443
444 // Should (F) be considered "external" (either not defined in the program
445 // or a user-defined version of a known alloc or no-op)?
446 bool is_ext(const Function *F);
447
448 // Set the annotation of (F)
449 void setExtFuncAnnotations(const Function* fun, const std::vector<std::string>& funcAnnotations);
450
451private:
452 inline void addFunctionSet(const Function* svfFunc)
453 {
454 funSet.push_back(svfFunc);
455 }
456
457 inline void setFunExitBB(const Function* fun, const BasicBlock* bb)
458 {
459 funToExitBB[fun] = bb;
460 }
461
462 inline void setFunRealDefFun(const Function* fun, const Function* realDefFun)
463 {
464 funToRealDefFun[fun] = realDefFun;
465 }
467 SVFType* addSVFTypeInfo(const Type* t);
469 StInfo* collectTypeInfo(const Type* ty);
476
477 std::vector<const Function*> getLLVMGlobalFunctions(const GlobalVariable* global);
478
479 void loadModules(const std::vector<std::string>& moduleNameVec);
480 // Loads ExtAPI bitcode file; uses LLVMContext made while loading module bitcode files or from Module
481 void loadExtAPIModules();
482 void addSVFMain();
483
485
487 void buildFunToFunMap();
490 void prePassSchedule();
491 void buildSymbolTable() const;
493
496 {
497 CSToCallNodeMapTy::const_iterator it = CSToCallNodeMap.find(cs);
498 if (it == CSToCallNodeMap.end())
499 return nullptr;
500 return it->second;
501 }
502
505 {
506 CSToRetNodeMapTy::const_iterator it = CSToRetNodeMap.find(cs);
507 if (it == CSToRetNodeMap.end())
508 return nullptr;
509 return it->second;
510 }
511
513 {
514 InstToBlockNodeMapTy::const_iterator it = InstToBlockNodeMap.find(inst);
515 if (it == InstToBlockNodeMap.end())
516 return nullptr;
517 return it->second;
518 }
519
522 {
523 FunToFunEntryNodeMapTy::const_iterator it = FunToFunEntryNodeMap.find(fun);
524 if (it == FunToFunEntryNodeMap.end())
525 return nullptr;
526 return it->second;
527 }
528
531 {
532 FunToFunExitNodeMapTy::const_iterator it = FunToFunExitNodeMap.find(fun);
533 if (it == FunToFunExitNodeMap.end())
534 return nullptr;
535 return it->second;
536 }
537};
538
539} // End namespace SVF
540
541#endif /* INCLUDE_SVF_FE_LLVMMODULE_H_ */
const cJSON *const b
Definition cJSON.h:255
const char *const name
Definition cJSON.h:264
SVFBasicBlock * addBasicBlock(const std::string &bbname)
std::string getExtBcPath()
Definition ExtAPI.cpp:111
static ExtAPI * getExtAPI()
Definition ExtAPI.cpp:43
BasicBlockGraph * getBasicBlockGraph()
bool hasValueNode(const Value *V)
TargetABI targetABI
C++ ABI of the module being analyzed.
Definition LLVMModule.h:92
NodeID getValueNode(const Value *V)
IntraICFGNode * getIntraBlock(const Instruction *inst)
Definition LLVMModule.h:512
LLVMType2SVFTypeMap LLVMType2SVFType
Definition LLVMModule.h:107
ValueToIDMapTy & valSyms()
Definition LLVMModule.h:214
bool is_alloc_stack_ret(const Function *F)
std::vector< const Function * > getLLVMGlobalFunctions(const GlobalVariable *global)
bool hasGlobalRep(const GlobalVariable *val) const
Global to rep.
Definition LLVMModule.h:360
LLVMBB2SVFBBMap LLVMBB2SVFBB
Definition LLVMModule.h:106
FunToIDMapTy & retSyms()
Definition LLVMModule.h:281
FunExitICFGNode * getFunExitBlock(const Function *fun)
Get/Add a function exit node.
Definition LLVMModule.h:530
void buildSymbolTable() const
std::vector< const Function * > FunctionSetType
Definition LLVMModule.h:55
Module * getMainLLVMModule() const
Definition LLVMModule.h:373
const FunObjVar * getFunObjVar(const Function *fun) const
Definition LLVMModule.h:274
ValueToIDMapTy valSymMap
map a value to its sym id
Definition LLVMModule.h:120
Map< const Function *, FunObjVar * > LLVMFun2FunObjVarMap
Definition LLVMModule.h:60
StInfo * collectTypeInfo(const Type *ty)
Collect a type info.
InstToBlockNodeMapTy InstToBlockNodeMap
map a basic block to its ICFGNode
Definition LLVMModule.h:114
static LLVMModuleSet * getLLVMModuleSet()
Definition LLVMModule.h:137
void setFunRealDefFun(const Function *fun, const Function *realDefFun)
Definition LLVMModule.h:462
GlobalVariable * getGlobalRep(const GlobalVariable *val) const
Definition LLVMModule.h:366
SVFBasicBlock * getSVFBasicBlock(const BasicBlock *bb)
Definition LLVMModule.h:305
Map< const Function *, FunEntryICFGNode * > FunToFunEntryNodeMapTy
Definition LLVMModule.h:70
void loadModules(const std::vector< std::string > &moduleNameVec)
u32_t getObjNodeNum() const
Definition LLVMModule.h:209
std::vector< const Function * > FunctionSet
Definition LLVMModule.h:79
ObjTypeInference * typeInference
Definition LLVMModule.h:109
static void releaseLLVMModuleSet()
Definition LLVMModule.h:144
static void preProcessBCs(std::vector< std::string > &moduleNameVec)
static bool preProcessed
Definition LLVMModule.h:85
Map< const Function *, const BasicBlock * > FunToExitBBMap
Definition LLVMModule.h:80
Module & getModuleRef(u32_t idx) const
Definition LLVMModule.h:174
FunEntryICFGNode * getFunEntryICFGNode(const Function *fun)
Add a function entry node.
Definition LLVMModule.h:344
void addInstructionMap(const Instruction *inst, CallICFGNode *svfInst)
Definition LLVMModule.h:246
Map< const Type *, StInfo * > Type2TypeInfoMap
Definition LLVMModule.h:64
void addInstructionMap(const Instruction *inst, RetICFGNode *svfInst)
Definition LLVMModule.h:251
Map< const BasicBlock *, SVFBasicBlock * > LLVMBB2SVFBBMap
Definition LLVMModule.h:61
bool hasLLVMValue(const SVFValue *value) const
Definition LLVMModule.h:262
DominatorTree & getDomTree(const Function *fun)
TargetABI getTargetABI() const
Definition LLVMModule.h:388
FunToRealDefFunMap funToRealDefFun
Definition LLVMModule.h:127
void addToSVFVar2LLVMValueMap(const Value *val, SVFValue *svfBaseNode)
Map< const Function *, const Function * > FunToRealDefFunMap
Definition LLVMModule.h:81
OrderedMap< const Value *, NodeID > ValueToIDMapTy
Definition LLVMModule.h:75
LLVMFun2FunObjVarMap LLVMFun2FunObjVar
Map an LLVM Function to an SVF Funobjvar.
Definition LLVMModule.h:105
RetICFGNode * getRetBlock(const Instruction *cs)
Get/Add a return node.
Definition LLVMModule.h:504
std::unique_ptr< LLVMContext > owned_ctx
Definition LLVMModule.h:87
FunToIDMapTy varargSymMap
vararg map
Definition LLVMModule.h:123
void createSVFDataStructure()
Map< const GlobalVariable *, GlobalVariable * > GlobalDefToRepMapTy
Definition LLVMModule.h:58
StInfo * collectSimpleTypeInfo(const Type *T)
Collect simple type (non-aggregate) info.
bool is_alloc(const Function *F)
Map< const Instruction *, RetICFGNode * > CSToRetNodeMapTy
Definition LLVMModule.h:68
Map< const Instruction *, IntraICFGNode * > InstToBlockNodeMapTy
Definition LLVMModule.h:69
const Value * getLLVMValue(const SVFValue *value) const
Definition LLVMModule.h:267
const std::vector< std::string > & getExtFuncAnnotations(const Function *fun)
SVFType * getSVFType(const Type *T)
Get or create SVFType and typeinfo.
void setFunExitBB(const Function *fun, const BasicBlock *bb)
Definition LLVMModule.h:457
const Type * getLLVMType(const SVFType *T) const
Get LLVM Type.
NodeID getReturnNode(const Function *func) const
Definition LLVMModule.h:291
Map< const Function *, FunExitICFGNode * > FunToFunExitNodeMapTy
Definition LLVMModule.h:71
void setExtFuncAnnotations(const Function *fun, const std::vector< std::string > &funcAnnotations)
bool hasICFGNode(const Instruction *inst)
CallICFGNode * getCallBlock(const Instruction *cs)
Get/Add a call node.
Definition LLVMModule.h:495
ValueToIDMapTy objSymMap
map a obj reference to its sym id
Definition LLVMModule.h:121
Map< const SVFValue *, const Value * > SVFBaseNode2LLVMValueMap
Definition LLVMModule.h:62
OrderedMap< const Function *, NodeID > FunToIDMapTy
Definition LLVMModule.h:77
ICFGNode * getICFGNode(const Instruction *inst)
Get a basic block ICFGNode.
const Function * getFunction(const std::string &name)
Get the corresponding Function based on its name.
Definition LLVMModule.h:313
NodeID getVarargNode(const Function *func) const
Definition LLVMModule.h:298
CallICFGNode * getCallICFGNode(const Instruction *cs)
get a call node
Fun2AnnoMap ExtFun2Annotations
Record annotations of function in extapi.bc.
Definition LLVMModule.h:97
bool is_arg_alloc(const Function *F)
Map< const Function *, std::vector< std::string > > func2Annotations
Definition LLVMModule.h:100
const BasicBlock * getFunExitBB(const Function *fun) const
Definition LLVMModule.h:185
NodeID getObjectNode(const Value *V)
Module * getModule(u32_t idx) const
Definition LLVMModule.h:169
RetICFGNode * getRetICFGNode(const Instruction *cs)
get a return node
void prePassSchedule()
Invoke llvm passes to modify module.
bool has_static(const Function *F)
StInfo * collectStructInfo(const StructType *structTy, u32_t &numFields)
Collect the struct info and set the number of fields after flattening.
CSToCallNodeMapTy CSToCallNodeMap
map a callsite to its CallICFGNode
Definition LLVMModule.h:112
s32_t get_alloc_arg_pos(const Function *F)
void addFunctionSet(const Function *svfFunc)
Definition LLVMModule.h:452
FunToIDMapTy returnSymMap
return map
Definition LLVMModule.h:122
const std::vector< std::reference_wrapper< Module > > & getLLVMModules() const
Definition LLVMModule.h:164
LLVMContext & getContext() const
Definition LLVMModule.h:393
bool is_ext(const Function *F)
Map< const Function *, DominatorTree > FunToDominatorTree
Definition LLVMModule.h:118
CSToRetNodeMapTy CSToRetNodeMap
map a callsite to its RetICFGNode
Definition LLVMModule.h:113
static void buildSVFModule(Module &mod)
SVFBaseNode2LLVMValueMap SVFBaseNode2LLVMValue
Definition LLVMModule.h:111
FunExitICFGNode * getFunExitICFGNode(const Function *fun)
Add a function exit node.
Definition LLVMModule.h:351
FunToExitBBMap funToExitBB
Definition LLVMModule.h:126
StInfo * collectArrayInfo(const ArrayType *T)
Collect the array info.
LLVMModuleSet()
Constructor.
SVFType * addSVFTypeInfo(const Type *t)
Create SVFTypes.
FunctionSet funSet
Definition LLVMModule.h:125
FunEntryICFGNode * getFunEntryBlock(const Function *fun)
Get/Add a function entry node.
Definition LLVMModule.h:521
u32_t getValueNodeNum() const
Definition LLVMModule.h:204
Map< const Instruction *, CallICFGNode * > CSToCallNodeMapTy
Definition LLVMModule.h:67
void addInstructionMap(const Instruction *inst, IntraICFGNode *svfInst)
Definition LLVMModule.h:256
FunctionSetType ExtFuncsVec
Record some "sse_" function declarations used in other ext function definition, e....
Definition LLVMModule.h:95
bool hasExtFuncAnnotation(const Function *fun, const std::string &funcAnnotation)
FunToFunEntryNodeMapTy FunToFunEntryNodeMap
map a function to its FunExitICFGNode
Definition LLVMModule.h:115
const Function * getRealDefFun(const Function *fun) const
Definition LLVMModule.h:192
static LLVMModuleSet * llvmModuleSet
Definition LLVMModule.h:84
IntraICFGNode * getIntraICFGNode(const Instruction *inst)
get a intra node
std::vector< std::reference_wrapper< Module > > modules
Definition LLVMModule.h:89
Map< const Function *, const Function * > FunDeclToDefMapTy
Definition LLVMModule.h:56
ValueToIDMapTy & objSyms()
Definition LLVMModule.h:219
std::string getExtFuncAnnotation(const Function *fun, const std::string &funcAnnotation)
FunToFunExitNodeMapTy FunToFunExitNodeMap
map a function to its FunEntryICFGNode
Definition LLVMModule.h:116
bool empty() const
Definition LLVMModule.h:399
Map< std::string, std::vector< std::string > > Fun2AnnoMap
Definition LLVMModule.h:65
u32_t getModuleNum() const
Definition LLVMModule.h:159
GlobalDefToRepMapTy GlobalDefToRepMap
Global definition to a rep definition map.
Definition LLVMModule.h:103
std::vector< std::unique_ptr< Module > > owned_modules
Definition LLVMModule.h:88
void addBasicBlock(FunObjVar *fun, const BasicBlock *bb)
Definition LLVMModule.h:239
bool is_memset(const Function *F)
FunToIDMapTy & varargSyms()
Definition LLVMModule.h:286
const FunctionSet & getFunctionSet() const
Definition LLVMModule.h:199
Map< const Type *, SVFType * > LLVMType2SVFTypeMap
Definition LLVMModule.h:63
Type2TypeInfoMap Type2TypeInfo
Definition LLVMModule.h:108
Map< const Function *, FunctionSetType > FunDefToDeclsMapTy
Definition LLVMModule.h:57
void dumpModulesToFile(const std::string &suffix)
void collectExtFunAnnotations(const Module *mod)
bool is_memcpy(const Function *F)
ObjTypeInference * getTypeInference()
bool is_realloc(const Function *F)
static void unset(void)
Deletes the (singleton) allocator.
for isBitcode
Definition BasicTypes.h:70
llvm::GlobalVariable GlobalVariable
Definition BasicTypes.h:137
llvm::ArrayType ArrayType
Definition BasicTypes.h:99
llvm::Type Type
Definition BasicTypes.h:87
llvm::BasicBlock BasicBlock
Definition BasicTypes.h:90
llvm::StructType StructType
LLVM types.
Definition BasicTypes.h:98
u32_t NodeID
Definition GeneralType.h:76
llvm::Function Function
Definition BasicTypes.h:89
llvm::Instruction Instruction
Definition BasicTypes.h:91
TargetABI
C++ ABI inferred from the target triple.
Definition LLVMUtil.h:50
llvm::Value Value
LLVM Basic classes.
Definition BasicTypes.h:86
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76
signed s32_t
Definition GeneralType.h:68
llvm::Module Module
Definition BasicTypes.h:88
unsigned u32_t
Definition GeneralType.h:67
llvm::DominatorTree DominatorTree
LLVM Dominators.
Definition BasicTypes.h:140
llvm::LLVMContext LLVMContext
Definition BasicTypes.h:72