58 std::unique_ptr<MCStreamer> Streamer)
62 return &PSIW->getPSI();
68 return &SDPIW->getStaticDataProfileInfo();
85 SMShadowTracker.startFunction(
MF);
86 CodeEmitter.reset(
TM.getTarget().createMCCodeEmitter(
87 *Subtarget->getInstrInfo(),
MF.getContext()));
89 const Module *M =
MF.getFunction().getParent();
90 EmitFPOData = Subtarget->isTargetWin32() && M->getCodeViewFlag();
92 IndCSPrefix = M->getModuleFlag(
"indirect_branch_cs_prefix");
96 if (Subtarget->isTargetCOFF()) {
97 bool Local =
MF.getFunction().hasLocalLinkage();
157 int64_t PrefixBytes =
MF.getFunction().getFnAttributeAsParsedInteger(
158 "patchable-function-prefix");
173 if (!
F.getParent()->getModuleFlag(
"kcfi"))
177 if (
const MDNode *MD =
F.getMetadata(LLVMContext::MD_kcfi_type))
183 EmitKCFITypePadding(
MF,
false);
193 if (
MAI.hasDotTypeDotSizeDirective())
199 EmitKCFITypePadding(
MF);
200 unsigned DestReg = X86::EAX;
202 if (
F.getParent()->getModuleFlag(
"kcfi-arity")) {
204 [[maybe_unused]]
const auto &
Triple =
MF.getTarget().getTargetTriple();
215 const unsigned ArityToRegMap[8] = {X86::EAX, X86::ECX, X86::EDX, X86::EBX,
216 X86::ESP, X86::EBP, X86::ESI, X86::EDI};
222 for (
const auto &LI :
MF.getRegInfo().liveins()) {
231 DestReg = ArityToRegMap[Arity];
236 .addImm(MaskKCFIType(
Type->getZExtValue())));
238 if (
MAI.hasDotTypeDotSizeDirective()) {
289 if (GVSym->
getName()[0] !=
'$')
313 MF->getPICBaseSymbol()->print(O,
MAI);
319 MF->getPICBaseSymbol()->print(O,
MAI);
338 MF->getPICBaseSymbol()->print(O,
MAI);
344void X86AsmPrinter::PrintOperand(
const MachineInstr *
MI,
unsigned OpNo,
346 const MachineOperand &MO =
MI->getOperand(OpNo);
365 switch (
MI->getInlineAsmDialect()) {
373 PrintSymbolOperand(MO, O);
387void X86AsmPrinter::PrintModifiedOperand(
const MachineInstr *
MI,
unsigned OpNo,
389 const MachineOperand &MO =
MI->getOperand(OpNo);
391 return PrintOperand(
MI, OpNo, O);
396 unsigned Size = (Modifier ==
"64") ? 64
397 : (Modifier ==
"32") ? 32
398 : (Modifier ==
"16") ? 16
408void X86AsmPrinter::PrintPCRelImm(
const MachineInstr *
MI,
unsigned OpNo,
410 const MachineOperand &MO =
MI->getOperand(OpNo);
415 PrintOperand(
MI, OpNo, O);
421 PrintSymbolOperand(MO, O);
426void X86AsmPrinter::PrintLeaMemReference(
const MachineInstr *
MI,
unsigned OpNo,
433 bool HasBaseReg =
BaseReg.getReg() != 0;
434 if (HasBaseReg && Modifier ==
"no-rip" &&
BaseReg.getReg() == X86::RIP)
438 if ((DispSpec.
isGlobal() || DispSpec.
isSymbol()) && Modifier ==
"disp-only")
442 bool HasParenPart = IndexReg.
getReg() || HasBaseReg;
448 int DispVal = DispSpec.
getImm();
449 if (DispVal || !HasParenPart)
455 PrintSymbolOperand(DispSpec, O);
464 "X86 doesn't allow scaling by ESP");
475 O <<
',' << ScaleVal;
483 return MI.getDesc().isReturn() && !
MI.getDesc().isCall();
487 unsigned Opc =
MI.getOpcode();
488 return MI.getDesc().isIndirectBranch() ||
489 Opc == X86::TAILJMPr ||
Opc == X86::TAILJMPm ||
490 Opc == X86::TAILJMPr64 ||
Opc == X86::TAILJMPm64 ||
491 Opc == X86::TCRETURNri ||
Opc == X86::TCRETURN_WIN64ri ||
492 Opc == X86::TCRETURN_HIPE32ri ||
Opc == X86::TCRETURNmi ||
493 Opc == X86::TCRETURN_WINmi64 ||
Opc == X86::TCRETURNri64 ||
494 Opc == X86::TCRETURNmi64 ||
Opc == X86::TCRETURNri64_ImpCall ||
495 Opc == X86::TAILJMPr64_REX ||
Opc == X86::TAILJMPm64_REX;
499 if (Subtarget->hardenSlsRet() || Subtarget->hardenSlsIJmp()) {
500 auto I =
MBB.getLastNonDebugInstr();
501 if (
I !=
MBB.end()) {
510 if (SplitChainedAtEndOfBlock) {
515 SplitChainedAtEndOfBlock =
false;
521void X86AsmPrinter::PrintMemReference(
const MachineInstr *
MI,
unsigned OpNo,
529 PrintLeaMemReference(
MI, OpNo, O, Modifier);
542 bool HasBaseReg =
BaseReg.getReg() != 0;
543 if (HasBaseReg && Modifier ==
"no-rip" &&
BaseReg.getReg() == X86::RIP)
547 if ((DispSpec.
isGlobal() || DispSpec.
isSymbol()) && Modifier ==
"disp-only") {
559 bool NeedPlus =
false;
566 if (NeedPlus)
O <<
" + ";
568 O << ScaleVal <<
'*';
573 if (!DispSpec.
isImm()) {
574 if (NeedPlus)
O <<
" + ";
577 PrintSymbolOperand(DispSpec, O);
579 int64_t DispVal = DispSpec.
getImm();
580 if (DispVal || (!IndexReg.
getReg() && !HasBaseReg)) {
606 MCInstBuilder(X86::JMP32m)
616void X86AsmPrinter::emitMachOIFuncStubHelperBody(
Module &M,
639 {X86::RAX, X86::RDI, X86::RSI, X86::RDX, X86::RCX, X86::R8, X86::R9})
640 OutStreamer->emitInstruction(MCInstBuilder(X86::PUSH64r).addReg(
Reg),
644 MCInstBuilder(X86::CALL64pcrel32)
649 MCInstBuilder(X86::MOV64mr)
660 {X86::R9, X86::R8, X86::RCX, X86::RDX, X86::RSI, X86::RDI, X86::RAX})
661 OutStreamer->emitInstruction(MCInstBuilder(X86::POP64r).addReg(
Reg),
665 MCInstBuilder(X86::JMP32m)
687 default:
return true;
726 Index =
Reg - X86::XMM0;
728 Index =
Reg - X86::YMM0;
730 Index =
Reg - X86::ZMM0;
738 Reg = X86::XMM0 + Index;
741 Reg = X86::YMM0 + Index;
744 Reg = X86::ZMM0 + Index;
760 if (ExtraCode && ExtraCode[0]) {
761 if (ExtraCode[1] != 0)
return true;
766 switch (ExtraCode[0]) {
782 PrintSymbolOperand(MO, O);
783 if (Subtarget->is64Bit())
787 O << (IsIntel ?
'[' :
'(');
788 PrintOperand(
MI, OpNo, O);
789 O << (IsIntel ?
']' :
')');
796 PrintOperand(
MI, OpNo, O);
806 PrintSymbolOperand(MO, O);
815 PrintOperand(
MI, OpNo, O);
828 PrintOperand(
MI, OpNo, O);
836 PrintOperand(
MI, OpNo, O);
843 PrintSymbolOperand(MO, O);
848 PrintPCRelImm(
MI, OpNo, O);
862 PrintOperand(
MI, OpNo, O);
867 const char *ExtraCode,
869 if (ExtraCode && ExtraCode[0]) {
870 if (ExtraCode[1] != 0)
return true;
872 switch (ExtraCode[0]) {
873 default:
return true;
892 PrintMemReference(
MI, OpNo, O,
"H");
900 PrintIntelMemReference(
MI, OpNo, O,
"disp-only");
902 PrintMemReference(
MI, OpNo, O,
"disp-only");
913 PrintIntelMemReference(
MI, OpNo, O);
915 PrintMemReference(
MI, OpNo, O);
921 const Triple &TT =
TM.getTargetTriple();
923 if (TT.isOSBinFormatELF()) {
925 unsigned FeatureFlagsAnd = 0;
926 if (M.getModuleFlag(
"cf-protection-branch"))
928 if (M.getModuleFlag(
"cf-protection-return"))
931 if (FeatureFlagsAnd) {
933 assert((TT.isX86_32() || TT.isX86_64()) &&
934 "CFProtection used on invalid architecture!");
941 const int WordSize = TT.isX86_64() && !TT.isX32() ? 8 : 4;
958 if (TT.isOSBinFormatMachO())
961 if (TT.isOSBinFormatCOFF()) {
965 if (M.getModuleFlag(
"import-call-optimization"))
966 EnableImportCallOptimization =
true;
974 const bool IntelSyntax =
976 OutStreamer->emitSyntaxDirective(IntelSyntax ?
"intel" :
"att",
977 IntelSyntax ?
"noprefix" :
"");
982 if (M.getModuleInlineAsm().empty() && is16) {
1022 if (!Stubs.empty()) {
1027 for (
auto &Stub : Stubs)
1044 if (!TT.isWindowsMSVCEnvironment())
1049 if (
I.getType()->isFloatingPointTy())
1052 for (
const auto &
Op :
I.operands()) {
1053 if (
Op->getType()->isFloatingPointTy())
1063 const Triple &TT =
TM.getTargetTriple();
1065 if (TT.isOSBinFormatMachO()) {
1071 FM.serializeToFaultMapSection();
1079 }
else if (TT.isOSBinFormatCOFF()) {
1082 if (EnableImportCallOptimization) {
1086 constexpr char ImpCallMagic[12] =
"RetpolineV1";
1096 for (
auto &[Section, CallsToImportedFuncs] :
1097 SectionToImportedFunctionCalls) {
1098 unsigned SectionSize =
1099 sizeof(
uint32_t) * (2 + 2 * CallsToImportedFuncs.size());
1101 OutStreamer->emitCOFFSecNumber(Section->getBeginSymbol());
1102 for (
auto &[CallsiteSymbol, Kind] : CallsToImportedFuncs) {
1124 (TT.getArch() ==
Triple::x86) ?
"__fltused" :
"_fltused";
1125 MCSymbol *S =
MMI->getContext().getOrCreateSymbol(SymbolName);
1129 }
else if (TT.isOSBinFormatELF()) {
1130 FM.serializeToFaultMapSection();
1139 nullptr, Alignment,
nullptr);
1143 unsigned PtrSize =
MAI.getCodePointerSize();
1160extern
"C" LLVM_C_ABI void LLVMInitializeX86AsmPrinter() {
1177 .getStaticDataProfileInfo();
1192 .getCachedResult<ProfileSummaryAnalysis>(M);
1196 .getCachedResult<StaticDataProfileInfoAnalysis>(
1198 ->getStaticDataProfileInfo();
1214 .getStaticDataProfileInfo();
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static MCDisassembler::DecodeStatus addOperand(MCInst &Inst, const MCOperand &Opnd)
static void emitNonLazySymbolPointer(MCStreamer &OutStreamer, MCSymbol *StubLabel, MachineModuleInfoImpl::StubValueTy &MCSym)
Expand Atomic instructions
static const Function * getParent(const Value *V)
Module.h This file contains the declarations for the Module class.
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
Promote Memory to Register
ModuleAnalysisManager MAM
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
static cl::opt< RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Development, "development", "for training")))
static bool contains(SmallPtrSetImpl< ConstantExpr * > &Cache, ConstantExpr *Expr, Constant *C)
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")
#define LLVM_C_ABI
LLVM_C_ABI is the export/visibility macro used to mark symbols declared in llvm-c as exported when bu...
static bool printAsmMRegister(const X86AsmPrinter &P, const MachineOperand &MO, char Mode, raw_ostream &O)
static bool isSimpleReturn(const MachineInstr &MI)
static bool usesMSVCFloatingPoint(const Triple &TT, const Module &M)
True if this module is being built for windows/msvc, and uses floating point.
static bool isIndirectBranchOrTailCall(const MachineInstr &MI)
static bool printAsmVRegister(const MachineOperand &MO, char Mode, raw_ostream &O)
static void emitNonLazyStubs(MachineModuleInfo *MMI, MCStreamer &OutStreamer)
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
This class is intended to be used as a driving class for all asm writers.
const TargetLoweringObjectFile & getObjFileLowering() const
Return information about object file lowering.
MCSymbol * getSymbolWithGlobalValueBase(const GlobalValue *GV, StringRef Suffix) const
Return the MCSymbol for a private symbol with global value name as its base, with the specified suffi...
MCSymbol * getSymbol(const GlobalValue *GV) const
void emitNops(unsigned N)
Emit N NOP instructions.
void EmitToStreamer(MCStreamer &S, const MCInst &Inst)
TargetMachine & TM
Target machine description.
void emitXRayTable()
Emit a table with all XRay instrumentation points.
virtual void emitBasicBlockEnd(const MachineBasicBlock &MBB)
Targets can override this to emit stuff at the end of a basic block.
Align emitAlignment(Align Alignment, const GlobalObject *GV=nullptr, unsigned MaxBytesToEmit=0) const
Emit an alignment directive to the specified power of two boundary.
virtual MCSymbol * GetCPISymbol(unsigned CPID) const
Return the symbol for the specified constant pool entry.
MachineFunction * MF
The current machine function.
virtual const MCExpr * lowerConstant(const Constant *CV, const Constant *BaseCV=nullptr, uint64_t Offset=0)
Lower the specified LLVM Constant to an MCExpr.
virtual void SetupMachineFunction(MachineFunction &MF)
This should be called when a new MachineFunction is being processed from runOnMachineFunction.
void emitFunctionBody()
This method emits the body and trailer for a function.
bool doInitialization(Module &M) override
Set up the AsmPrinter when we are working on a new module.
virtual void emitLinkage(const GlobalValue *GV, MCSymbol *GVSym) const
This emits linkage information about GVSym based on GV, if this is supported by the target.
AsmPrinter(TargetMachine &TM, std::unique_ptr< MCStreamer > Streamer, char &ID=AsmPrinter::ID)
void printOffset(int64_t Offset, raw_ostream &OS) const
This is just convenient handler for printing offsets.
MCSymbol * getSymbolPreferLocal(const GlobalValue &GV) const
Similar to getSymbol() but preferred for references.
MCSymbol * CurrentFnSym
The symbol for the current function.
MachineModuleInfo * MMI
This is a pointer to the current MachineModuleInfo.
MCContext & OutContext
This is the context for the output file that we are streaming.
const StaticDataProfileInfo * SDPI
Provides the profile information for constants.
bool doFinalization(Module &M) override
Shut down the asmprinter.
virtual const MCSubtargetInfo * getIFuncMCSubtargetInfo() const
getSubtargetInfo() cannot be used where this is needed because we don't have a MachineFunction when w...
bool runOnMachineFunction(MachineFunction &MF) override
Emit the specified function out to the OutStreamer.
std::unique_ptr< MCStreamer > OutStreamer
This is the MCStreamer object for the file we are generating.
const ProfileSummaryInfo * PSI
The profile summary information.
const MCAsmInfo & MAI
Target Asm Printer information.
MCSymbol * GetBlockAddressSymbol(const BlockAddress *BA) const
Return the MCSymbol used to satisfy BlockAddress uses of the specified basic block.
const DataLayout & getDataLayout() const
Return information about data layout.
void emitCOFFFeatureSymbol(Module &M)
Emits the @feat.00 symbol indicating the features enabled in this module.
MCSymbol * GetExternalSymbolSymbol(const Twine &Sym) const
Return the MCSymbol for the specified ExternalSymbol.
const MCSubtargetInfo & getSubtargetInfo() const
Return information about subtarget.
void emitCOFFReplaceableFunctionData(Module &M)
Emits symbols and data to allow functions marked with the loader-replaceable attribute to be replacea...
virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS)
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant.
This is the shared class of boolean and integer constants.
const Constant * getResolver() const
Module * getParent()
Get the module that this global value is contained inside of...
bool hasInternalLinkage() const
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
LLVM_ABI MCSectionMachO * getMachOSection(StringRef Segment, StringRef Section, unsigned TypeAndAttributes, unsigned Reserved2, SectionKind K, const char *BeginSymName=nullptr)
Return the MCSection for the specified mach-o section.
LLVM_ABI MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
Base class for the full range of assembler expressions which are needed for parsing.
Instances of this class represent a single low-level machine instruction.
void setOpcode(unsigned Op)
static MCOperand createExpr(const MCExpr *Val)
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Streaming machine code generation interface.
virtual void addBlankLine()
Emit a blank line to a .s file to pretty it up.
virtual bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute)=0
Add the given Attribute to Symbol.
MCContext & getContext() const
void emitValue(const MCExpr *Value, unsigned Size, SMLoc Loc=SMLoc())
virtual void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
virtual void emitIntValue(uint64_t Value, unsigned Size)
Special case of EmitValue that avoids the client having to pass in a MCExpr for constant integers.
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
Generic base class for all target subtargets.
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx, SMLoc Loc=SMLoc())
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
LLVM_ABI void print(raw_ostream &OS, const MCAsmInfo *MAI) const
print - Print the value to the stream OS.
StringRef getName() const
getName - Get the symbol name.
Function & getFunction()
Return the LLVM function that this machine code represents.
Representation of each machine instruction.
LLVM_ABI InlineAsm::AsmDialect getInlineAsmDialect() const
std::vector< std::pair< MCSymbol *, StubValueTy > > SymbolListTy
PointerIntPair< MCSymbol *, 1, bool > StubValueTy
MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation for MachO targets.
SymbolListTy GetGVStubList()
Accessor methods to return the set of stubs in sorted order.
This class contains meta information specific to a module.
const MCContext & getContext() const
Ty & getObjFileInfo()
Keep track of various per-module pieces of information for backends that would like to do so.
MachineOperand class - Representation of each machine instruction operand.
const GlobalValue * getGlobal() const
bool isReg() const
isReg - Tests if this is a MO_Register operand.
bool isImm() const
isImm - Tests if this is a MO_Immediate operand.
bool isSymbol() const
isSymbol - Tests if this is a MO_ExternalSymbol operand.
const BlockAddress * getBlockAddress() const
MachineInstr * getParent()
getParent - Return the instruction that this operand belongs to.
unsigned getTargetFlags() const
bool isGlobal() const
isGlobal - Tests if this is a MO_GlobalAddress operand.
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
Register getReg() const
getReg - Returns the register number.
@ MO_Immediate
Immediate operand.
@ MO_ConstantPoolIndex
Address of indexed Constant in Constant Pool.
@ MO_GlobalAddress
Address of a global value.
@ MO_BlockAddress
Address of a basic block.
@ MO_Register
Register operand.
@ MO_ExternalSymbol
Name of external global symbol.
@ MO_JumpTableIndex
Address of indexed Jump Table for switch.
int64_t getOffset() const
Return the offset from the symbol in this operand.
A Module instance is used to store all the information related to an LLVM module.
AnalysisType * getAnalysisIfAvailable() const
getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to get analysis information tha...
PointerTy getPointer() const
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
An analysis pass based on the new PM to deliver ProfileSummaryInfo.
Analysis providing profile information.
Wrapper class representing virtual and physical registers.
static SectionKind getMetadata()
static SectionKind getReadOnly()
A class that holds the constants that represent static data and their profile information and provide...
Represent a constant reference to a string, i.e.
constexpr bool empty() const
Check if the string is empty.
bool consume_front(char Prefix)
Returns true if this StringRef has the given prefix and removes that prefix.
virtual MCSection * getSectionForConstant(const DataLayout &DL, SectionKind Kind, const Constant *C, Align &Alignment, const Function *F) const
Given a constant with the SectionKind, return a section that it should be placed in.
Primary interface to the complete machine description for the target machine.
Triple - Helper class for working with autoconf configuration names.
bool isX86_64() const
Tests whether the target is x86 (64-bit).
bool isOSWindows() const
Tests whether the OS is Windows.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
static const char * getRegisterName(MCRegister Reg)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
bool runOnMachineFunction(MachineFunction &MF) override
runOnMachineFunction - Emit the function body.
void emitKCFITypeId(const MachineFunction &MF) override
emitKCFITypeId - Emit the KCFI type information in architecture specific format.
void emitStartOfAsmFile(Module &M) override
This virtual method can be overridden by targets that want to emit something at the start of their fi...
void emitEndOfAsmFile(Module &M) override
This virtual method can be overridden by targets that want to emit something at the end of their file...
std::function< ProfileSummaryInfo *(Module &)> GetPSI
void emitFunctionBodyEnd() override
Targets can override this to emit stuff after the last basic block in the function.
bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &O) override
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...
void emitBasicBlockEnd(const MachineBasicBlock &MBB) override
Targets can override this to emit stuff at the end of a basic block.
X86AsmPrinter(TargetMachine &TM, std::unique_ptr< MCStreamer > Streamer)
std::function< const StaticDataProfileInfo *(Module &)> GetSDPI
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &O) override
PrintAsmOperand - Print out an operand for an inline asm expression.
void emitFunctionBodyStart() override
Targets can override this to emit stuff before the first basic block in the function.
X86MachineFunctionInfo - This class is derived from MachineFunction and contains private X86 target-s...
unsigned getArgumentStackSize() const
X86 target streamer implementing x86-only assembly directives.
virtual bool emitFPOProc(const MCSymbol *ProcSym, unsigned ParamsSize, SMLoc L={})
virtual void emitCode16()
virtual bool emitFPOEndProc(SMLoc L={})
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ IMAGE_SYM_CLASS_EXTERNAL
External symbol.
@ IMAGE_SYM_CLASS_STATIC
Static.
@ IMAGE_SYM_DTYPE_FUNCTION
A function that returns a base type.
@ SCT_COMPLEX_TYPE_SHIFT
Type is formed as (base + (derived << SCT_COMPLEX_TYPE_SHIFT))
@ GNU_PROPERTY_X86_FEATURE_1_AND
@ GNU_PROPERTY_X86_FEATURE_1_SHSTK
@ GNU_PROPERTY_X86_FEATURE_1_IBT
@ S_NON_LAZY_SYMBOL_POINTERS
S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers.
@ MO_TLSLD
MO_TLSLD - On a symbol operand this indicates that the immediate is the offset of the GOT entry with ...
@ MO_GOTPCREL_NORELAX
MO_GOTPCREL_NORELAX - Same as MO_GOTPCREL except that R_X86_64_GOTPCREL relocations are guaranteed to...
@ MO_GOTOFF
MO_GOTOFF - On a symbol operand this indicates that the immediate is the offset to the location of th...
@ MO_DARWIN_NONLAZY_PIC_BASE
MO_DARWIN_NONLAZY_PIC_BASE - On a symbol operand "FOO", this indicates that the reference is actually...
@ MO_GOT_ABSOLUTE_ADDRESS
MO_GOT_ABSOLUTE_ADDRESS - On a symbol operand, this represents a relocation of: SYMBOL_LABEL + [.
@ MO_COFFSTUB
MO_COFFSTUB - On a symbol operand "FOO", this indicates that the reference is actually to the "....
@ MO_NTPOFF
MO_NTPOFF - On a symbol operand this indicates that the immediate is the negative thread-pointer offs...
@ MO_DARWIN_NONLAZY
MO_DARWIN_NONLAZY - On a symbol operand "FOO", this indicates that the reference is actually to the "...
@ MO_INDNTPOFF
MO_INDNTPOFF - On a symbol operand this indicates that the immediate is the absolute address of the G...
@ MO_GOTNTPOFF
MO_GOTNTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry w...
@ MO_TPOFF
MO_TPOFF - On a symbol operand this indicates that the immediate is the thread-pointer offset for the...
@ MO_TLVP_PIC_BASE
MO_TLVP_PIC_BASE - On a symbol operand this indicates that the immediate is some TLS offset from the ...
@ MO_GOT
MO_GOT - On a symbol operand this indicates that the immediate is the offset to the GOT entry for the...
@ MO_PLT
MO_PLT - On a symbol operand this indicates that the immediate is offset to the PLT entry of symbol n...
@ MO_TLSGD
MO_TLSGD - On a symbol operand this indicates that the immediate is the offset of the GOT entry with ...
@ MO_NO_FLAG
MO_NO_FLAG - No flag for the operand.
@ MO_TLVP
MO_TLVP - On a symbol operand this indicates that the immediate is some TLS offset.
@ MO_DLLIMPORT
MO_DLLIMPORT - On a symbol operand "FOO", this indicates that the reference is actually to the "__imp...
@ MO_GOTTPOFF
MO_GOTTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry wi...
@ MO_SECREL
MO_SECREL - On a symbol operand this indicates that the immediate is the offset from beginning of sec...
@ MO_DTPOFF
MO_DTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry with...
@ MO_PIC_BASE_OFFSET
MO_PIC_BASE_OFFSET - On a symbol operand this indicates that the immediate should get the value of th...
@ MO_TLSLDM
MO_TLSLDM - On a symbol operand this indicates that the immediate is the offset of the GOT entry with...
@ MO_GOTPCREL
MO_GOTPCREL - On a symbol operand this indicates that the immediate is offset to the GOT entry for th...
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract(Y &&MD)
Extract a Value from Metadata.
BaseReg
Stack frame base register. Bit 0 of FREInfo.Info.
This is an optimization pass for GlobalISel generic memory operations.
OuterAnalysisManagerProxy< ModuleAnalysisManager, MachineFunction > ModuleAnalysisManagerMachineFunctionProxy
Provide the ModuleAnalysisManager to Function proxy.
static bool isMem(const MachineInstr &MI, unsigned Op)
MCRegister getX86SubSuperRegister(MCRegister Reg, unsigned Size, bool High=false)
Target & getTheX86_32Target()
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Value
LLVM_ABI void setupModuleAsmPrinter(Module &M, ModuleAnalysisManager &MAM, AsmPrinter &AsmPrinter)
uint64_t offsetToAlignment(uint64_t Value, Align Alignment)
Returns the offset to the next integer (mod 2**64) that is greater than or equal to Value and is a mu...
DWARFExpression::Operation Op
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
LLVM_ABI void setupMachineFunctionAsmPrinter(MachineFunctionAnalysisManager &MFAM, MachineFunction &MF, AsmPrinter &AsmPrinter)
Target & getTheX86_64Target()
@ MCSA_IndirectSymbol
.indirect_symbol (MachO)
@ MCSA_Global
.type _foo, @gnu_unique_object
@ MCSA_ELF_TypeFunction
.type _foo, STT_FUNC # aka @function
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Implement std::hash so that hash_code can be used in STL containers.
This struct is a compact representation of a valid (non-zero power of two) alignment.
RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...