48 while (!
Users.empty()) {
50 for (
const Use &U : FnOrCast->
uses()) {
51 const User *FnUser = U.getUser();
52 if (isa<BlockAddress>(FnUser))
54 if (
const auto *Call = dyn_cast<CallBase>(FnUser)) {
55 if (!Call->isCallee(&U))
57 }
else if (isa<Instruction>(FnUser)) {
62 }
else if (
const auto *
C = dyn_cast<Constant>(FnUser)) {
68 if (
C->stripPointerCasts() ==
F)
69 Users.push_back(FnUser);
79 if (
Sym->getName().starts_with(
"__imp_"))
86 std::vector<const MCSymbol *> GFIDsEntries;
87 std::vector<const MCSymbol *> GIATsEntries;
92 if (
F.hasDLLImportStorageClass()) {
94 GIATsEntries.push_back(impSym);
106 if (GFIDsEntries.empty() && GIATsEntries.empty() && LongjmpTargets.empty())
112 for (
const MCSymbol *S : GFIDsEntries)
113 OS.emitCOFFSymbolIndex(S);
117 for (
const MCSymbol *S : GIATsEntries) {
118 OS.emitCOFFSymbolIndex(S);
123 for (
const MCSymbol *S : LongjmpTargets) {
124 OS.emitCOFFSymbolIndex(S);
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
Module.h This file contains the declarations for the Module class.
iv Induction Variable Users
static bool isPossibleIndirectCallTarget(const Function *F)
Returns true if this function's address is escaped in a way that might make it an indirect call targe...
This class is intended to be used as a driving class for all asm writers.
MCSymbol * getSymbol(const GlobalValue *GV) const
MachineModuleInfo * MMI
This is a pointer to the current MachineModuleInfo.
MCContext & OutContext
This is the context for the output file that we are streaming.
std::unique_ptr< MCStreamer > OutStreamer
This is the MCStreamer object for the file we are generating.
const MCObjectFileInfo * getObjectFileInfo() const
MCSymbol * lookupSymbol(const Twine &Name) const
Get the symbol for Name, or null.
MCSection * getGFIDsSection() const
MCSection * getGLJMPSection() const
MCSection * getGIATsSection() const
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
const std::vector< MCSymbol * > & getLongjmpTargets() const
Returns a reference to a list of symbols immediately following calls to _setjmp in the function.
const Module * getModule() const
A Module instance is used to store all the information related to an LLVM module.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
A Use represents the edge between a Value definition and its users.
LLVM Value Representation.
iterator_range< use_iterator > uses()
WinCFGuard(AsmPrinter *A)
void endModule() override
Emit the Control Flow Guard function ID table.
void endFunction(const MachineFunction *MF) override
Gather post-function debug information.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.