xref: /llvm-project/llvm/lib/IR/Module.cpp (revision b518054b87c40afc4c301dfb26eaa11ee8902208)
1 //===-- Module.cpp - Implement the Module class ---------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the Module class for the IR library.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/IR/Module.h"
15 #include "SymbolTableListTraitsImpl.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/ADT/SmallPtrSet.h"
18 #include "llvm/ADT/SmallString.h"
19 #include "llvm/ADT/StringExtras.h"
20 #include "llvm/IR/Constants.h"
21 #include "llvm/IR/DerivedTypes.h"
22 #include "llvm/IR/DebugInfoMetadata.h"
23 #include "llvm/IR/GVMaterializer.h"
24 #include "llvm/IR/InstrTypes.h"
25 #include "llvm/IR/LLVMContext.h"
26 #include "llvm/IR/TypeFinder.h"
27 #include "llvm/Support/Dwarf.h"
28 #include "llvm/Support/Error.h"
29 #include "llvm/Support/MemoryBuffer.h"
30 #include "llvm/Support/Path.h"
31 #include "llvm/Support/RandomNumberGenerator.h"
32 #include <algorithm>
33 #include <cstdarg>
34 #include <cstdlib>
35 
36 using namespace llvm;
37 
38 //===----------------------------------------------------------------------===//
39 // Methods to implement the globals and functions lists.
40 //
41 
42 // Explicit instantiations of SymbolTableListTraits since some of the methods
43 // are not in the public header file.
44 template class llvm::SymbolTableListTraits<Function>;
45 template class llvm::SymbolTableListTraits<GlobalVariable>;
46 template class llvm::SymbolTableListTraits<GlobalAlias>;
47 template class llvm::SymbolTableListTraits<GlobalIFunc>;
48 
49 //===----------------------------------------------------------------------===//
50 // Primitive Module methods.
51 //
52 
53 Module::Module(StringRef MID, LLVMContext &C)
54     : Context(C), Materializer(), ModuleID(MID), SourceFileName(MID), DL("") {
55   ValSymTab = new ValueSymbolTable();
56   NamedMDSymTab = new StringMap<NamedMDNode *>();
57   Context.addModule(this);
58 }
59 
60 Module::~Module() {
61   Context.removeModule(this);
62   dropAllReferences();
63   GlobalList.clear();
64   FunctionList.clear();
65   AliasList.clear();
66   IFuncList.clear();
67   NamedMDList.clear();
68   delete ValSymTab;
69   delete static_cast<StringMap<NamedMDNode *> *>(NamedMDSymTab);
70 }
71 
72 RandomNumberGenerator *Module::createRNG(const Pass* P) const {
73   SmallString<32> Salt(P->getPassName());
74 
75   // This RNG is guaranteed to produce the same random stream only
76   // when the Module ID and thus the input filename is the same. This
77   // might be problematic if the input filename extension changes
78   // (e.g. from .c to .bc or .ll).
79   //
80   // We could store this salt in NamedMetadata, but this would make
81   // the parameter non-const. This would unfortunately make this
82   // interface unusable by any Machine passes, since they only have a
83   // const reference to their IR Module. Alternatively we can always
84   // store salt metadata from the Module constructor.
85   Salt += sys::path::filename(getModuleIdentifier());
86 
87   return new RandomNumberGenerator(Salt);
88 }
89 
90 /// getNamedValue - Return the first global value in the module with
91 /// the specified name, of arbitrary type.  This method returns null
92 /// if a global with the specified name is not found.
93 GlobalValue *Module::getNamedValue(StringRef Name) const {
94   return cast_or_null<GlobalValue>(getValueSymbolTable().lookup(Name));
95 }
96 
97 /// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
98 /// This ID is uniqued across modules in the current LLVMContext.
99 unsigned Module::getMDKindID(StringRef Name) const {
100   return Context.getMDKindID(Name);
101 }
102 
103 /// getMDKindNames - Populate client supplied SmallVector with the name for
104 /// custom metadata IDs registered in this LLVMContext.   ID #0 is not used,
105 /// so it is filled in as an empty string.
106 void Module::getMDKindNames(SmallVectorImpl<StringRef> &Result) const {
107   return Context.getMDKindNames(Result);
108 }
109 
110 void Module::getOperandBundleTags(SmallVectorImpl<StringRef> &Result) const {
111   return Context.getOperandBundleTags(Result);
112 }
113 
114 //===----------------------------------------------------------------------===//
115 // Methods for easy access to the functions in the module.
116 //
117 
118 // getOrInsertFunction - Look up the specified function in the module symbol
119 // table.  If it does not exist, add a prototype for the function and return
120 // it.  This is nice because it allows most passes to get away with not handling
121 // the symbol table directly for this common task.
122 //
123 Constant *Module::getOrInsertFunction(StringRef Name, FunctionType *Ty,
124                                       AttributeList AttributeList) {
125   // See if we have a definition for the specified function already.
126   GlobalValue *F = getNamedValue(Name);
127   if (!F) {
128     // Nope, add it
129     Function *New = Function::Create(Ty, GlobalVariable::ExternalLinkage, Name);
130     if (!New->isIntrinsic())       // Intrinsics get attrs set on construction
131       New->setAttributes(AttributeList);
132     FunctionList.push_back(New);
133     return New;                    // Return the new prototype.
134   }
135 
136   // If the function exists but has the wrong type, return a bitcast to the
137   // right type.
138   if (F->getType() != PointerType::getUnqual(Ty))
139     return ConstantExpr::getBitCast(F, PointerType::getUnqual(Ty));
140 
141   // Otherwise, we just found the existing function or a prototype.
142   return F;
143 }
144 
145 Constant *Module::getOrInsertFunction(StringRef Name,
146                                       FunctionType *Ty) {
147   return getOrInsertFunction(Name, Ty, AttributeList());
148 }
149 
150 // getOrInsertFunction - Look up the specified function in the module symbol
151 // table.  If it does not exist, add a prototype for the function and return it.
152 // This version of the method takes a null terminated list of function
153 // arguments, which makes it easier for clients to use.
154 //
155 Constant *Module::getOrInsertFunction(StringRef Name,
156                                       AttributeList AttributeList, Type *RetTy,
157                                       ...) {
158   va_list Args;
159   va_start(Args, RetTy);
160 
161   // Build the list of argument types...
162   std::vector<Type*> ArgTys;
163   while (Type *ArgTy = va_arg(Args, Type*))
164     ArgTys.push_back(ArgTy);
165 
166   va_end(Args);
167 
168   // Build the function type and chain to the other getOrInsertFunction...
169   return getOrInsertFunction(Name,
170                              FunctionType::get(RetTy, ArgTys, false),
171                              AttributeList);
172 }
173 
174 Constant *Module::getOrInsertFunction(StringRef Name,
175                                       Type *RetTy, ...) {
176   va_list Args;
177   va_start(Args, RetTy);
178 
179   // Build the list of argument types...
180   std::vector<Type*> ArgTys;
181   while (Type *ArgTy = va_arg(Args, Type*))
182     ArgTys.push_back(ArgTy);
183 
184   va_end(Args);
185 
186   // Build the function type and chain to the other getOrInsertFunction...
187   return getOrInsertFunction(Name, FunctionType::get(RetTy, ArgTys, false),
188                              AttributeList());
189 }
190 
191 // getFunction - Look up the specified function in the module symbol table.
192 // If it does not exist, return null.
193 //
194 Function *Module::getFunction(StringRef Name) const {
195   return dyn_cast_or_null<Function>(getNamedValue(Name));
196 }
197 
198 //===----------------------------------------------------------------------===//
199 // Methods for easy access to the global variables in the module.
200 //
201 
202 /// getGlobalVariable - Look up the specified global variable in the module
203 /// symbol table.  If it does not exist, return null.  The type argument
204 /// should be the underlying type of the global, i.e., it should not have
205 /// the top-level PointerType, which represents the address of the global.
206 /// If AllowLocal is set to true, this function will return types that
207 /// have an local. By default, these types are not returned.
208 ///
209 GlobalVariable *Module::getGlobalVariable(StringRef Name, bool AllowLocal) {
210   if (GlobalVariable *Result =
211       dyn_cast_or_null<GlobalVariable>(getNamedValue(Name)))
212     if (AllowLocal || !Result->hasLocalLinkage())
213       return Result;
214   return nullptr;
215 }
216 
217 /// getOrInsertGlobal - Look up the specified global in the module symbol table.
218 ///   1. If it does not exist, add a declaration of the global and return it.
219 ///   2. Else, the global exists but has the wrong type: return the function
220 ///      with a constantexpr cast to the right type.
221 ///   3. Finally, if the existing global is the correct declaration, return the
222 ///      existing global.
223 Constant *Module::getOrInsertGlobal(StringRef Name, Type *Ty) {
224   // See if we have a definition for the specified global already.
225   GlobalVariable *GV = dyn_cast_or_null<GlobalVariable>(getNamedValue(Name));
226   if (!GV) {
227     // Nope, add it
228     GlobalVariable *New =
229       new GlobalVariable(*this, Ty, false, GlobalVariable::ExternalLinkage,
230                          nullptr, Name);
231      return New;                    // Return the new declaration.
232   }
233 
234   // If the variable exists but has the wrong type, return a bitcast to the
235   // right type.
236   Type *GVTy = GV->getType();
237   PointerType *PTy = PointerType::get(Ty, GVTy->getPointerAddressSpace());
238   if (GVTy != PTy)
239     return ConstantExpr::getBitCast(GV, PTy);
240 
241   // Otherwise, we just found the existing function or a prototype.
242   return GV;
243 }
244 
245 //===----------------------------------------------------------------------===//
246 // Methods for easy access to the global variables in the module.
247 //
248 
249 // getNamedAlias - Look up the specified global in the module symbol table.
250 // If it does not exist, return null.
251 //
252 GlobalAlias *Module::getNamedAlias(StringRef Name) const {
253   return dyn_cast_or_null<GlobalAlias>(getNamedValue(Name));
254 }
255 
256 GlobalIFunc *Module::getNamedIFunc(StringRef Name) const {
257   return dyn_cast_or_null<GlobalIFunc>(getNamedValue(Name));
258 }
259 
260 /// getNamedMetadata - Return the first NamedMDNode in the module with the
261 /// specified name. This method returns null if a NamedMDNode with the
262 /// specified name is not found.
263 NamedMDNode *Module::getNamedMetadata(const Twine &Name) const {
264   SmallString<256> NameData;
265   StringRef NameRef = Name.toStringRef(NameData);
266   return static_cast<StringMap<NamedMDNode*> *>(NamedMDSymTab)->lookup(NameRef);
267 }
268 
269 /// getOrInsertNamedMetadata - Return the first named MDNode in the module
270 /// with the specified name. This method returns a new NamedMDNode if a
271 /// NamedMDNode with the specified name is not found.
272 NamedMDNode *Module::getOrInsertNamedMetadata(StringRef Name) {
273   NamedMDNode *&NMD =
274     (*static_cast<StringMap<NamedMDNode *> *>(NamedMDSymTab))[Name];
275   if (!NMD) {
276     NMD = new NamedMDNode(Name);
277     NMD->setParent(this);
278     NamedMDList.push_back(NMD);
279   }
280   return NMD;
281 }
282 
283 /// eraseNamedMetadata - Remove the given NamedMDNode from this module and
284 /// delete it.
285 void Module::eraseNamedMetadata(NamedMDNode *NMD) {
286   static_cast<StringMap<NamedMDNode *> *>(NamedMDSymTab)->erase(NMD->getName());
287   NamedMDList.erase(NMD->getIterator());
288 }
289 
290 bool Module::isValidModFlagBehavior(Metadata *MD, ModFlagBehavior &MFB) {
291   if (ConstantInt *Behavior = mdconst::dyn_extract_or_null<ConstantInt>(MD)) {
292     uint64_t Val = Behavior->getLimitedValue();
293     if (Val >= ModFlagBehaviorFirstVal && Val <= ModFlagBehaviorLastVal) {
294       MFB = static_cast<ModFlagBehavior>(Val);
295       return true;
296     }
297   }
298   return false;
299 }
300 
301 /// getModuleFlagsMetadata - Returns the module flags in the provided vector.
302 void Module::
303 getModuleFlagsMetadata(SmallVectorImpl<ModuleFlagEntry> &Flags) const {
304   const NamedMDNode *ModFlags = getModuleFlagsMetadata();
305   if (!ModFlags) return;
306 
307   for (const MDNode *Flag : ModFlags->operands()) {
308     ModFlagBehavior MFB;
309     if (Flag->getNumOperands() >= 3 &&
310         isValidModFlagBehavior(Flag->getOperand(0), MFB) &&
311         dyn_cast_or_null<MDString>(Flag->getOperand(1))) {
312       // Check the operands of the MDNode before accessing the operands.
313       // The verifier will actually catch these failures.
314       MDString *Key = cast<MDString>(Flag->getOperand(1));
315       Metadata *Val = Flag->getOperand(2);
316       Flags.push_back(ModuleFlagEntry(MFB, Key, Val));
317     }
318   }
319 }
320 
321 /// Return the corresponding value if Key appears in module flags, otherwise
322 /// return null.
323 Metadata *Module::getModuleFlag(StringRef Key) const {
324   SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
325   getModuleFlagsMetadata(ModuleFlags);
326   for (const ModuleFlagEntry &MFE : ModuleFlags) {
327     if (Key == MFE.Key->getString())
328       return MFE.Val;
329   }
330   return nullptr;
331 }
332 
333 /// getModuleFlagsMetadata - Returns the NamedMDNode in the module that
334 /// represents module-level flags. This method returns null if there are no
335 /// module-level flags.
336 NamedMDNode *Module::getModuleFlagsMetadata() const {
337   return getNamedMetadata("llvm.module.flags");
338 }
339 
340 /// getOrInsertModuleFlagsMetadata - Returns the NamedMDNode in the module that
341 /// represents module-level flags. If module-level flags aren't found, it
342 /// creates the named metadata that contains them.
343 NamedMDNode *Module::getOrInsertModuleFlagsMetadata() {
344   return getOrInsertNamedMetadata("llvm.module.flags");
345 }
346 
347 /// addModuleFlag - Add a module-level flag to the module-level flags
348 /// metadata. It will create the module-level flags named metadata if it doesn't
349 /// already exist.
350 void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
351                            Metadata *Val) {
352   Type *Int32Ty = Type::getInt32Ty(Context);
353   Metadata *Ops[3] = {
354       ConstantAsMetadata::get(ConstantInt::get(Int32Ty, Behavior)),
355       MDString::get(Context, Key), Val};
356   getOrInsertModuleFlagsMetadata()->addOperand(MDNode::get(Context, Ops));
357 }
358 void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
359                            Constant *Val) {
360   addModuleFlag(Behavior, Key, ConstantAsMetadata::get(Val));
361 }
362 void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
363                            uint32_t Val) {
364   Type *Int32Ty = Type::getInt32Ty(Context);
365   addModuleFlag(Behavior, Key, ConstantInt::get(Int32Ty, Val));
366 }
367 void Module::addModuleFlag(MDNode *Node) {
368   assert(Node->getNumOperands() == 3 &&
369          "Invalid number of operands for module flag!");
370   assert(mdconst::hasa<ConstantInt>(Node->getOperand(0)) &&
371          isa<MDString>(Node->getOperand(1)) &&
372          "Invalid operand types for module flag!");
373   getOrInsertModuleFlagsMetadata()->addOperand(Node);
374 }
375 
376 void Module::setDataLayout(StringRef Desc) {
377   DL.reset(Desc);
378 }
379 
380 void Module::setDataLayout(const DataLayout &Other) { DL = Other; }
381 
382 const DataLayout &Module::getDataLayout() const { return DL; }
383 
384 DICompileUnit *Module::debug_compile_units_iterator::operator*() const {
385   return cast<DICompileUnit>(CUs->getOperand(Idx));
386 }
387 DICompileUnit *Module::debug_compile_units_iterator::operator->() const {
388   return cast<DICompileUnit>(CUs->getOperand(Idx));
389 }
390 
391 void Module::debug_compile_units_iterator::SkipNoDebugCUs() {
392   while (CUs && (Idx < CUs->getNumOperands()) &&
393          ((*this)->getEmissionKind() == DICompileUnit::NoDebug))
394     ++Idx;
395 }
396 
397 //===----------------------------------------------------------------------===//
398 // Methods to control the materialization of GlobalValues in the Module.
399 //
400 void Module::setMaterializer(GVMaterializer *GVM) {
401   assert(!Materializer &&
402          "Module already has a GVMaterializer.  Call materializeAll"
403          " to clear it out before setting another one.");
404   Materializer.reset(GVM);
405 }
406 
407 Error Module::materialize(GlobalValue *GV) {
408   if (!Materializer)
409     return Error::success();
410 
411   return Materializer->materialize(GV);
412 }
413 
414 Error Module::materializeAll() {
415   if (!Materializer)
416     return Error::success();
417   std::unique_ptr<GVMaterializer> M = std::move(Materializer);
418   return M->materializeModule();
419 }
420 
421 Error Module::materializeMetadata() {
422   if (!Materializer)
423     return Error::success();
424   return Materializer->materializeMetadata();
425 }
426 
427 //===----------------------------------------------------------------------===//
428 // Other module related stuff.
429 //
430 
431 std::vector<StructType *> Module::getIdentifiedStructTypes() const {
432   // If we have a materializer, it is possible that some unread function
433   // uses a type that is currently not visible to a TypeFinder, so ask
434   // the materializer which types it created.
435   if (Materializer)
436     return Materializer->getIdentifiedStructTypes();
437 
438   std::vector<StructType *> Ret;
439   TypeFinder SrcStructTypes;
440   SrcStructTypes.run(*this, true);
441   Ret.assign(SrcStructTypes.begin(), SrcStructTypes.end());
442   return Ret;
443 }
444 
445 // dropAllReferences() - This function causes all the subelements to "let go"
446 // of all references that they are maintaining.  This allows one to 'delete' a
447 // whole module at a time, even though there may be circular references... first
448 // all references are dropped, and all use counts go to zero.  Then everything
449 // is deleted for real.  Note that no operations are valid on an object that
450 // has "dropped all references", except operator delete.
451 //
452 void Module::dropAllReferences() {
453   for (Function &F : *this)
454     F.dropAllReferences();
455 
456   for (GlobalVariable &GV : globals())
457     GV.dropAllReferences();
458 
459   for (GlobalAlias &GA : aliases())
460     GA.dropAllReferences();
461 
462   for (GlobalIFunc &GIF : ifuncs())
463     GIF.dropAllReferences();
464 }
465 
466 unsigned Module::getNumberRegisterParameters() const {
467   auto *Val =
468       cast_or_null<ConstantAsMetadata>(getModuleFlag("NumRegisterParameters"));
469   if (!Val)
470     return 0;
471   return cast<ConstantInt>(Val->getValue())->getZExtValue();
472 }
473 
474 unsigned Module::getDwarfVersion() const {
475   auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("Dwarf Version"));
476   if (!Val)
477     return 0;
478   return cast<ConstantInt>(Val->getValue())->getZExtValue();
479 }
480 
481 unsigned Module::getCodeViewFlag() const {
482   auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("CodeView"));
483   if (!Val)
484     return 0;
485   return cast<ConstantInt>(Val->getValue())->getZExtValue();
486 }
487 
488 Comdat *Module::getOrInsertComdat(StringRef Name) {
489   auto &Entry = *ComdatSymTab.insert(std::make_pair(Name, Comdat())).first;
490   Entry.second.Name = &Entry;
491   return &Entry.second;
492 }
493 
494 PICLevel::Level Module::getPICLevel() const {
495   auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("PIC Level"));
496 
497   if (!Val)
498     return PICLevel::NotPIC;
499 
500   return static_cast<PICLevel::Level>(
501       cast<ConstantInt>(Val->getValue())->getZExtValue());
502 }
503 
504 void Module::setPICLevel(PICLevel::Level PL) {
505   addModuleFlag(ModFlagBehavior::Error, "PIC Level", PL);
506 }
507 
508 PIELevel::Level Module::getPIELevel() const {
509   auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("PIE Level"));
510 
511   if (!Val)
512     return PIELevel::Default;
513 
514   return static_cast<PIELevel::Level>(
515       cast<ConstantInt>(Val->getValue())->getZExtValue());
516 }
517 
518 void Module::setPIELevel(PIELevel::Level PL) {
519   addModuleFlag(ModFlagBehavior::Error, "PIE Level", PL);
520 }
521 
522 void Module::setProfileSummary(Metadata *M) {
523   addModuleFlag(ModFlagBehavior::Error, "ProfileSummary", M);
524 }
525 
526 Metadata *Module::getProfileSummary() {
527   return getModuleFlag("ProfileSummary");
528 }
529 
530 void Module::setOwnedMemoryBuffer(std::unique_ptr<MemoryBuffer> MB) {
531   OwnedMemoryBuffer = std::move(MB);
532 }
533 
534 GlobalVariable *llvm::collectUsedGlobalVariables(
535     const Module &M, SmallPtrSetImpl<GlobalValue *> &Set, bool CompilerUsed) {
536   const char *Name = CompilerUsed ? "llvm.compiler.used" : "llvm.used";
537   GlobalVariable *GV = M.getGlobalVariable(Name);
538   if (!GV || !GV->hasInitializer())
539     return GV;
540 
541   const ConstantArray *Init = cast<ConstantArray>(GV->getInitializer());
542   for (Value *Op : Init->operands()) {
543     GlobalValue *G = cast<GlobalValue>(Op->stripPointerCastsNoFollowAliases());
544     Set.insert(G);
545   }
546   return GV;
547 }
548