LLVM 24.0.0git
Module.cpp
Go to the documentation of this file.
1//===- Module.cpp - Implement the Module class ----------------------------===//
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// This file implements the Module class for the IR library.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/IR/Module.h"
17#include "llvm/ADT/StringMap.h"
18#include "llvm/ADT/StringRef.h"
19#include "llvm/ADT/Twine.h"
20#include "llvm/IR/Attributes.h"
21#include "llvm/IR/Comdat.h"
22#include "llvm/IR/Constants.h"
23#include "llvm/IR/DataLayout.h"
26#include "llvm/IR/Function.h"
28#include "llvm/IR/GlobalAlias.h"
29#include "llvm/IR/GlobalIFunc.h"
30#include "llvm/IR/GlobalValue.h"
32#include "llvm/IR/LLVMContext.h"
33#include "llvm/IR/Metadata.h"
36#include "llvm/IR/Type.h"
37#include "llvm/IR/TypeFinder.h"
38#include "llvm/IR/Value.h"
43#include "llvm/Support/Error.h"
45#include "llvm/Support/Path.h"
49#include <cassert>
50#include <cstdint>
51#include <memory>
52#include <optional>
53#include <utility>
54#include <vector>
55
56using namespace llvm;
57
58//===----------------------------------------------------------------------===//
59// Methods to implement the globals and functions lists.
60//
61
62// Explicit instantiations of SymbolTableListTraits since some of the methods
63// are not in the public header file.
68
69//===----------------------------------------------------------------------===//
70// Primitive Module methods.
71//
72
74 : Context(C), ValSymTab(std::make_unique<ValueSymbolTable>(-1)),
75 ModuleID(std::string(MID)), SourceFileName(std::string(MID)) {
76 Context.addModule(this);
77}
78
80 assert(&Context == &Other.Context && "Module must be in the same Context");
81
82 dropAllReferences();
83
84 ModuleID = std::move(Other.ModuleID);
85 SourceFileName = std::move(Other.SourceFileName);
86
87 GlobalList.clear();
88 GlobalList.splice(GlobalList.begin(), Other.GlobalList);
89
90 FunctionList.clear();
91 FunctionList.splice(FunctionList.begin(), Other.FunctionList);
92
93 AliasList.clear();
94 AliasList.splice(AliasList.begin(), Other.AliasList);
95
96 IFuncList.clear();
97 IFuncList.splice(IFuncList.begin(), Other.IFuncList);
98
99 NamedMDList.clear();
100 NamedMDList.splice(NamedMDList.begin(), Other.NamedMDList);
101 for (NamedMDNode &NMD : NamedMDList)
102 NMD.setParent(this);
103
104 NamedMDSymTab = std::move(Other.NamedMDSymTab);
105 ComdatSymTab = std::move(Other.ComdatSymTab);
106 GlobalScopeAsm = std::move(Other.GlobalScopeAsm);
107 OwnedMemoryBuffer = std::move(Other.OwnedMemoryBuffer);
108 Materializer = std::move(Other.Materializer);
109 TargetTriple = std::move(Other.TargetTriple);
110 DL = std::move(Other.DL);
111 CurrentIntrinsicIds = std::move(Other.CurrentIntrinsicIds);
112 UniquedIntrinsicNames = std::move(Other.UniquedIntrinsicNames);
113 ModuleFlags = std::move(Other.ModuleFlags);
114 Context.addModule(this);
115 return *this;
116}
117
119 Context.removeModule(this);
120 dropAllReferences();
121 GlobalList.clear();
122 FunctionList.clear();
123 AliasList.clear();
124 IFuncList.clear();
125}
126
128 if (auto *DeclareIntrinsicFn =
129 Intrinsic::getDeclarationIfExists(this, Intrinsic::dbg_declare)) {
130 assert((!isMaterialized() || DeclareIntrinsicFn->hasZeroLiveUses()) &&
131 "Debug declare intrinsic should have had uses removed.");
132 DeclareIntrinsicFn->eraseFromParent();
133 }
134 if (auto *ValueIntrinsicFn =
135 Intrinsic::getDeclarationIfExists(this, Intrinsic::dbg_value)) {
136 assert((!isMaterialized() || ValueIntrinsicFn->hasZeroLiveUses()) &&
137 "Debug value intrinsic should have had uses removed.");
138 ValueIntrinsicFn->eraseFromParent();
139 }
140 if (auto *AssignIntrinsicFn =
141 Intrinsic::getDeclarationIfExists(this, Intrinsic::dbg_assign)) {
142 assert((!isMaterialized() || AssignIntrinsicFn->hasZeroLiveUses()) &&
143 "Debug assign intrinsic should have had uses removed.");
144 AssignIntrinsicFn->eraseFromParent();
145 }
146 if (auto *LabelntrinsicFn =
147 Intrinsic::getDeclarationIfExists(this, Intrinsic::dbg_label)) {
148 assert((!isMaterialized() || LabelntrinsicFn->hasZeroLiveUses()) &&
149 "Debug label intrinsic should have had uses removed.");
150 LabelntrinsicFn->eraseFromParent();
151 }
152}
153
154std::unique_ptr<RandomNumberGenerator>
155Module::createRNG(const StringRef Name) const {
156 SmallString<32> Salt(Name);
157
158 // This RNG is guaranteed to produce the same random stream only
159 // when the Module ID and thus the input filename is the same. This
160 // might be problematic if the input filename extension changes
161 // (e.g. from .c to .bc or .ll).
162 //
163 // We could store this salt in NamedMetadata, but this would make
164 // the parameter non-const. This would unfortunately make this
165 // interface unusable by any Machine passes, since they only have a
166 // const reference to their IR Module. Alternatively we can always
167 // store salt metadata from the Module constructor.
168 Salt += sys::path::filename(getModuleIdentifier());
169
170 return std::unique_ptr<RandomNumberGenerator>(
171 new RandomNumberGenerator(Salt));
172}
173
174/// getNamedValue - Return the first global value in the module with
175/// the specified name, of arbitrary type. This method returns null
176/// if a global with the specified name is not found.
178 return cast_or_null<GlobalValue>(getValueSymbolTable().lookup(Name));
179}
180
181unsigned Module::getNumNamedValues() const {
182 return getValueSymbolTable().size();
183}
184
185/// getMDKindID - Return a unique non-zero ID for the specified metadata kind.
186/// This ID is uniqued across modules in the current LLVMContext.
187unsigned Module::getMDKindID(StringRef Name) const {
188 return Context.getMDKindID(Name);
189}
190
191/// getMDKindNames - Populate client supplied SmallVector with the name for
192/// custom metadata IDs registered in this LLVMContext. ID #0 is not used,
193/// so it is filled in as an empty string.
195 return Context.getMDKindNames(Result);
196}
197
199 return Context.getOperandBundleTags(Result);
200}
201
202//===----------------------------------------------------------------------===//
203// Methods for easy access to the functions in the module.
204//
205
206// getOrInsertFunction - Look up the specified function in the module symbol
207// table. If it does not exist, add a prototype for the function and return
208// it. This is nice because it allows most passes to get away with not handling
209// the symbol table directly for this common task.
210//
212 AttributeList AttributeList) {
213 // See if we have a definition for the specified function already.
214 GlobalValue *F = getNamedValue(Name);
215 if (!F) {
216 // Nope, add it
218 DL.getProgramAddressSpace(), Name, this);
219 if (!New->isIntrinsic()) // Intrinsics get attrs set on construction
220 New->setAttributes(AttributeList);
221 return {Ty, New}; // Return the new prototype.
222 }
223
224 // Otherwise, we just found the existing function or a prototype.
225 return {Ty, F};
226}
227
229 return getOrInsertFunction(Name, Ty, AttributeList());
230}
231
232// getFunction - Look up the specified function in the module symbol table.
233// If it does not exist, return null.
234//
236 return dyn_cast_or_null<Function>(getNamedValue(Name));
237}
238
239//===----------------------------------------------------------------------===//
240// Methods for easy access to the global variables in the module.
241//
242
243/// getGlobalVariable - Look up the specified global variable in the module
244/// symbol table. If it does not exist, return null. The type argument
245/// should be the underlying type of the global, i.e., it should not have
246/// the top-level PointerType, which represents the address of the global.
247/// If AllowLocal is set to true, this function will return types that
248/// have an local. By default, these types are not returned.
249///
251 bool AllowLocal) const {
252 if (GlobalVariable *Result =
253 dyn_cast_or_null<GlobalVariable>(getNamedValue(Name)))
254 if (AllowLocal || !Result->hasLocalLinkage())
255 return Result;
256 return nullptr;
257}
258
259/// getOrInsertGlobal - Look up the specified global in the module symbol table.
260/// If it does not exist, add a declaration of the global and return it.
261/// Otherwise, return the existing global.
263 StringRef Name, Type *Ty,
264 function_ref<GlobalVariable *()> CreateGlobalCallback) {
265 // See if we have a definition for the specified global already.
266 GlobalVariable *GV = dyn_cast_or_null<GlobalVariable>(getNamedValue(Name));
267 if (!GV)
268 GV = CreateGlobalCallback();
269 assert(GV && "The CreateGlobalCallback is expected to create a global");
270
271 // Otherwise, we just found the existing function or a prototype.
272 return GV;
273}
274
275// Overload to construct a global variable using its constructor's defaults.
277 return getOrInsertGlobal(Name, Ty, [&] {
278 return new GlobalVariable(*this, Ty, false, GlobalVariable::ExternalLinkage,
279 nullptr, Name);
280 });
281}
282
283//===----------------------------------------------------------------------===//
284// Methods for easy access to the global variables in the module.
285//
286
287// getNamedAlias - Look up the specified global in the module symbol table.
288// If it does not exist, return null.
289//
291 return dyn_cast_or_null<GlobalAlias>(getNamedValue(Name));
292}
293
295 return dyn_cast_or_null<GlobalIFunc>(getNamedValue(Name));
296}
297
298/// getNamedMetadata - Return the first NamedMDNode in the module with the
299/// specified name. This method returns null if a NamedMDNode with the
300/// specified name is not found.
302 return NamedMDSymTab.lookup(Name);
303}
304
305/// getOrInsertNamedMetadata - Return the first named MDNode in the module
306/// with the specified name. This method returns a new NamedMDNode if a
307/// NamedMDNode with the specified name is not found.
309 NamedMDNode *&NMD = NamedMDSymTab[Name];
310 if (!NMD) {
311 NMD = new NamedMDNode(Name);
312 NMD->setParent(this);
313 insertNamedMDNode(NMD);
314 if (Name == "llvm.module.flags")
315 ModuleFlags = NMD;
316 }
317 return NMD;
318}
319
320/// eraseNamedMetadata - Remove the given NamedMDNode from this module and
321/// delete it.
323 NamedMDSymTab.erase(NMD->getName());
324 if (NMD == ModuleFlags)
325 ModuleFlags = nullptr;
326 eraseNamedMDNode(NMD);
327}
328
329bool Module::isValidModFlagBehavior(Metadata *MD, ModFlagBehavior &MFB) {
331 uint64_t Val = Behavior->getLimitedValue();
332 if (Val >= ModFlagBehaviorFirstVal && Val <= ModFlagBehaviorLastVal) {
333 MFB = static_cast<ModFlagBehavior>(Val);
334 return true;
335 }
336 }
337 return false;
338}
339
340/// getModuleFlagsMetadata - Returns the module flags in the provided vector.
341void Module::
342getModuleFlagsMetadata(SmallVectorImpl<ModuleFlagEntry> &Flags) const {
343 const NamedMDNode *ModFlags = getModuleFlagsMetadata();
344 if (!ModFlags) return;
345
346 for (const MDNode *Flag : ModFlags->operands()) {
347 // The verifier will catch errors, so no need to check them here.
348 auto *MFBConstant = mdconst::extract<ConstantInt>(Flag->getOperand(0));
349 auto MFB = static_cast<ModFlagBehavior>(MFBConstant->getLimitedValue());
350 MDString *Key = cast<MDString>(Flag->getOperand(1));
351 Metadata *Val = Flag->getOperand(2);
352 Flags.push_back(ModuleFlagEntry(MFB, Key, Val));
353 }
354}
355
356/// Return the corresponding value if Key appears in module flags, otherwise
357/// return null.
359 const NamedMDNode *ModFlags = getModuleFlagsMetadata();
360 if (!ModFlags)
361 return nullptr;
362 for (const MDNode *Flag : ModFlags->operands()) {
363 if (Key == cast<MDString>(Flag->getOperand(1))->getString())
364 return Flag->getOperand(2);
365 }
366 return nullptr;
367}
368
369/// getOrInsertModuleFlagsMetadata - Returns the NamedMDNode in the module that
370/// represents module-level flags. If module-level flags aren't found, it
371/// creates the named metadata that contains them.
373 if (ModuleFlags)
374 return ModuleFlags;
375 return getOrInsertNamedMetadata("llvm.module.flags");
376}
377
378/// addModuleFlag - Add a module-level flag to the module-level flags
379/// metadata. It will create the module-level flags named metadata if it doesn't
380/// already exist.
381void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
382 Metadata *Val) {
383 Type *Int32Ty = Type::getInt32Ty(Context);
384 Metadata *Ops[3] = {
385 ConstantAsMetadata::get(ConstantInt::get(Int32Ty, Behavior)),
386 MDString::get(Context, Key), Val};
387 getOrInsertModuleFlagsMetadata()->addOperand(MDNode::get(Context, Ops));
388}
389void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
390 Constant *Val) {
391 addModuleFlag(Behavior, Key, ConstantAsMetadata::get(Val));
392}
393void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
394 uint64_t Val) {
395 Type *Int64Ty = Type::getInt64Ty(Context);
396 addModuleFlag(Behavior, Key, ConstantInt::get(Int64Ty, Val));
397}
398void Module::addModuleFlag(ModFlagBehavior Behavior, StringRef Key,
399 uint32_t Val) {
400 Type *Int32Ty = Type::getInt32Ty(Context);
401 addModuleFlag(Behavior, Key, ConstantInt::get(Int32Ty, Val));
402}
404 assert(Node->getNumOperands() == 3 &&
405 "Invalid number of operands for module flag!");
406 assert(mdconst::hasa<ConstantInt>(Node->getOperand(0)) &&
407 isa<MDString>(Node->getOperand(1)) &&
408 "Invalid operand types for module flag!");
409 getOrInsertModuleFlagsMetadata()->addOperand(Node);
410}
411
412void Module::setModuleFlag(ModFlagBehavior Behavior, StringRef Key,
413 Metadata *Val) {
414 NamedMDNode *ModFlags = getOrInsertModuleFlagsMetadata();
415 // Replace the flag if it already exists.
416 for (unsigned i = 0; i < ModFlags->getNumOperands(); ++i) {
417 MDNode *Flag = ModFlags->getOperand(i);
418 if (cast<MDString>(Flag->getOperand(1))->getString() == Key) {
419 Type *Int32Ty = Type::getInt32Ty(Context);
420 Metadata *Ops[3] = {
421 ConstantAsMetadata::get(ConstantInt::get(Int32Ty, Behavior)),
422 MDString::get(Context, Key), Val};
423 ModFlags->setOperand(i, MDNode::get(Context, Ops));
424 return;
425 }
426 }
427 addModuleFlag(Behavior, Key, Val);
428}
429void Module::setModuleFlag(ModFlagBehavior Behavior, StringRef Key,
430 Constant *Val) {
431 setModuleFlag(Behavior, Key, ConstantAsMetadata::get(Val));
432}
433void Module::setModuleFlag(ModFlagBehavior Behavior, StringRef Key,
434 uint64_t Val) {
435 Type *Int64Ty = Type::getInt64Ty(Context);
436 setModuleFlag(Behavior, Key, ConstantInt::get(Int64Ty, Val));
437}
438void Module::setModuleFlag(ModFlagBehavior Behavior, StringRef Key,
439 uint32_t Val) {
440 Type *Int32Ty = Type::getInt32Ty(Context);
441 setModuleFlag(Behavior, Key, ConstantInt::get(Int32Ty, Val));
442}
443
445
447
449 return cast<DICompileUnit>(CUs->getOperand(Idx));
450}
452 return cast<DICompileUnit>(CUs->getOperand(Idx));
453}
454
455void Module::debug_compile_units_iterator::SkipNoDebugCUs() {
456 while (CUs && (Idx < CUs->getNumOperands()) &&
457 ((*this)->getEmissionKind() == DICompileUnit::NoDebug))
458 ++Idx;
459}
460
463}
467}
468
470 return concat<GlobalValue>(functions(), globals(), aliases(), ifuncs());
471}
473Module::global_values() const {
474 return concat<const GlobalValue>(functions(), globals(), aliases(), ifuncs());
475}
476
477//===----------------------------------------------------------------------===//
478// Methods to control the materialization of GlobalValues in the Module.
479//
481 assert(!Materializer &&
482 "Module already has a GVMaterializer. Call materializeAll"
483 " to clear it out before setting another one.");
484 Materializer.reset(GVM);
485}
486
488 if (!Materializer)
489 return Error::success();
490
491 return Materializer->materialize(GV);
492}
493
495 if (!Materializer)
496 return Error::success();
497 std::unique_ptr<GVMaterializer> M = std::move(Materializer);
498 return M->materializeModule();
499}
500
502 llvm::TimeTraceScope timeScope("Materialize metadata");
503 if (!Materializer)
504 return Error::success();
505 return Materializer->materializeMetadata();
506}
507
508//===----------------------------------------------------------------------===//
509// Other module related stuff.
510//
511
512std::vector<StructType *> Module::getIdentifiedStructTypes() const {
513 // If we have a materializer, it is possible that some unread function
514 // uses a type that is currently not visible to a TypeFinder, so ask
515 // the materializer which types it created.
516 if (Materializer)
517 return Materializer->getIdentifiedStructTypes();
518
519 std::vector<StructType *> Ret;
520 TypeFinder SrcStructTypes;
521 SrcStructTypes.run(*this, true);
522 Ret.assign(SrcStructTypes.begin(), SrcStructTypes.end());
523 return Ret;
524}
525
527 const FunctionType *Proto) {
528 auto Encode = [&BaseName](unsigned Suffix) {
529 return (Twine(BaseName) + "." + Twine(Suffix)).str();
530 };
531
532 {
533 // fast path - the prototype is already known
534 auto UinItInserted = UniquedIntrinsicNames.insert({{Id, Proto}, 0});
535 if (!UinItInserted.second)
536 return Encode(UinItInserted.first->second);
537 }
538
539 // Not known yet. A new entry was created with index 0. Check if there already
540 // exists a matching declaration, or select a new entry.
541
542 // Start looking for names with the current known maximum count (or 0).
543 auto NiidItInserted = CurrentIntrinsicIds.insert({BaseName, 0});
544 unsigned Count = NiidItInserted.first->second;
545
546 // This might be slow if a whole population of intrinsics already existed, but
547 // we cache the values for later usage.
548 std::string NewName;
549 while (true) {
550 NewName = Encode(Count);
551 GlobalValue *F = getNamedValue(NewName);
552 if (!F) {
553 // Reserve this entry for the new proto
554 UniquedIntrinsicNames[{Id, Proto}] = Count;
555 break;
556 }
557
558 // A declaration with this name already exists. Remember it.
559 FunctionType *FT = dyn_cast<FunctionType>(F->getValueType());
560 auto UinItInserted = UniquedIntrinsicNames.insert({{Id, FT}, Count});
561 if (FT == Proto) {
562 // It was a declaration for our prototype. This entry was allocated in the
563 // beginning. Update the count to match the existing declaration.
564 UinItInserted.first->second = Count;
565 break;
566 }
567
568 ++Count;
569 }
570
571 NiidItInserted.first->second = Count + 1;
572
573 return NewName;
574}
575
576// dropAllReferences() - This function causes all the subelements to "let go"
577// of all references that they are maintaining. This allows one to 'delete' a
578// whole module at a time, even though there may be circular references... first
579// all references are dropped, and all use counts go to zero. Then everything
580// is deleted for real. Note that no operations are valid on an object that
581// has "dropped all references", except operator delete.
582//
584 for (Function &F : *this)
585 F.dropAllReferences();
586
587 for (GlobalVariable &GV : globals())
589
590 for (GlobalAlias &GA : aliases())
591 GA.dropAllReferences();
592
593 for (GlobalIFunc &GIF : ifuncs())
594 GIF.dropAllReferences();
595}
596
598 auto *Val =
599 cast_or_null<ConstantAsMetadata>(getModuleFlag("NumRegisterParameters"));
600 if (!Val)
601 return 0;
602 return cast<ConstantInt>(Val->getValue())->getZExtValue();
603}
604
605unsigned Module::getDwarfVersion() const {
606 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("Dwarf Version"));
607 if (!Val)
608 return 0;
609 return cast<ConstantInt>(Val->getValue())->getZExtValue();
610}
611
612bool Module::isDwarf64() const {
613 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("DWARF64"));
614 return Val && cast<ConstantInt>(Val->getValue())->isOne();
615}
616
617unsigned Module::getCodeViewFlag() const {
618 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("CodeView"));
619 if (!Val)
620 return 0;
621 return cast<ConstantInt>(Val->getValue())->getZExtValue();
622}
623
624unsigned Module::getInstructionCount() const {
625 unsigned NumInstrs = 0;
626 for (const Function &F : FunctionList)
627 NumInstrs += F.getInstructionCount();
628 return NumInstrs;
629}
630
632 auto &Entry = *ComdatSymTab.insert(std::make_pair(Name, Comdat())).first;
633 Entry.second.Name = &Entry;
634 return &Entry.second;
635}
636
638 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("PIC Level"));
639
640 if (!Val)
641 return PICLevel::NotPIC;
642
643 return static_cast<PICLevel::Level>(
644 cast<ConstantInt>(Val->getValue())->getZExtValue());
645}
646
648 // The merge result of a non-PIC object and a PIC object can only be reliably
649 // used as a non-PIC object, so use the Min merge behavior.
650 addModuleFlag(ModFlagBehavior::Min, "PIC Level", PL);
651}
652
654 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("PIE Level"));
655
656 if (!Val)
657 return PIELevel::Default;
658
659 return static_cast<PIELevel::Level>(
660 cast<ConstantInt>(Val->getValue())->getZExtValue());
661}
662
664 addModuleFlag(ModFlagBehavior::Max, "PIE Level", PL);
665}
666
667std::optional<CodeModel::Model> Module::getCodeModel() const {
668 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("Code Model"));
669
670 if (!Val)
671 return std::nullopt;
672
673 return static_cast<CodeModel::Model>(
674 cast<ConstantInt>(Val->getValue())->getZExtValue());
675}
676
678 // Linking object files with different code models is undefined behavior
679 // because the compiler would have to generate additional code (to span
680 // longer jumps) if a larger code model is used with a smaller one.
681 // Therefore we will treat attempts to mix code models as an error.
682 addModuleFlag(ModFlagBehavior::Error, "Code Model", CL);
683}
684
685std::optional<uint64_t> Module::getLargeDataThreshold() const {
686 auto *Val =
687 cast_or_null<ConstantAsMetadata>(getModuleFlag("Large Data Threshold"));
688
689 if (!Val)
690 return std::nullopt;
691
692 return cast<ConstantInt>(Val->getValue())->getZExtValue();
693}
694
696 // Since the large data threshold goes along with the code model, the merge
697 // behavior is the same.
698 addModuleFlag(ModFlagBehavior::Error, "Large Data Threshold",
699 ConstantInt::get(Type::getInt64Ty(Context), Threshold));
700}
701
703 if (Kind == ProfileSummary::PSK_CSInstr)
704 setModuleFlag(ModFlagBehavior::Error, "CSProfileSummary", M);
705 else
706 setModuleFlag(ModFlagBehavior::Error, "ProfileSummary", M);
707}
708
709Metadata *Module::getProfileSummary(bool IsCS) const {
710 return (IsCS ? getModuleFlag("CSProfileSummary")
711 : getModuleFlag("ProfileSummary"));
712}
713
715 Metadata *MF = getModuleFlag("SemanticInterposition");
716
717 auto *Val = cast_or_null<ConstantAsMetadata>(MF);
718 if (!Val)
719 return false;
720
721 return cast<ConstantInt>(Val->getValue())->getZExtValue();
722}
723
725 addModuleFlag(ModFlagBehavior::Error, "SemanticInterposition", SI);
726}
727
728void Module::setOwnedMemoryBuffer(std::unique_ptr<MemoryBuffer> MB) {
729 OwnedMemoryBuffer = std::move(MB);
730}
731
732bool Module::getRtLibUseGOT() const {
733 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("RtLibUseGOT"));
734 return Val && (cast<ConstantInt>(Val->getValue())->getZExtValue() > 0);
735}
736
738 addModuleFlag(ModFlagBehavior::Max, "RtLibUseGOT", 1);
739}
740
743 getModuleFlag("direct-access-external-data"));
744 if (Val)
745 return cast<ConstantInt>(Val->getValue())->getZExtValue() > 0;
746 return getPICLevel() == PICLevel::NotPIC;
747}
748
750 addModuleFlag(ModFlagBehavior::Max, "direct-access-external-data", Value);
751}
752
754 if (auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("uwtable")))
755 return UWTableKind(cast<ConstantInt>(Val->getValue())->getZExtValue());
756 return UWTableKind::None;
757}
758
760 addModuleFlag(ModFlagBehavior::Max, "uwtable", uint32_t(Kind));
761}
762
763FramePointerKind Module::getFramePointer() const {
764 auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("frame-pointer"));
765 return static_cast<FramePointerKind>(
766 Val ? cast<ConstantInt>(Val->getValue())->getZExtValue() : 0);
767}
768
769void Module::setFramePointer(FramePointerKind Kind) {
770 addModuleFlag(ModFlagBehavior::Max, "frame-pointer", static_cast<int>(Kind));
771}
772
775 getModuleFlag("stack-protector-guard-record"));
776 return Val && cast<ConstantInt>(Val->getValue())->isOne();
777}
778
780 addModuleFlag(ModFlagBehavior::Max, "stack-protector-guard-record",
781 Flag ? 1 : 0);
782}
783
785 Metadata *MD = getModuleFlag("stack-protector-guard");
786 if (auto *MDS = dyn_cast_or_null<MDString>(MD))
787 return MDS->getString();
788 return {};
789}
790
793 addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard", ID);
794}
795
797 Metadata *MD = getModuleFlag("stack-protector-guard-reg");
798 if (auto *MDS = dyn_cast_or_null<MDString>(MD))
799 return MDS->getString();
800 return {};
801}
802
805 addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-reg", ID);
806}
807
809 Metadata *MD = getModuleFlag("stack-protector-guard-symbol");
810 if (auto *MDS = dyn_cast_or_null<MDString>(MD))
811 return MDS->getString();
812 return {};
813}
814
816 MDString *ID = MDString::get(getContext(), Symbol);
817 addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-symbol", ID);
818}
819
821 Metadata *MD = getModuleFlag("stack-protector-guard-offset");
823 return CI->getSExtValue();
824 return INT_MAX;
825}
826
828 addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-offset", Offset);
829}
830
831std::optional<unsigned> Module::getStackProtectorGuardValueWidth() const {
832 Metadata *MD = getModuleFlag("stack-protector-guard-value-width");
834 return CI->getZExtValue();
835 return std::nullopt;
836}
837
838void Module::setStackProtectorGuardValueWidth(unsigned Width) {
839 addModuleFlag(ModFlagBehavior::Error, "stack-protector-guard-value-width",
840 Width);
841}
842
843unsigned Module::getOverrideStackAlignment() const {
844 Metadata *MD = getModuleFlag("override-stack-alignment");
846 return CI->getZExtValue();
847 return 0;
848}
849
850unsigned Module::getMaxTLSAlignment() const {
851 Metadata *MD = getModuleFlag("MaxTLSAlign");
853 return CI->getZExtValue();
854 return 0;
855}
856
858 addModuleFlag(ModFlagBehavior::Error, "override-stack-alignment", Align);
859}
860
861static void addSDKVersionMD(const VersionTuple &V, Module &M, StringRef Name) {
863 Entries.push_back(V.getMajor());
864 if (auto Minor = V.getMinor()) {
865 Entries.push_back(*Minor);
866 if (auto Subminor = V.getSubminor())
867 Entries.push_back(*Subminor);
868 // Ignore the 'build' component as it can't be represented in the object
869 // file.
870 }
871 M.addModuleFlag(Module::ModFlagBehavior::Warning, Name,
872 ConstantDataArray::get(M.getContext(), Entries));
873}
874
875void Module::setSDKVersion(const VersionTuple &V) {
876 addSDKVersionMD(V, *this, "SDK Version");
877}
878
881 if (!CM)
882 return {};
883 auto *Arr = dyn_cast_or_null<ConstantDataArray>(CM->getValue());
884 if (!Arr)
885 return {};
886 auto getVersionComponent = [&](unsigned Index) -> std::optional<unsigned> {
887 if (Index >= Arr->getNumElements())
888 return std::nullopt;
889 return (unsigned)Arr->getElementAsInteger(Index);
890 };
891 auto Major = getVersionComponent(0);
892 if (!Major)
893 return {};
895 if (auto Minor = getVersionComponent(1)) {
896 Result = VersionTuple(*Major, *Minor);
897 if (auto Subminor = getVersionComponent(2)) {
898 Result = VersionTuple(*Major, *Minor, *Subminor);
899 }
900 }
901 return Result;
902}
903
905 return getSDKVersionMD(getModuleFlag("SDK Version"));
906}
907
909 const Module &M, SmallVectorImpl<GlobalValue *> &Vec, bool CompilerUsed) {
910 const char *Name = CompilerUsed ? "llvm.compiler.used" : "llvm.used";
911 GlobalVariable *GV = M.getGlobalVariable(Name);
912 if (!GV || !GV->hasInitializer())
913 return GV;
914
916 for (Value *Op : Init->operands()) {
917 GlobalValue *G = cast<GlobalValue>(Op->stripPointerCasts());
918 Vec.push_back(G);
919 }
920 return GV;
921}
922
924 if (auto *SummaryMD = getProfileSummary(/*IsCS*/ false)) {
925 std::unique_ptr<ProfileSummary> ProfileSummary(
926 ProfileSummary::getFromMD(SummaryMD));
927 if (ProfileSummary) {
930 return;
931 uint64_t BlockCount = Index.getBlockCount();
932 uint32_t NumCounts = ProfileSummary->getNumCounts();
933 if (!NumCounts)
934 return;
935 double Ratio = (double)BlockCount / NumCounts;
937 setProfileSummary(ProfileSummary->getMD(getContext()),
939 }
940 }
941}
942
944 if (const auto *MD = getModuleFlag("darwin.target_variant.triple"))
945 return cast<MDString>(MD)->getString();
946 return "";
947}
948
950 addModuleFlag(ModFlagBehavior::Warning, "darwin.target_variant.triple",
952}
953
955 return getSDKVersionMD(getModuleFlag("darwin.target_variant.SDK Version"));
956}
957
959 addSDKVersionMD(Version, *this, "darwin.target_variant.SDK Version");
960}
961
963 StringRef TargetABI;
964 if (auto *TargetABIMD =
965 dyn_cast_or_null<MDString>(getModuleFlag("target-abi")))
966 TargetABI = TargetABIMD->getString();
967 return TargetABI;
968}
969
971 // Check the new unified flag first.
972 if (Metadata *MD = getModuleFlag("winx64-eh-unwind")) {
974 return static_cast<WinX64EHUnwindMode>(CI->getZExtValue());
975 }
976 // Fall back to the legacy V2 flag.
977 if (Metadata *MD = getModuleFlag("winx64-eh-unwindv2")) {
979 return static_cast<WinX64EHUnwindMode>(CI->getZExtValue());
980 }
982}
983
985 Metadata *MD = getModuleFlag("cfguard");
987 return static_cast<ControlFlowGuardMode>(CI->getZExtValue());
989}
990
991bool Module::GlobalAsmProperties::set(StringRef Name, std::string Value) {
992 if (Name == "target_features")
993 TargetFeatures = std::move(Value);
994 else if (Name == "target_cpu")
995 TargetCPU = std::move(Value);
996 else
997 return false;
998 return true;
999}
1000
1004 if (!TargetFeatures.empty())
1005 Props.emplace_back("target_features", TargetFeatures);
1006 if (!TargetCPU.empty())
1007 Props.emplace_back("target_cpu", TargetCPU);
1008 return Props;
1009}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
Lower uses of LDS variables from non kernel functions
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
This file contains the simple types necessary to represent the attributes associated with functions a...
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
#define LLVM_EXPORT_TEMPLATE
Definition Compiler.h:217
This file contains the declarations for the subclasses of Constant, which represent the different fla...
dxil globals
dxil translate DXIL Translate Metadata
This file contains the declaration of the GlobalIFunc class, which represents a single indirect funct...
Module.h This file contains the declarations for the Module class.
static bool lookup(const GsymReader &GR, GsymDataExtractor &Data, uint64_t &Offset, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs, llvm::Error &Err)
A Lookup helper functions.
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define F(x, y, z)
Definition MD5.cpp:54
#define G(x, y, z)
Definition MD5.cpp:55
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
ModuleSummaryIndex.h This file contains the declarations the classes that hold the module index and s...
StandardInstrumentations SI(Mod->getContext(), Debug, VerifyEach)
Func getContext().diagnose(DiagnosticInfoUnsupported(Func
static VersionTuple getSDKVersionMD(Metadata *MD)
Definition Module.cpp:879
static void addSDKVersionMD(const VersionTuple &V, Module &M, StringRef Name)
Definition Module.cpp:861
This file defines the SmallString class.
This file defines the SmallVector class.
Defines the llvm::VersionTuple class, which represents a version in the form major[....
ConstantArray - Constant Array Declarations.
Definition Constants.h:590
static ConstantAsMetadata * get(Constant *C)
Definition Metadata.h:537
static Constant * get(LLVMContext &Context, ArrayRef< ElementTy > Elts)
get() constructor - Return a constant with array type with an element count and element type matching...
Definition Constants.h:878
This is the shared class of boolean and integer constants.
Definition Constants.h:87
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
static ErrorSuccess success()
Create a success value.
Definition Error.h:336
A handy container for a FunctionType+Callee-pointer pair, which can be passed around as a single enti...
static Function * Create(FunctionType *Ty, LinkageTypes Linkage, unsigned AddrSpace, const Twine &N="", Module *M=nullptr)
Definition Function.h:168
@ ExternalLinkage
Externally visible function.
Definition GlobalValue.h:53
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
bool hasInitializer() const
Definitions have initializers, declarations don't.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
Metadata node.
Definition Metadata.h:1069
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1565
A single uniqued string.
Definition Metadata.h:722
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
Definition Metadata.cpp:614
Class to hold module path string table and global value map, and encapsulate methods for operating on...
LLVM_ABI DICompileUnit * operator*() const
Definition Module.cpp:448
LLVM_ABI DICompileUnit * operator->() const
Definition Module.cpp:451
void setStackProtectorGuardSymbol(StringRef Symbol)
Definition Module.cpp:815
void setSemanticInterposition(bool)
Set whether semantic interposition is to be respected.
Definition Module.cpp:724
NamedMDNode * getNamedMetadata(StringRef Name) const
Return the first NamedMDNode in the module with the specified name.
Definition Module.cpp:301
@ Warning
Emits a warning if two values disagree.
Definition Module.h:124
llvm::Error materializeAll()
Make sure all GlobalValues in this Module are fully read and clear the Materializer.
Definition Module.cpp:494
void setOverrideStackAlignment(unsigned Align)
Definition Module.cpp:857
void setDirectAccessExternalData(bool Value)
Definition Module.cpp:749
unsigned getMaxTLSAlignment() const
Definition Module.cpp:850
StringRef getTargetABIFromMD()
Returns target-abi from MDString, null if target-abi is absent.
Definition Module.cpp:962
WinX64EHUnwindMode getWinX64EHUnwindMode() const
Get how unwind information should be generated for x64 Windows.
Definition Module.cpp:970
void setOwnedMemoryBuffer(std::unique_ptr< MemoryBuffer > MB)
Take ownership of the given memory buffer.
Definition Module.cpp:728
void setMaterializer(GVMaterializer *GVM)
Sets the GVMaterializer to GVM.
Definition Module.cpp:480
llvm::Error materialize(GlobalValue *GV)
Make sure the GlobalValue is fully read.
Definition Module.cpp:487
Function * getFunction(StringRef Name) const
Look up the specified function in the module symbol table.
Definition Module.cpp:235
void setCodeModel(CodeModel::Model CL)
Set the code model (tiny, small, kernel, medium or large)
Definition Module.cpp:677
StringRef getStackProtectorGuardSymbol() const
Get/set a symbol to use as the stack protector guard.
Definition Module.cpp:808
bool getSemanticInterposition() const
Returns whether semantic interposition is to be respected.
Definition Module.cpp:714
void getMDKindNames(SmallVectorImpl< StringRef > &Result) const
Populate client supplied SmallVector with the name for custom metadata IDs registered in this LLVMCon...
Definition Module.cpp:194
Module(StringRef ModuleID, LLVMContext &C)
The Module constructor.
Definition Module.cpp:73
std::optional< unsigned > getStackProtectorGuardValueWidth() const
Get/set the width in memory of the stack protector guard value.
Definition Module.cpp:831
void removeDebugIntrinsicDeclarations()
Used when printing this module in the new debug info format; removes all declarations of debug intrin...
Definition Module.cpp:127
void setRtLibUseGOT()
Set that PLT should be avoid for RTLib calls.
Definition Module.cpp:737
llvm::Error materializeMetadata()
Definition Module.cpp:501
NamedMDNode * getOrInsertModuleFlagsMetadata()
Returns the NamedMDNode in the module that represents module-level flags.
Definition Module.cpp:372
ControlFlowGuardMode getControlFlowGuardMode() const
Gets the Control Flow Guard mode.
Definition Module.cpp:984
void eraseNamedMetadata(NamedMDNode *NMD)
Remove the given NamedMDNode from this module and delete it.
Definition Module.cpp:322
unsigned getNumNamedValues() const
Return the number of global values in the module.
Definition Module.cpp:181
bool hasStackProtectorGuardRecord() const
Definition Module.cpp:773
unsigned getMDKindID(StringRef Name) const
Return a unique non-zero ID for the specified metadata kind.
Definition Module.cpp:187
void setFramePointer(FramePointerKind Kind)
Definition Module.cpp:769
std::optional< uint64_t > getLargeDataThreshold() const
Returns the large data threshold.
Definition Module.cpp:685
StringRef getStackProtectorGuard() const
Get/set what kind of stack protector guard to use.
Definition Module.cpp:784
bool getRtLibUseGOT() const
Returns true if PLT should be avoided for RTLib calls.
Definition Module.cpp:732
void setModuleFlag(ModFlagBehavior Behavior, StringRef Key, Metadata *Val)
Like addModuleFlag but replaces the old module flag if it already exists.
Definition Module.cpp:412
UWTableKind getUwtable() const
Get/set whether synthesized functions should get the uwtable attribute.
Definition Module.cpp:753
void dropAllReferences()
This function causes all the subinstructions to "let go" of all references that they are maintaining.
Definition Module.cpp:583
void setStackProtectorGuard(StringRef Kind)
Definition Module.cpp:791
void setProfileSummary(Metadata *M, ProfileSummary::Kind Kind)
Attach profile summary metadata to this module.
Definition Module.cpp:702
void setUwtable(UWTableKind Kind)
Definition Module.cpp:759
unsigned getCodeViewFlag() const
Returns the CodeView Version by checking module flags.
Definition Module.cpp:617
void setPartialSampleProfileRatio(const ModuleSummaryIndex &Index)
Set the partial sample profile ratio in the profile summary module flag, if applicable.
Definition Module.cpp:923
Module & operator=(Module &&Other)
Move assignment.
Definition Module.cpp:79
std::string getUniqueIntrinsicName(StringRef BaseName, Intrinsic::ID Id, const FunctionType *Proto)
Return a unique name for an intrinsic whose mangling is based on an unnamed type.
Definition Module.cpp:526
~Module()
The module destructor. This will dropAllReferences.
Definition Module.cpp:118
FramePointerKind getFramePointer() const
Get/set whether synthesized functions should get the "frame-pointer" attribute.
Definition Module.cpp:763
unsigned getOverrideStackAlignment() const
Get/set the stack alignment overridden from the default.
Definition Module.cpp:843
void addModuleFlag(ModFlagBehavior Behavior, StringRef Key, Metadata *Val)
Add a module-level flag to the module-level flags metadata.
Definition Module.cpp:381
void setStackProtectorGuardReg(StringRef Reg)
Definition Module.cpp:803
PICLevel::Level getPICLevel() const
Returns the PIC level (small or large model)
Definition Module.cpp:637
std::unique_ptr< RandomNumberGenerator > createRNG(const StringRef Name) const
Get a RandomNumberGenerator salted for use with this module.
Definition Module.cpp:155
std::vector< StructType * > getIdentifiedStructTypes() const
Definition Module.cpp:512
void setDarwinTargetVariantTriple(StringRef T)
Set the target variant triple which is a string describing a variant of the target host platform.
Definition Module.cpp:949
void setPICLevel(PICLevel::Level PL)
Set the PIC level (small or large model)
Definition Module.cpp:647
unsigned getNumberRegisterParameters() const
Returns the Number of Register ParametersDwarf Version by checking module flags.
Definition Module.cpp:597
GlobalIFunc * getNamedIFunc(StringRef Name) const
Return the global ifunc in the module with the specified name, of arbitrary type.
Definition Module.cpp:294
StringRef getStackProtectorGuardReg() const
Get/set which register to use as the stack protector guard register.
Definition Module.cpp:796
unsigned getDwarfVersion() const
Returns the Dwarf Version by checking module flags.
Definition Module.cpp:605
void setDataLayout(StringRef Desc)
Set the data layout.
Definition Module.cpp:444
GlobalVariable * getGlobalVariable(StringRef Name) const
Look up the specified global variable in the module symbol table.
Definition Module.h:506
void setLargeDataThreshold(uint64_t Threshold)
Set the large data threshold.
Definition Module.cpp:695
bool isDwarf64() const
Returns the DWARF format by checking module flags.
Definition Module.cpp:612
static bool isValidModFlagBehavior(Metadata *MD, ModFlagBehavior &MFB)
Checks if Metadata represents a valid ModFlagBehavior, and stores the converted result in MFB.
Definition Module.cpp:329
void setStackProtectorGuardOffset(int Offset)
Definition Module.cpp:827
iterator_range< global_object_iterator > global_objects()
Definition Module.cpp:461
GlobalValue * getNamedValue(StringRef Name) const
Return the global value in the module with the specified name, of arbitrary type.
Definition Module.cpp:177
unsigned getInstructionCount() const
Returns the number of non-debug IR instructions in the module.
Definition Module.cpp:624
NamedMDNode * getOrInsertNamedMetadata(StringRef Name)
Return the named MDNode in the module with the specified name.
Definition Module.cpp:308
void getOperandBundleTags(SmallVectorImpl< StringRef > &Result) const
Populate client supplied SmallVector with the bundle tags registered in this LLVMContext.
Definition Module.cpp:198
void setStackProtectorGuardRecord(bool Flag)
Definition Module.cpp:779
Comdat * getOrInsertComdat(StringRef Name)
Return the Comdat in the module with the specified name.
Definition Module.cpp:631
FunctionCallee getOrInsertFunction(StringRef Name, FunctionType *T, AttributeList AttributeList)
Look up the specified function in the module symbol table.
Definition Module.cpp:211
std::optional< CodeModel::Model > getCodeModel() const
Returns the code model (tiny, small, kernel, medium or large model)
Definition Module.cpp:667
VersionTuple getDarwinTargetVariantSDKVersion() const
Get the target variant version build SDK version metadata.
Definition Module.cpp:954
void setStackProtectorGuardValueWidth(unsigned Width)
Definition Module.cpp:838
void setPIELevel(PIELevel::Level PL)
Set the PIE level (small or large model)
Definition Module.cpp:663
GlobalVariable * getOrInsertGlobal(StringRef Name, Type *Ty, function_ref< GlobalVariable *()> CreateGlobalCallback)
Look up the specified global in the module symbol table.
Definition Module.cpp:262
VersionTuple getSDKVersion() const
Get the build SDK version metadata.
Definition Module.cpp:904
GlobalAlias * getNamedAlias(StringRef Name) const
Return the global alias in the module with the specified name, of arbitrary type.
Definition Module.cpp:290
void setDarwinTargetVariantSDKVersion(VersionTuple Version)
Set the target variant version build SDK version metadata.
Definition Module.cpp:958
PIELevel::Level getPIELevel() const
Returns the PIE level (small or large model)
Definition Module.cpp:653
StringRef getDarwinTargetVariantTriple() const
Get the target variant triple which is a string describing a variant of the target host platform.
Definition Module.cpp:943
void setSDKVersion(const VersionTuple &V)
Attach a build SDK version metadata to this module.
Definition Module.cpp:875
iterator_range< global_value_iterator > global_values()
Definition Module.cpp:469
int getStackProtectorGuardOffset() const
Get/set what offset from the stack protector to use.
Definition Module.cpp:820
bool getDirectAccessExternalData() const
Get/set whether referencing global variables can use direct access relocations on ELF targets.
Definition Module.cpp:741
Metadata * getProfileSummary(bool IsCS) const
Returns profile summary metadata.
Definition Module.cpp:709
Metadata * getModuleFlag(StringRef Key) const
Return the corresponding value if Key appears in module flags, otherwise return null.
Definition Module.cpp:358
A tuple of MDNodes.
Definition Metadata.h:1753
LLVM_ABI void setOperand(unsigned I, MDNode *New)
LLVM_ABI StringRef getName() const
LLVM_ABI MDNode * getOperand(unsigned i) const
LLVM_ABI unsigned getNumOperands() const
iterator_range< op_iterator > operands()
Definition Metadata.h:1849
void setPartialProfileRatio(double R)
LLVM_ABI Metadata * getMD(LLVMContext &Context, bool AddPartialField=true, bool AddPartialProfileRatioField=true)
Return summary information as metadata.
uint32_t getNumCounts() const
bool isPartialProfile() const
static LLVM_ABI ProfileSummary * getFromMD(Metadata *MD)
Construct profile summary from metdata.
A random number generator.
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Definition SmallString.h:26
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition Twine.h:82
TypeFinder - Walk over a module, identifying all of the types that are used by the module.
Definition TypeFinder.h:31
iterator end()
Definition TypeFinder.h:52
LLVM_ABI void run(const Module &M, bool onlyNamed)
iterator begin()
Definition TypeFinder.h:51
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
Definition Type.cpp:310
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
Definition Type.cpp:309
void dropAllReferences()
Drop all references to operands.
Definition User.h:324
This class provides a symbol table of name/value pairs.
Represents a version number in the form major[.minor[.subminor[.build]]].
An efficient, type-erasing, non-owning reference to a callable.
A range adaptor for a pair of iterators.
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
LLVM_ABI Function * getDeclarationIfExists(const Module *M, ID id)
Look up the Function declaration of the intrinsic id in the Module M and return it if it exists.
Flag
These should be considered private to the implementation of the MCInstrDesc class.
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract_or_null(Y &&MD)
Extract a Value from Metadata, if any, allowing null.
Definition Metadata.h:709
std::enable_if_t< detail::IsValidPointer< X, Y >::value, bool > hasa(Y &&MD)
Check whether Metadata has a Value.
Definition Metadata.h:651
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract(Y &&MD)
Extract a Value from Metadata.
Definition Metadata.h:668
LLVM_ABI StringRef filename(StringRef path LLVM_LIFETIME_BOUND, Style style=Style::native)
Get filename.
Definition Path.cpp:594
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:578
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
auto cast_or_null(const Y &Val)
Definition Casting.h:714
Op::Description Desc
detail::concat_range< ValueT, RangeTs... > concat(RangeTs &&...Ranges)
Returns a concatenated range across two or more ranges.
Definition STLExtras.h:1151
ControlFlowGuardMode
Definition CodeGen.h:177
WinX64EHUnwindMode
Definition CodeGen.h:167
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
UWTableKind
Definition CodeGen.h:154
@ None
No unwind table requested.
Definition CodeGen.h:155
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
@ Other
Any other memory.
Definition ModRef.h:68
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count
Definition InstrProf.h:145
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
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:908
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:878
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
LLVM_ABI bool set(StringRef Name, std::string Value)
Set a property using a string name.
Definition Module.cpp:991
LLVM_ABI SmallVector< std::pair< StringRef, StringRef > > getAsStrings() const
Get a list of set properties as pairs of key and value.
Definition Module.cpp:1002