LLVM 23.0.0git
Module.h
Go to the documentation of this file.
1//===- llvm/Module.h - C++ class to represent a VM module -------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9/// @file
10/// Module.h This file contains the declarations for the Module class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_IR_MODULE_H
15#define LLVM_IR_MODULE_H
16
17#include "llvm-c/Types.h"
18#include "llvm/ADT/STLExtras.h"
19#include "llvm/ADT/StringMap.h"
20#include "llvm/ADT/StringRef.h"
22#include "llvm/IR/Attributes.h"
23#include "llvm/IR/Comdat.h"
24#include "llvm/IR/DataLayout.h"
25#include "llvm/IR/Function.h"
26#include "llvm/IR/GlobalAlias.h"
27#include "llvm/IR/GlobalIFunc.h"
29#include "llvm/IR/Metadata.h"
36#include <cstddef>
37#include <cstdint>
38#include <iterator>
39#include <memory>
40#include <optional>
41#include <string>
42#include <vector>
43
44namespace llvm {
45
46class Error;
47class FunctionType;
48class GVMaterializer;
49class LLVMContext;
50class MemoryBuffer;
53class StructType;
54class VersionTuple;
55
56/// A Module instance is used to store all the information related to an
57/// LLVM module. Modules are the top level container of all other LLVM
58/// Intermediate Representation (IR) objects. Each module directly contains a
59/// list of globals variables, a list of functions, a list of libraries (or
60/// other modules) this module depends on, a symbol table, and various data
61/// about the target's characteristics.
62///
63/// A module maintains a GlobalList object that is used to hold all
64/// constant references to global variables in the module. When a global
65/// variable is destroyed, it should have no entries in the GlobalList.
66/// The main container class for the LLVM Intermediate Representation.
68 /// @name Types And Enumerations
69 /// @{
70public:
71 /// The type for the list of global variables.
73 /// The type for the list of functions.
75 /// The type for the list of aliases.
77 /// The type for the list of ifuncs.
79 /// The type for the list of named metadata.
81 /// The type of the comdat "symbol" table.
83 /// The type for mapping names to named metadata.
85
86 /// The Global Variable iterator.
88 /// The Global Variable constant iterator.
90
91 /// The Function iterators.
93 /// The Function constant iterator
95
96 /// The Function reverse iterator.
98 /// The Function constant reverse iterator.
100
101 /// The Global Alias iterators.
103 /// The Global Alias constant iterator
105
106 /// The Global IFunc iterators.
108 /// The Global IFunc constant iterator
110
111 /// The named metadata iterators.
113 /// The named metadata constant iterators.
115
116 /// This enumeration defines the supported behaviors of module flags.
118 /// Emits an error if two values disagree, otherwise the resulting value is
119 /// that of the operands.
120 Error = 1,
121
122 /// Emits a warning if two values disagree. The result value will be the
123 /// operand for the flag from the first module being linked.
125
126 /// Adds a requirement that another module flag be present and have a
127 /// specified value after linking is performed. The value must be a metadata
128 /// pair, where the first element of the pair is the ID of the module flag
129 /// to be restricted, and the second element of the pair is the value the
130 /// module flag should be restricted to. This behavior can be used to
131 /// restrict the allowable results (via triggering of an error) of linking
132 /// IDs with the **Override** behavior.
134
135 /// Uses the specified value, regardless of the behavior or value of the
136 /// other module. If both modules specify **Override**, but the values
137 /// differ, an error will be emitted.
139
140 /// Appends the two values, which are required to be metadata nodes.
142
143 /// Appends the two values, which are required to be metadata
144 /// nodes. However, duplicate entries in the second list are dropped
145 /// during the append operation.
147
148 /// Takes the max of the two values, which are required to be integers.
149 Max = 7,
150
151 /// Takes the min of the two values, which are required to be integers.
152 Min = 8,
153
154 // Markers:
157 };
158
159 /// Checks if Metadata represents a valid ModFlagBehavior, and stores the
160 /// converted result in MFB.
161 static bool isValidModFlagBehavior(Metadata *MD, ModFlagBehavior &MFB);
162
171
172/// @}
173/// @name Member Variables
174/// @{
175private:
176 LLVMContext &Context; ///< The LLVMContext from which types and
177 ///< constants are allocated.
178 GlobalListType GlobalList; ///< The Global Variables in the module
179 FunctionListType FunctionList; ///< The Functions in the module
180 AliasListType AliasList; ///< The Aliases in the module
181 IFuncListType IFuncList; ///< The IFuncs in the module
182 NamedMDListType NamedMDList; ///< The named metadata in the module
183 std::string GlobalScopeAsm; ///< Inline Asm at global scope.
184 std::unique_ptr<ValueSymbolTable> ValSymTab; ///< Symbol table for values
185 ComdatSymTabType ComdatSymTab; ///< Symbol table for COMDATs
186 std::unique_ptr<MemoryBuffer>
187 OwnedMemoryBuffer; ///< Memory buffer directly owned by this
188 ///< module, for legacy clients only.
189 std::unique_ptr<GVMaterializer>
190 Materializer; ///< Used to materialize GlobalValues
191 std::string ModuleID; ///< Human readable identifier for the module
192 std::string SourceFileName; ///< Original source file name for module,
193 ///< recorded in bitcode.
194 /// Platform target triple Module compiled on
195 /// Format: (arch)(sub)-(vendor)-(sys)-(abi)
196 // FIXME: Default construction is not the same as empty triple :(
197 Triple TargetTriple = Triple("");
198 NamedMDSymTabType NamedMDSymTab; ///< NamedMDNode names.
199 DataLayout DL; ///< DataLayout associated with the module
201 CurrentIntrinsicIds; ///< Keep track of the current unique id count for
202 ///< the specified intrinsic basename.
204 UniquedIntrinsicNames; ///< Keep track of uniqued names of intrinsics
205 ///< based on unnamed types. The combination of
206 ///< ID and FunctionType maps to the extension that
207 ///< is used to make the intrinsic name unique.
208
209 /// llvm.module.flags metadata
210 NamedMDNode *ModuleFlags = nullptr;
211
212 friend class Constant;
213
214/// @}
215/// @name Constructors
216/// @{
217public:
218 /// Used when printing this module in the new debug info format; removes all
219 /// declarations of debug intrinsics that are replaced by non-intrinsic
220 /// records in the new format.
222
223 /// \see BasicBlock::convertToNewDbgValues.
225 for (auto &F : *this) {
226 F.convertToNewDbgValues();
227 }
228
230 }
231
232 /// \see BasicBlock::convertFromNewDbgValues.
234 for (auto &F : *this) {
235 F.convertFromNewDbgValues();
236 }
237 }
238
239 /// The Module constructor. Note that there is no default constructor. You
240 /// must provide a name for the module upon construction.
241 explicit Module(StringRef ModuleID, LLVMContext& C);
242 /// The module destructor. This will dropAllReferences.
243 ~Module();
244
245 /// Move assignment.
246 Module &operator=(Module &&Other);
247
248 /// @}
249 /// @name Module Level Accessors
250 /// @{
251
252 /// Get the module identifier which is, essentially, the name of the module.
253 /// @returns the module identifier as a string
254 const std::string &getModuleIdentifier() const { return ModuleID; }
255
256 /// Returns the number of non-debug IR instructions in the module.
257 /// This is equivalent to the sum of the IR instruction counts of each
258 /// function contained in the module.
259 unsigned getInstructionCount() const;
260
261 /// Get the module's original source file name. When compiling from
262 /// bitcode, this is taken from a bitcode record where it was recorded.
263 /// For other compiles it is the same as the ModuleID, which would
264 /// contain the source file name.
265 const std::string &getSourceFileName() const { return SourceFileName; }
266
267 /// Get a short "name" for the module.
268 ///
269 /// This is useful for debugging or logging. It is essentially a convenience
270 /// wrapper around getModuleIdentifier().
271 StringRef getName() const { return ModuleID; }
272
273 /// Get the data layout string for the module's target platform. This is
274 /// equivalent to getDataLayout()->getStringRepresentation().
275 const std::string &getDataLayoutStr() const {
276 return DL.getStringRepresentation();
277 }
278
279 /// Get the data layout for the module's target platform.
280 const DataLayout &getDataLayout() const { return DL; }
281
282 /// Get the target triple which is a string describing the target host.
283 const Triple &getTargetTriple() const { return TargetTriple; }
284
285 /// Get the global data context.
286 /// @returns LLVMContext - a container for LLVM's global information
287 LLVMContext &getContext() const { return Context; }
288
289 /// Get any module-scope inline assembly blocks.
290 /// @returns a string containing the module-scope inline assembly blocks.
291 const std::string &getModuleInlineAsm() const { return GlobalScopeAsm; }
292
293 /// Get a RandomNumberGenerator salted for use with this module. The
294 /// RNG can be seeded via -rng-seed=<uint64> and is salted with the
295 /// ModuleID and the provided pass salt. The returned RNG should not
296 /// be shared across threads or passes.
297 ///
298 /// A unique RNG per pass ensures a reproducible random stream even
299 /// when other randomness consuming passes are added or removed. In
300 /// addition, the random stream will be reproducible across LLVM
301 /// versions when the pass does not change.
302 std::unique_ptr<RandomNumberGenerator> createRNG(const StringRef Name) const;
303
304 /// Return true if size-info optimization remark is enabled, false
305 /// otherwise.
307 return getContext().getDiagHandlerPtr()->isAnalysisRemarkEnabled(
308 "size-info");
309 }
310
311 /// @}
312 /// @name Module Level Mutators
313 /// @{
314
315 /// Set the module identifier.
316 void setModuleIdentifier(StringRef ID) { ModuleID = std::string(ID); }
317
318 /// Set the module's original source file name.
319 void setSourceFileName(StringRef Name) { SourceFileName = std::string(Name); }
320
321 /// Set the data layout
322 void setDataLayout(StringRef Desc);
323 void setDataLayout(const DataLayout &Other);
324
325 /// Set the target triple.
326 void setTargetTriple(Triple T) { TargetTriple = std::move(T); }
327
328 /// Set the module-scope inline assembly blocks.
329 /// A trailing newline is added if the input doesn't have one.
331 GlobalScopeAsm = std::string(Asm);
332 if (!GlobalScopeAsm.empty() && GlobalScopeAsm.back() != '\n')
333 GlobalScopeAsm += '\n';
334 }
335
336 /// Append to the module-scope inline assembly blocks.
337 /// A trailing newline is added if the input doesn't have one.
339 GlobalScopeAsm += Asm;
340 if (!GlobalScopeAsm.empty() && GlobalScopeAsm.back() != '\n')
341 GlobalScopeAsm += '\n';
342 }
343
344/// @}
345/// @name Generic Value Accessors
346/// @{
347
348 /// Return the global value in the module with the specified name, of
349 /// arbitrary type. This method returns null if a global with the specified
350 /// name is not found.
351 GlobalValue *getNamedValue(StringRef Name) const;
352
353 /// Return the number of global values in the module.
354 unsigned getNumNamedValues() const;
355
356 /// Return a unique non-zero ID for the specified metadata kind. This ID is
357 /// uniqued across modules in the current LLVMContext.
358 unsigned getMDKindID(StringRef Name) const;
359
360 /// Populate client supplied SmallVector with the name for custom metadata IDs
361 /// registered in this LLVMContext.
362 void getMDKindNames(SmallVectorImpl<StringRef> &Result) const;
363
364 /// Populate client supplied SmallVector with the bundle tags registered in
365 /// this LLVMContext. The bundle tags are ordered by increasing bundle IDs.
366 /// \see LLVMContext::getOperandBundleTagID
367 void getOperandBundleTags(SmallVectorImpl<StringRef> &Result) const;
368
369 std::vector<StructType *> getIdentifiedStructTypes() const;
370
371 /// Return a unique name for an intrinsic whose mangling is based on an
372 /// unnamed type. The Proto represents the function prototype.
373 std::string getUniqueIntrinsicName(StringRef BaseName, Intrinsic::ID Id,
374 const FunctionType *Proto);
375
376/// @}
377/// @name Function Accessors
378/// @{
379
380 /// Look up the specified function in the module symbol table. If it does not
381 /// exist, add a prototype for the function and return it. Otherwise, return
382 /// the existing function.
383 ///
384 /// In all cases, the returned value is a FunctionCallee wrapper around the
385 /// 'FunctionType *T' passed in, as well as the 'Value*' of the Function. The
386 /// function type of the function may differ from the function type stored in
387 /// FunctionCallee if it was previously created with a different type.
388 ///
389 /// Note: For library calls getOrInsertLibFunc() should be used instead.
390 FunctionCallee getOrInsertFunction(StringRef Name, FunctionType *T,
391 AttributeList AttributeList);
392
393 FunctionCallee getOrInsertFunction(StringRef Name, FunctionType *T);
394
395 /// Same as above, but takes a list of function arguments, which makes it
396 /// easier for clients to use.
397 template <typename... ArgsTy>
399 AttributeList AttributeList, Type *RetTy,
400 ArgsTy... Args) {
401 SmallVector<Type*, sizeof...(ArgsTy)> ArgTys{Args...};
402 return getOrInsertFunction(Name,
403 FunctionType::get(RetTy, ArgTys, false),
404 AttributeList);
405 }
406
407 /// Same as above, but without the attributes.
408 template <typename... ArgsTy>
410 ArgsTy... Args) {
411 return getOrInsertFunction(Name, AttributeList{}, RetTy, Args...);
412 }
413
414 // Avoid an incorrect ordering that'd otherwise compile incorrectly.
415 template <typename... ArgsTy>
417 getOrInsertFunction(StringRef Name, AttributeList AttributeList,
418 FunctionType *Invalid, ArgsTy... Args) = delete;
419
420 /// Look up the specified function in the module symbol table. If it does not
421 /// exist, return null.
422 Function *getFunction(StringRef Name) const;
423
424/// @}
425/// @name Global Variable Accessors
426/// @{
427
428 /// Look up the specified global variable in the module symbol table. If it
429 /// does not exist, return null. If AllowInternal is set to true, this
430 /// function will return types that have InternalLinkage. By default, these
431 /// types are not returned.
433 return getGlobalVariable(Name, false);
434 }
435
436 GlobalVariable *getGlobalVariable(StringRef Name, bool AllowInternal) const;
437
439 bool AllowInternal = false) {
440 return static_cast<const Module *>(this)->getGlobalVariable(Name,
441 AllowInternal);
442 }
443
444 /// Return the global variable in the module with the specified name, of
445 /// arbitrary type. This method returns null if a global with the specified
446 /// name is not found.
448 return getGlobalVariable(Name, true);
449 }
451 return const_cast<GlobalVariable *>(
452 static_cast<const Module *>(this)->getNamedGlobal(Name));
453 }
454
455 /// Look up the specified global in the module symbol table.
456 /// If it does not exist, invoke a callback to create a declaration of the
457 /// global and return it.
460 function_ref<GlobalVariable *()> CreateGlobalCallback);
461
462 /// Look up the specified global in the module symbol table. If required, this
463 /// overload constructs the global variable using its constructor's defaults.
465
466/// @}
467/// @name Global Alias Accessors
468/// @{
469
470 /// Return the global alias in the module with the specified name, of
471 /// arbitrary type. This method returns null if a global with the specified
472 /// name is not found.
473 GlobalAlias *getNamedAlias(StringRef Name) const;
474
475/// @}
476/// @name Global IFunc Accessors
477/// @{
478
479 /// Return the global ifunc in the module with the specified name, of
480 /// arbitrary type. This method returns null if a global with the specified
481 /// name is not found.
482 GlobalIFunc *getNamedIFunc(StringRef Name) const;
483
484/// @}
485/// @name Named Metadata Accessors
486/// @{
487
488 /// Return the first NamedMDNode in the module with the specified name. This
489 /// method returns null if a NamedMDNode with the specified name is not found.
490 NamedMDNode *getNamedMetadata(StringRef Name) const;
491
492 /// Return the named MDNode in the module with the specified name. This method
493 /// returns a new NamedMDNode if a NamedMDNode with the specified name is not
494 /// found.
495 NamedMDNode *getOrInsertNamedMetadata(StringRef Name);
496
497 /// Remove the given NamedMDNode from this module and delete it.
498 void eraseNamedMetadata(NamedMDNode *NMD);
499
500/// @}
501/// @name Comdat Accessors
502/// @{
503
504 /// Return the Comdat in the module with the specified name. It is created
505 /// if it didn't already exist.
506 Comdat *getOrInsertComdat(StringRef Name);
507
508/// @}
509/// @name Module Flags Accessors
510/// @{
511
512 /// Returns the module flags in the provided vector.
513 void getModuleFlagsMetadata(SmallVectorImpl<ModuleFlagEntry> &Flags) const;
514
515 /// Return the corresponding value if Key appears in module flags, otherwise
516 /// return null.
517 Metadata *getModuleFlag(StringRef Key) const;
518
519 /// Returns the NamedMDNode in the module that represents module-level flags.
520 /// This method returns null if there are no module-level flags.
521 NamedMDNode *getModuleFlagsMetadata() const { return ModuleFlags; }
522
523 /// Returns the NamedMDNode in the module that represents module-level flags.
524 /// If module-level flags aren't found, it creates the named metadata that
525 /// contains them.
526 NamedMDNode *getOrInsertModuleFlagsMetadata();
527
528 /// Add a module-level flag to the module-level flags metadata. It will create
529 /// the module-level flags named metadata if it doesn't already exist.
530 void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, Metadata *Val);
531 void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, Constant *Val);
532 void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, uint32_t Val);
533 void addModuleFlag(MDNode *Node);
534 /// Like addModuleFlag but replaces the old module flag if it already exists.
535 void setModuleFlag(ModFlagBehavior Behavior, StringRef Key, Metadata *Val);
536 void setModuleFlag(ModFlagBehavior Behavior, StringRef Key, Constant *Val);
537 void setModuleFlag(ModFlagBehavior Behavior, StringRef Key, uint32_t Val);
538
539 /// @}
540 /// @name Materialization
541 /// @{
542
543 /// Sets the GVMaterializer to GVM. This module must not yet have a
544 /// Materializer. To reset the materializer for a module that already has one,
545 /// call materializeAll first. Destroying this module will destroy
546 /// its materializer without materializing any more GlobalValues. Without
547 /// destroying the Module, there is no way to detach or destroy a materializer
548 /// without materializing all the GVs it controls, to avoid leaving orphan
549 /// unmaterialized GVs.
550 void setMaterializer(GVMaterializer *GVM);
551 /// Retrieves the GVMaterializer, if any, for this Module.
552 GVMaterializer *getMaterializer() const { return Materializer.get(); }
553 bool isMaterialized() const { return !getMaterializer(); }
554
555 /// Make sure the GlobalValue is fully read.
556 llvm::Error materialize(GlobalValue *GV);
557
558 /// Make sure all GlobalValues in this Module are fully read and clear the
559 /// Materializer.
560 llvm::Error materializeAll();
561
562 llvm::Error materializeMetadata();
563
564 /// Detach global variable \p GV from the list but don't delete it.
565 void removeGlobalVariable(GlobalVariable *GV) { GlobalList.remove(GV); }
566 /// Remove global variable \p GV from the list and delete it.
567 void eraseGlobalVariable(GlobalVariable *GV) { GlobalList.erase(GV); }
568 /// Insert global variable \p GV at the end of the global variable list and
569 /// take ownership.
571 insertGlobalVariable(GlobalList.end(), GV);
572 }
573 /// Insert global variable \p GV into the global variable list before \p
574 /// Where and take ownership.
576 GlobalList.insert(Where, GV);
577 }
578 // Use global_size() to get the total number of global variables.
579 // Use globals() to get the range of all global variables.
580
581private:
582/// @}
583/// @name Direct access to the globals list, functions list, and symbol table
584/// @{
585
586 /// Get the Module's list of global variables (constant).
587 const GlobalListType &getGlobalList() const { return GlobalList; }
588 /// Get the Module's list of global variables.
589 GlobalListType &getGlobalList() { return GlobalList; }
590
591 static GlobalListType Module::*getSublistAccess(GlobalVariable*) {
592 return &Module::GlobalList;
593 }
595
596public:
597 /// Get the Module's list of functions (constant).
598 const FunctionListType &getFunctionList() const { return FunctionList; }
599 /// Get the Module's list of functions.
600 FunctionListType &getFunctionList() { return FunctionList; }
602 return &Module::FunctionList;
603 }
604
605 /// Detach \p Alias from the list but don't delete it.
606 void removeAlias(GlobalAlias *Alias) { AliasList.remove(Alias); }
607 /// Remove \p Alias from the list and delete it.
608 void eraseAlias(GlobalAlias *Alias) { AliasList.erase(Alias); }
609 /// Insert \p Alias at the end of the alias list and take ownership.
610 void insertAlias(GlobalAlias *Alias) { AliasList.insert(AliasList.end(), Alias); }
611 // Use alias_size() to get the size of AliasList.
612 // Use aliases() to get a range of all Alias objects in AliasList.
613
614 /// Detach \p IFunc from the list but don't delete it.
615 void removeIFunc(GlobalIFunc *IFunc) { IFuncList.remove(IFunc); }
616 /// Remove \p IFunc from the list and delete it.
617 void eraseIFunc(GlobalIFunc *IFunc) { IFuncList.erase(IFunc); }
618 /// Insert \p IFunc at the end of the alias list and take ownership.
619 void insertIFunc(GlobalIFunc *IFunc) { IFuncList.push_back(IFunc); }
620 // Use ifunc_size() to get the number of functions in IFuncList.
621 // Use ifuncs() to get the range of all IFuncs.
622
623 /// Detach \p MDNode from the list but don't delete it.
624 void removeNamedMDNode(NamedMDNode *MDNode) { NamedMDList.remove(MDNode); }
625 /// Remove \p MDNode from the list and delete it.
626 void eraseNamedMDNode(NamedMDNode *MDNode) { NamedMDList.erase(MDNode); }
627 /// Insert \p MDNode at the end of the alias list and take ownership.
629 NamedMDList.push_back(MDNode);
630 }
631 // Use named_metadata_size() to get the size of the named meatadata list.
632 // Use named_metadata() to get the range of all named metadata.
633
634private: // Please use functions like insertAlias(), removeAlias() etc.
635 /// Get the Module's list of aliases (constant).
636 const AliasListType &getAliasList() const { return AliasList; }
637 /// Get the Module's list of aliases.
638 AliasListType &getAliasList() { return AliasList; }
639
640 static AliasListType Module::*getSublistAccess(GlobalAlias*) {
641 return &Module::AliasList;
642 }
644
645 /// Get the Module's list of ifuncs (constant).
646 const IFuncListType &getIFuncList() const { return IFuncList; }
647 /// Get the Module's list of ifuncs.
648 IFuncListType &getIFuncList() { return IFuncList; }
649
650 static IFuncListType Module::*getSublistAccess(GlobalIFunc*) {
651 return &Module::IFuncList;
652 }
654
655 /// Get the Module's list of named metadata (constant).
656 const NamedMDListType &getNamedMDList() const { return NamedMDList; }
657 /// Get the Module's list of named metadata.
658 NamedMDListType &getNamedMDList() { return NamedMDList; }
659
660 static NamedMDListType Module::*getSublistAccess(NamedMDNode*) {
661 return &Module::NamedMDList;
662 }
663
664public:
665 /// Get the symbol table of global variable and function identifiers
666 const ValueSymbolTable &getValueSymbolTable() const { return *ValSymTab; }
667 /// Get the Module's symbol table of global variable and function identifiers.
668 ValueSymbolTable &getValueSymbolTable() { return *ValSymTab; }
669
670 /// Get the Module's symbol table for COMDATs (constant).
671 const ComdatSymTabType &getComdatSymbolTable() const { return ComdatSymTab; }
672 /// Get the Module's symbol table for COMDATs.
673 ComdatSymTabType &getComdatSymbolTable() { return ComdatSymTab; }
674
675/// @}
676/// @name Global Variable Iteration
677/// @{
678
679 global_iterator global_begin() { return GlobalList.begin(); }
680 const_global_iterator global_begin() const { return GlobalList.begin(); }
681 global_iterator global_end () { return GlobalList.end(); }
682 const_global_iterator global_end () const { return GlobalList.end(); }
683 size_t global_size () const { return GlobalList.size(); }
684 bool global_empty() const { return GlobalList.empty(); }
685
692
693/// @}
694/// @name Function Iteration
695/// @{
696
697 iterator begin() { return FunctionList.begin(); }
698 const_iterator begin() const { return FunctionList.begin(); }
699 iterator end () { return FunctionList.end(); }
700 const_iterator end () const { return FunctionList.end(); }
701 reverse_iterator rbegin() { return FunctionList.rbegin(); }
702 const_reverse_iterator rbegin() const{ return FunctionList.rbegin(); }
703 reverse_iterator rend() { return FunctionList.rend(); }
704 const_reverse_iterator rend() const { return FunctionList.rend(); }
705 size_t size() const { return FunctionList.size(); }
706 bool empty() const { return FunctionList.empty(); }
707
714
715 /// Get an iterator range over all function definitions (excluding
716 /// declarations).
719 [](Function &F) { return !F.isDeclaration(); });
720 }
721 auto getFunctionDefs() const {
722 return make_filter_range(
723 functions(), [](const Function &F) { return !F.isDeclaration(); });
724 }
725
726/// @}
727/// @name Alias Iteration
728/// @{
729
730 alias_iterator alias_begin() { return AliasList.begin(); }
731 const_alias_iterator alias_begin() const { return AliasList.begin(); }
732 alias_iterator alias_end () { return AliasList.end(); }
733 const_alias_iterator alias_end () const { return AliasList.end(); }
734 size_t alias_size () const { return AliasList.size(); }
735 bool alias_empty() const { return AliasList.empty(); }
736
743
744/// @}
745/// @name IFunc Iteration
746/// @{
747
748 ifunc_iterator ifunc_begin() { return IFuncList.begin(); }
749 const_ifunc_iterator ifunc_begin() const { return IFuncList.begin(); }
750 ifunc_iterator ifunc_end () { return IFuncList.end(); }
751 const_ifunc_iterator ifunc_end () const { return IFuncList.end(); }
752 size_t ifunc_size () const { return IFuncList.size(); }
753 bool ifunc_empty() const { return IFuncList.empty(); }
754
761
762 /// @}
763 /// @name Convenience iterators
764 /// @{
765
771
774
781
784
785 /// @}
786 /// @name Named Metadata Iteration
787 /// @{
788
789 named_metadata_iterator named_metadata_begin() { return NamedMDList.begin(); }
791 return NamedMDList.begin();
792 }
793
794 named_metadata_iterator named_metadata_end() { return NamedMDList.end(); }
796 return NamedMDList.end();
797 }
798
799 size_t named_metadata_size() const { return NamedMDList.size(); }
800 bool named_metadata_empty() const { return NamedMDList.empty(); }
801
808
809 /// An iterator for DICompileUnits that skips those marked NoDebug.
811 NamedMDNode *CUs;
812 unsigned Idx;
813
814 LLVM_ABI void SkipNoDebugCUs();
815
816 public:
817 using iterator_category = std::input_iterator_tag;
819 using difference_type = std::ptrdiff_t;
822
823 explicit debug_compile_units_iterator(NamedMDNode *CUs, unsigned Idx)
824 : CUs(CUs), Idx(Idx) {
825 SkipNoDebugCUs();
826 }
827
829 ++Idx;
830 SkipNoDebugCUs();
831 return *this;
832 }
833
836 ++Idx;
837 return T;
838 }
839
841 return Idx == I.Idx;
842 }
843
845 return Idx != I.Idx;
846 }
847
849 LLVM_ABI DICompileUnit *operator->() const;
850 };
851
853 auto *CUs = getNamedMetadata("llvm.dbg.cu");
854 return debug_compile_units_iterator(CUs, 0);
855 }
856
858 auto *CUs = getNamedMetadata("llvm.dbg.cu");
859 return debug_compile_units_iterator(CUs, CUs ? CUs->getNumOperands() : 0);
860 }
861
862 /// Return an iterator for all DICompileUnits listed in this Module's
863 /// llvm.dbg.cu named metadata node and aren't explicitly marked as
864 /// NoDebug.
866 auto *CUs = getNamedMetadata("llvm.dbg.cu");
867 return make_range(
869 debug_compile_units_iterator(CUs, CUs ? CUs->getNumOperands() : 0));
870 }
871/// @}
872
873/// @name Utility functions for printing and dumping Module objects
874/// @{
875
876 /// Print the module to an output stream with an optional
877 /// AssemblyAnnotationWriter. If \c ShouldPreserveUseListOrder, then include
878 /// uselistorder directives so that use-lists can be recreated when reading
879 /// the assembly.
881 bool ShouldPreserveUseListOrder = false,
882 bool IsForDebug = false) const;
883
884 /// Dump the module to stderr (for debugging).
885 void dump() const;
886
887 /// This function causes all the subinstructions to "let go" of all references
888 /// that they are maintaining. This allows one to 'delete' a whole class at
889 /// a time, even though there may be circular references... first all
890 /// references are dropped, and all use counts go to zero. Then everything
891 /// is delete'd for real. Note that no operations are valid on an object
892 /// that has "dropped all references", except operator delete.
893 void dropAllReferences();
894
895/// @}
896/// @name Utility functions for querying Debug information.
897/// @{
898
899 /// Returns the Number of Register ParametersDwarf Version by checking
900 /// module flags.
901 unsigned getNumberRegisterParameters() const;
902
903 /// Returns the Dwarf Version by checking module flags.
904 unsigned getDwarfVersion() const;
905
906 /// Returns the DWARF format by checking module flags.
907 bool isDwarf64() const;
908
909 /// Returns the CodeView Version by checking module flags.
910 /// Returns zero if not present in module.
911 unsigned getCodeViewFlag() const;
912
913/// @}
914/// @name Utility functions for querying and setting PIC level
915/// @{
916
917 /// Returns the PIC level (small or large model)
918 PICLevel::Level getPICLevel() const;
919
920 /// Set the PIC level (small or large model)
921 void setPICLevel(PICLevel::Level PL);
922/// @}
923
924/// @}
925/// @name Utility functions for querying and setting PIE level
926/// @{
927
928 /// Returns the PIE level (small or large model)
929 PIELevel::Level getPIELevel() const;
930
931 /// Set the PIE level (small or large model)
932 void setPIELevel(PIELevel::Level PL);
933/// @}
934
935 /// @}
936 /// @name Utility function for querying and setting code model
937 /// @{
938
939 /// Returns the code model (tiny, small, kernel, medium or large model)
940 std::optional<CodeModel::Model> getCodeModel() const;
941
942 /// Set the code model (tiny, small, kernel, medium or large)
943 void setCodeModel(CodeModel::Model CL);
944 /// @}
945
946 /// @}
947 /// @name Utility function for querying and setting the large data threshold
948 /// @{
949
950 /// Returns the large data threshold.
951 std::optional<uint64_t> getLargeDataThreshold() const;
952
953 /// Set the large data threshold.
954 void setLargeDataThreshold(uint64_t Threshold);
955 /// @}
956
957 /// @name Utility functions for querying and setting PGO summary
958 /// @{
959
960 /// Attach profile summary metadata to this module.
961 void setProfileSummary(Metadata *M, ProfileSummary::Kind Kind);
962
963 /// Returns profile summary metadata. When IsCS is true, use the context
964 /// sensitive profile summary.
965 Metadata *getProfileSummary(bool IsCS) const;
966 /// @}
967
968 /// Returns whether semantic interposition is to be respected.
969 bool getSemanticInterposition() const;
970
971 /// Set whether semantic interposition is to be respected.
972 void setSemanticInterposition(bool);
973
974 /// Returns true if PLT should be avoided for RTLib calls.
975 bool getRtLibUseGOT() const;
976
977 /// Set that PLT should be avoid for RTLib calls.
978 void setRtLibUseGOT();
979
980 /// Get/set whether referencing global variables can use direct access
981 /// relocations on ELF targets.
982 bool getDirectAccessExternalData() const;
983 void setDirectAccessExternalData(bool Value);
984
985 /// Get/set whether synthesized functions should get the uwtable attribute.
986 UWTableKind getUwtable() const;
987 void setUwtable(UWTableKind Kind);
988
989 /// Get/set whether synthesized functions should get the "frame-pointer"
990 /// attribute.
991 FramePointerKind getFramePointer() const;
992 void setFramePointer(FramePointerKind Kind);
993
994 /// Get/set what kind of stack protector guard to use.
995 StringRef getStackProtectorGuard() const;
996 void setStackProtectorGuard(StringRef Kind);
997
998 /// Get/set which register to use as the stack protector guard register. The
999 /// empty string is equivalent to "global". Other values may be "tls" or
1000 /// "sysreg".
1001 StringRef getStackProtectorGuardReg() const;
1002 void setStackProtectorGuardReg(StringRef Reg);
1003
1004 /// Get/set a symbol to use as the stack protector guard.
1005 StringRef getStackProtectorGuardSymbol() const;
1006 void setStackProtectorGuardSymbol(StringRef Symbol);
1007
1008 /// Get/set what offset from the stack protector to use.
1009 int getStackProtectorGuardOffset() const;
1010 void setStackProtectorGuardOffset(int Offset);
1011
1012 /// Get/set the width in memory of the stack protector guard value.
1013 std::optional<unsigned> getStackProtectorGuardValueWidth() const;
1014 void setStackProtectorGuardValueWidth(unsigned Width);
1015
1016 /// Get/set the stack alignment overridden from the default.
1017 unsigned getOverrideStackAlignment() const;
1018 void setOverrideStackAlignment(unsigned Align);
1019
1020 unsigned getMaxTLSAlignment() const;
1021
1022 /// @name Utility functions for querying and setting the build SDK version
1023 /// @{
1024
1025 /// Attach a build SDK version metadata to this module.
1026 void setSDKVersion(const VersionTuple &V);
1027
1028 /// Get the build SDK version metadata.
1029 ///
1030 /// An empty version is returned if no such metadata is attached.
1031 VersionTuple getSDKVersion() const;
1032 /// @}
1033
1034 /// Take ownership of the given memory buffer.
1035 void setOwnedMemoryBuffer(std::unique_ptr<MemoryBuffer> MB);
1036
1037 /// Set the partial sample profile ratio in the profile summary module flag,
1038 /// if applicable.
1039 void setPartialSampleProfileRatio(const ModuleSummaryIndex &Index);
1040
1041 /// Get the target variant triple which is a string describing a variant of
1042 /// the target host platform. For example, Mac Catalyst can be a variant
1043 /// target triple for a macOS target.
1044 /// @returns a string containing the target variant triple.
1045 StringRef getDarwinTargetVariantTriple() const;
1046
1047 /// Set the target variant triple which is a string describing a variant of
1048 /// the target host platform.
1049 void setDarwinTargetVariantTriple(StringRef T);
1050
1051 /// Get the target variant version build SDK version metadata.
1052 ///
1053 /// An empty version is returned if no such metadata is attached.
1054 VersionTuple getDarwinTargetVariantSDKVersion() const;
1055
1056 /// Set the target variant version build SDK version metadata.
1057 void setDarwinTargetVariantSDKVersion(VersionTuple Version);
1058
1059 /// Returns target-abi from MDString, null if target-abi is absent.
1060 StringRef getTargetABIFromMD();
1061
1062 /// Get how unwind v2 (epilog) information should be generated for x64
1063 /// Windows.
1064 WinX64EHUnwindV2Mode getWinX64EHUnwindV2Mode() const;
1065
1066 /// Gets the Control Flow Guard mode.
1067 ControlFlowGuardMode getControlFlowGuardMode() const;
1068};
1069
1070/// Given "llvm.used" or "llvm.compiler.used" as a global name, collect the
1071/// initializer elements of that global in a SmallVector and return the global
1072/// itself.
1073LLVM_ABI GlobalVariable *
1074collectUsedGlobalVariables(const Module &M, SmallVectorImpl<GlobalValue *> &Vec,
1075 bool CompilerUsed);
1076
1077/// An raw_ostream inserter for modules.
1079 M.print(O, nullptr);
1080 return O;
1081}
1082
1083// Create wrappers for C Binding types (see CBindingWrapping.h).
1085
1086/* LLVMModuleProviderRef exists for historical reasons, but now just holds a
1087 * Module.
1088 */
1090 return reinterpret_cast<Module*>(MP);
1091}
1092
1093} // end namespace llvm
1094
1095#endif // LLVM_IR_MODULE_H
aarch64 promote const
This file defines the StringMap class.
Lower uses of LDS variables from non kernel functions
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
always inline
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
This file contains the simple types necessary to represent the attributes associated with functions a...
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)
#define LLVM_ABI
Definition Compiler.h:213
This file contains the declaration of the GlobalIFunc class, which represents a single indirect funct...
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
Machine Check Debug Module
Register Reg
static Constant * getOrInsertGlobal(Module &M, StringRef Name, Type *Ty)
This file contains the declarations for metadata subclasses.
#define T
static CodeModel::Model getCodeModel(const PPCSubtarget &S, const TargetMachine &TM, const MachineOperand &MO)
This file contains some templates that are useful if you are working with the STL at all.
static Function * getFunction(FunctionType *Ty, const Twine &Name, Module *M)
static GlobalVariable * getGlobalVariable(Module &M, Type *Ty, WebAssemblyTargetMachine &TM, const char *Name)
This is an important base class in LLVM.
Definition Constant.h:43
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
A handy container for a FunctionType+Callee-pointer pair, which can be passed around as a single enti...
Class to represent function types.
static LLVM_ABI FunctionType * get(Type *Result, ArrayRef< Type * > Params, bool isVarArg)
This static method is the primary way of constructing a FunctionType.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
Metadata node.
Definition Metadata.h:1080
A single uniqued string.
Definition Metadata.h:722
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Root of the metadata hierarchy.
Definition Metadata.h:64
Class to hold module path string table and global value map, and encapsulate methods for operating on...
An iterator for DICompileUnits that skips those marked NoDebug.
Definition Module.h:810
debug_compile_units_iterator & operator++()
Definition Module.h:828
bool operator==(const debug_compile_units_iterator &I) const
Definition Module.h:840
debug_compile_units_iterator operator++(int)
Definition Module.h:834
std::input_iterator_tag iterator_category
Definition Module.h:817
debug_compile_units_iterator(NamedMDNode *CUs, unsigned Idx)
Definition Module.h:823
bool operator!=(const debug_compile_units_iterator &I) const
Definition Module.h:844
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
const Triple & getTargetTriple() const
Get the target triple which is a string describing the target host.
Definition Module.h:283
StringMap< Comdat > ComdatSymTabType
The type of the comdat "symbol" table.
Definition Module.h:82
global_iterator global_begin()
Definition Module.h:679
void removeIFunc(GlobalIFunc *IFunc)
Detach IFunc from the list but don't delete it.
Definition Module.h:615
const_global_iterator global_begin() const
Definition Module.h:680
const_iterator begin() const
Definition Module.h:698
NamedMDNode * getNamedMetadata(StringRef Name) const
Return the first NamedMDNode in the module with the specified name.
Definition Module.cpp:301
ifunc_iterator ifunc_begin()
Definition Module.h:748
void eraseNamedMDNode(NamedMDNode *MDNode)
Remove MDNode from the list and delete it.
Definition Module.h:626
const std::string & getModuleInlineAsm() const
Get any module-scope inline assembly blocks.
Definition Module.h:291
ModFlagBehavior
This enumeration defines the supported behaviors of module flags.
Definition Module.h:117
@ AppendUnique
Appends the two values, which are required to be metadata nodes.
Definition Module.h:146
@ Override
Uses the specified value, regardless of the behavior or value of the other module.
Definition Module.h:138
@ Warning
Emits a warning if two values disagree.
Definition Module.h:124
@ Error
Emits an error if two values disagree, otherwise the resulting value is that of the operands.
Definition Module.h:120
@ ModFlagBehaviorFirstVal
Definition Module.h:155
@ Min
Takes the min of the two values, which are required to be integers.
Definition Module.h:152
@ Append
Appends the two values, which are required to be metadata nodes.
Definition Module.h:141
@ Max
Takes the max of the two values, which are required to be integers.
Definition Module.h:149
@ ModFlagBehaviorLastVal
Definition Module.h:156
@ Require
Adds a requirement that another module flag be present and have a specified value after linking is pe...
Definition Module.h:133
LLVMContext & getContext() const
Get the global data context.
Definition Module.h:287
void insertIFunc(GlobalIFunc *IFunc)
Insert IFunc at the end of the alias list and take ownership.
Definition Module.h:619
iterator_range< const_alias_iterator > aliases() const
Definition Module.h:740
void setModuleInlineAsm(StringRef Asm)
Set the module-scope inline assembly blocks.
Definition Module.h:330
const ComdatSymTabType & getComdatSymbolTable() const
Get the Module's symbol table for COMDATs (constant).
Definition Module.h:671
global_iterator global_end()
Definition Module.h:681
GlobalVariable * getNamedGlobal(StringRef Name)
Definition Module.h:450
void setTargetTriple(Triple T)
Set the target triple.
Definition Module.h:326
NamedMDListType::iterator named_metadata_iterator
The named metadata iterators.
Definition Module.h:112
size_t alias_size() const
Definition Module.h:734
const_global_iterator global_end() const
Definition Module.h:682
bool global_empty() const
Definition Module.h:684
iterator begin()
Definition Module.h:697
void convertToNewDbgValues()
Definition Module.h:224
FunctionCallee getOrInsertFunction(StringRef Name, AttributeList AttributeList, Type *RetTy, ArgsTy... Args)
Same as above, but takes a list of function arguments, which makes it easier for clients to use.
Definition Module.h:398
const_ifunc_iterator ifunc_end() const
Definition Module.h:751
void convertFromNewDbgValues()
Definition Module.h:233
iterator_range< ifunc_iterator > ifuncs()
Definition Module.h:755
bool named_metadata_empty() const
Definition Module.h:800
Module(StringRef ModuleID, LLVMContext &C)
The Module constructor.
Definition Module.cpp:73
ilist< NamedMDNode > NamedMDListType
The type for the list of named metadata.
Definition Module.h:80
SymbolTableList< Function > FunctionListType
The type for the list of functions.
Definition Module.h:74
void removeDebugIntrinsicDeclarations()
Used when printing this module in the new debug info format; removes all declarations of debug intrin...
Definition Module.cpp:127
ValueSymbolTable & getValueSymbolTable()
Get the Module's symbol table of global variable and function identifiers.
Definition Module.h:668
NamedMDListType::const_iterator const_named_metadata_iterator
The named metadata constant iterators.
Definition Module.h:114
const_named_metadata_iterator named_metadata_begin() const
Definition Module.h:790
size_t global_size() const
Definition Module.h:683
iterator_range< debug_compile_units_iterator > debug_compile_units() const
Return an iterator for all DICompileUnits listed in this Module's llvm.dbg.cu named metadata node and...
Definition Module.h:865
iterator_range< iterator > functions()
Definition Module.h:708
StringRef getName() const
Get a short "name" for the module.
Definition Module.h:271
GVMaterializer * getMaterializer() const
Retrieves the GVMaterializer, if any, for this Module.
Definition Module.h:552
const std::string & getSourceFileName() const
Get the module's original source file name.
Definition Module.h:265
IFuncListType::iterator ifunc_iterator
The Global IFunc iterators.
Definition Module.h:107
const_alias_iterator alias_end() const
Definition Module.h:733
void removeAlias(GlobalAlias *Alias)
Detach Alias from the list but don't delete it.
Definition Module.h:606
iterator_range< named_metadata_iterator > named_metadata()
Definition Module.h:802
friend class Constant
Definition Module.h:212
named_metadata_iterator named_metadata_begin()
Definition Module.h:789
ifunc_iterator ifunc_end()
Definition Module.h:750
GlobalListType::const_iterator const_global_iterator
The Global Variable constant iterator.
Definition Module.h:89
iterator_range< alias_iterator > aliases()
Definition Module.h:737
void insertGlobalVariable(GlobalListType::iterator Where, GlobalVariable *GV)
Insert global variable GV into the global variable list before Where and take ownership.
Definition Module.h:575
alias_iterator alias_end()
Definition Module.h:732
const_alias_iterator alias_begin() const
Definition Module.h:731
const_reverse_iterator rbegin() const
Definition Module.h:702
alias_iterator alias_begin()
Definition Module.h:730
reverse_iterator rend()
Definition Module.h:703
FunctionListType::iterator iterator
The Function iterators.
Definition Module.h:92
GlobalVariable * getGlobalVariable(StringRef Name, bool AllowInternal=false)
Definition Module.h:438
void eraseIFunc(GlobalIFunc *IFunc)
Remove IFunc from the list and delete it.
Definition Module.h:617
bool shouldEmitInstrCountChangedRemark()
Return true if size-info optimization remark is enabled, false otherwise.
Definition Module.h:306
StringMap< NamedMDNode * > NamedMDSymTabType
The type for mapping names to named metadata.
Definition Module.h:84
auto getFunctionDefs()
Get an iterator range over all function definitions (excluding declarations).
Definition Module.h:717
GlobalListType::iterator global_iterator
The Global Variable iterator.
Definition Module.h:87
size_t size() const
Definition Module.h:705
FunctionListType::const_reverse_iterator const_reverse_iterator
The Function constant reverse iterator.
Definition Module.h:99
bool alias_empty() const
Definition Module.h:735
FunctionCallee getOrInsertFunction(StringRef Name, AttributeList AttributeList, FunctionType *Invalid, ArgsTy... Args)=delete
iterator_range< global_iterator > globals()
Definition Module.h:686
const FunctionListType & getFunctionList() const
Get the Module's list of functions (constant).
Definition Module.h:598
const_reverse_iterator rend() const
Definition Module.h:704
iterator_range< const_named_metadata_iterator > named_metadata() const
Definition Module.h:805
concat_iterator< GlobalObject, iterator, global_iterator > global_object_iterator
Definition Module.h:766
IFuncListType::const_iterator const_ifunc_iterator
The Global IFunc constant iterator.
Definition Module.h:109
size_t ifunc_size() const
Definition Module.h:752
SymbolTableList< GlobalVariable > GlobalListType
The type for the list of global variables.
Definition Module.h:72
FunctionListType & getFunctionList()
Get the Module's list of functions.
Definition Module.h:600
void eraseAlias(GlobalAlias *Alias)
Remove Alias from the list and delete it.
Definition Module.h:608
const std::string & getModuleIdentifier() const
Get the module identifier which is, essentially, the name of the module.
Definition Module.h:254
void eraseGlobalVariable(GlobalVariable *GV)
Remove global variable GV from the list and delete it.
Definition Module.h:567
reverse_iterator rbegin()
Definition Module.h:701
FunctionCallee getOrInsertFunction(StringRef Name, Type *RetTy, ArgsTy... Args)
Same as above, but without the attributes.
Definition Module.h:409
void insertNamedMDNode(NamedMDNode *MDNode)
Insert MDNode at the end of the alias list and take ownership.
Definition Module.h:628
const_named_metadata_iterator named_metadata_end() const
Definition Module.h:795
bool empty() const
Definition Module.h:706
void removeNamedMDNode(NamedMDNode *MDNode)
Detach MDNode from the list but don't delete it.
Definition Module.h:624
AliasListType::iterator alias_iterator
The Global Alias iterators.
Definition Module.h:102
iterator end()
Definition Module.h:699
GlobalVariable * getGlobalVariable(StringRef Name) const
Look up the specified global variable in the module symbol table.
Definition Module.h:432
void insertGlobalVariable(GlobalVariable *GV)
Insert global variable GV at the end of the global variable list and take ownership.
Definition Module.h:570
const ValueSymbolTable & getValueSymbolTable() const
Get the symbol table of global variable and function identifiers.
Definition Module.h:666
size_t named_metadata_size() const
Definition Module.h:799
iterator_range< global_object_iterator > global_objects()
Definition Module.cpp:451
named_metadata_iterator named_metadata_end()
Definition Module.h:794
bool isMaterialized() const
Definition Module.h:553
const GlobalVariable * getNamedGlobal(StringRef Name) const
Return the global variable in the module with the specified name, of arbitrary type.
Definition Module.h:447
AliasListType::const_iterator const_alias_iterator
The Global Alias constant iterator.
Definition Module.h:104
FunctionCallee getOrInsertFunction(StringRef Name, FunctionType *T, AttributeList AttributeList)
Look up the specified function in the module symbol table.
Definition Module.cpp:211
ComdatSymTabType & getComdatSymbolTable()
Get the Module's symbol table for COMDATs.
Definition Module.h:673
FunctionListType::reverse_iterator reverse_iterator
The Function reverse iterator.
Definition Module.h:97
const DataLayout & getDataLayout() const
Get the data layout for the module's target platform.
Definition Module.h:280
iterator_range< const_iterator > functions() const
Definition Module.h:711
concat_iterator< GlobalValue, iterator, global_iterator, alias_iterator, ifunc_iterator > global_value_iterator
Definition Module.h:775
NamedMDNode * getModuleFlagsMetadata() const
Returns the NamedMDNode in the module that represents module-level flags.
Definition Module.h:521
iterator_range< const_global_iterator > globals() const
Definition Module.h:689
void setModuleIdentifier(StringRef ID)
Set the module identifier.
Definition Module.h:316
iterator_range< const_ifunc_iterator > ifuncs() const
Definition Module.h:758
SymbolTableList< GlobalAlias > AliasListType
The type for the list of aliases.
Definition Module.h:76
const_iterator end() const
Definition Module.h:700
void setSourceFileName(StringRef Name)
Set the module's original source file name.
Definition Module.h:319
SymbolTableList< GlobalIFunc > IFuncListType
The type for the list of ifuncs.
Definition Module.h:78
auto getFunctionDefs() const
Definition Module.h:721
const_ifunc_iterator ifunc_begin() const
Definition Module.h:749
concat_iterator< const GlobalObject, const_iterator, const_global_iterator > const_global_object_iterator
Definition Module.h:768
const std::string & getDataLayoutStr() const
Get the data layout string for the module's target platform.
Definition Module.h:275
static FunctionListType Module::* getSublistAccess(Function *)
Definition Module.h:601
void appendModuleInlineAsm(StringRef Asm)
Append to the module-scope inline assembly blocks.
Definition Module.h:338
FunctionListType::const_iterator const_iterator
The Function constant iterator.
Definition Module.h:94
concat_iterator< const GlobalValue, const_iterator, const_global_iterator, const_alias_iterator, const_ifunc_iterator > const_global_value_iterator
Definition Module.h:778
void insertAlias(GlobalAlias *Alias)
Insert Alias at the end of the alias list and take ownership.
Definition Module.h:610
debug_compile_units_iterator debug_compile_units_begin() const
Definition Module.h:852
bool ifunc_empty() const
Definition Module.h:753
iterator_range< global_value_iterator > global_values()
Definition Module.cpp:459
void removeGlobalVariable(GlobalVariable *GV)
Detach global variable GV from the list but don't delete it.
Definition Module.h:565
debug_compile_units_iterator debug_compile_units_end() const
Definition Module.h:857
A tuple of MDNodes.
Definition Metadata.h:1760
A random number generator.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:133
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Class to represent struct types.
List that automatically updates parent links and symbol tables.
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:47
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
This class provides a symbol table of name/value pairs.
LLVM Value Representation.
Definition Value.h:75
Represents a version number in the form major[.minor[.subminor[.build]]].
Iterator wrapper that concatenates sequences together.
Definition STLExtras.h:1000
An efficient, type-erasing, non-owning reference to a callable.
typename base_list_type::const_reverse_iterator const_reverse_iterator
Definition ilist.h:124
typename base_list_type::reverse_iterator reverse_iterator
Definition ilist.h:123
typename base_list_type::iterator iterator
Definition ilist.h:121
typename base_list_type::const_iterator const_iterator
Definition ilist.h:122
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
struct LLVMOpaqueModule * LLVMModuleRef
The top-level container for all other LLVM Intermediate Representation (IR) objects.
Definition Types.h:61
struct LLVMOpaqueModuleProvider * LLVMModuleProviderRef
Interface used to provide a module to JIT or interpreter.
Definition Types.h:124
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
This file contains the declaration of the Comdat class, which represents a single COMDAT in LLVM.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition CallingConv.h:24
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
This is an optimization pass for GlobalISel generic memory operations.
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
@ Offset
Definition DWP.cpp:557
FramePointerKind
Definition CodeGen.h:118
APInt operator*(APInt a, uint64_t RHS)
Definition APInt.h:2264
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
Op::Description Desc
ControlFlowGuardMode
Definition CodeGen.h:176
iplist< T, Options... > ilist
Definition ilist.h:344
FunctionAddr VTableAddr uintptr_t uintptr_t Version
Definition InstrProf.h:334
UWTableKind
Definition CodeGen.h:154
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
Definition STLExtras.h:551
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
@ Other
Any other memory.
Definition ModRef.h:68
Attribute unwrap(LLVMAttributeRef Attr)
Definition Attributes.h:397
raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)
WinX64EHUnwindV2Mode
Definition CodeGen.h:167
LLVM_ABI GlobalVariable * collectUsedGlobalVariables(const Module &M, SmallVectorImpl< GlobalValue * > &Vec, bool CompilerUsed)
Given "llvm.used" or "llvm.compiler.used" as a global name, collect the initializer elements of that ...
Definition Module.cpp:887
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
ModFlagBehavior Behavior
Definition Module.h:164
ModuleFlagEntry(ModFlagBehavior B, MDString *K, Metadata *V)
Definition Module.h:168