Go to the documentation of this file.
47 while (!
Users.empty()) {
49 for (
const Use &U : FnOrCast->
uses()) {
50 const User *FnUser = U.getUser();
51 if (isa<BlockAddress>(FnUser))
53 if (
const auto *Call = dyn_cast<CallBase>(FnUser)) {
54 if (!Call->isCallee(&U))
56 }
else if (isa<Instruction>(FnUser)) {
61 }
else if (
const auto *
C = dyn_cast<Constant>(FnUser)) {
67 if (
C->stripPointerCasts() ==
F)
68 Users.push_back(FnUser);
85 std::vector<const MCSymbol *> GFIDsEntries;
86 std::vector<const MCSymbol *> GIATsEntries;
91 if (
F.hasDLLImportStorageClass()) {
93 GIATsEntries.push_back(impSym);
105 if (GFIDsEntries.empty() && GIATsEntries.empty() && LongjmpTargets.empty())
112 OS.EmitCOFFSymbolIndex(
S);
117 OS.EmitCOFFSymbolIndex(
S);
122 for (
const MCSymbol *
S : LongjmpTargets) {
123 OS.EmitCOFFSymbolIndex(
S);
const MCObjectFileInfo * getObjectFileInfo() const
LLVM_NODISCARD bool startswith(StringRef Prefix) const
Check if this string starts with the given Prefix.
This is an optimization pass for GlobalISel generic memory operations.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
WinCFGuard(AsmPrinter *A)
MCSymbol * lookupSymbol(const Twine &Name) const
Get the symbol for Name, or null.
MCSection * getGFIDsSection() const
void endFunction(const MachineFunction *MF) override
Gather post-function debug information.
MCSection * getGLJMPSection() const
std::unique_ptr< MCStreamer > OutStreamer
This is the MCStreamer object for the file we are generating.
(vector float) vec_cmpeq(*A, *B) C
iterator_range< use_iterator > uses()
StringRef getName() const
getName - Get the symbol name.
MCSection * getGIATsSection() const
MCSymbol * getSymbol(const GlobalValue *GV) const
MCContext & OutContext
This is the context for the output file that we are streaming.
A Module instance is used to store all the information related to an LLVM module.
void append_range(Container &C, Range &&R)
Wrapper function to append a range to a container.
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
MachineModuleInfo * MMI
This is a pointer to the current MachineModuleInfo.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
void endModule() override
Emit the Control Flow Guard function ID table.
This class is intended to be used as a driving class for all asm writers.
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...
const Module * getModule() const
LLVM Value Representation.
A Use represents the edge between a Value definition and its users.
const std::vector< MCSymbol * > & getLongjmpTargets() const
Returns a reference to a list of symbols immediately following calls to _setjmp in the function.