65 if (!
getContext().getAsmInfo().hasLEB128Directives())
76 for (
const auto *Operand :
C->operand_values()) {
109 uint64_t NumElts = CDS->getNumElements();
110 assert(NumElts != 0 &&
"Can't have an empty CDS");
112 if (CDS->getElementAsInteger(NumElts-1) != 0)
116 for (
uint64_t i = 0; i != NumElts - 1; ++i)
117 if (CDS->getElementAsInteger(i) == 0)
135 TM.getNameWithPrefix(NameStr, GV, *Mang);
143 return TM.getSymbol(GV);
154 M.getModuleFlagsMetadata(ModuleFlags);
156 MDNode *CGProfile =
nullptr;
158 for (
const auto &MFE : ModuleFlags) {
160 if (
Key ==
"CG Profile") {
174 if (
F->hasDLLImportStorageClass())
176 return TM->getSymbol(
F);
179 for (
const auto &Edge : CGProfile->
operands()) {
181 const MCSymbol *From = GetSym(E->getOperand(0));
182 const MCSymbol *To = GetSym(E->getOperand(1));
198 std::function<
void(
MCStreamer &Streamer)> COMDATSymEmitter)
const {
210 for (
const auto *Operand : FuncInfo->
operands()) {
215 auto *S =
C.getObjectFileInfo()->getPseudoProbeDescSection(
216 TM->getFunctionSections() ? Name->getString() :
StringRef(),
217 Hash->getZExtValue());
222 if (COMDATSymEmitter)
223 COMDATSymEmitter(Streamer);
225 Streamer.
emitInt64(GUID->getZExtValue());
226 Streamer.
emitInt64(Hash->getZExtValue());
239 for (
const Value *
Op :
C->operands())
253 "Can only be used for global definitions");
267 if (GVar->isThreadLocal()) {
271 if (GVar->hasLocalLinkage()) {
280 if (GVar->hasCommonLinkage())
286 if (GVar->hasLocalLinkage())
288 else if (GVar->hasExternalLinkage())
296 if (GVar->hasSection()) {
297 if (
MDNode *MD = GVar->getMetadata(LLVMContext::MD_exclude))
298 if (!MD->getNumOperands())
300 if (
MDNode *MD = GVar->getMetadata(LLVMContext::MD_metadata_section_kind))
301 if (!MD->getNumOperands())
307 if (GVar->isConstant()) {
311 const Constant *
C = GVar->getInitializer();
312 if (!
C->needsRelocation()) {
316 if (!GVar->hasGlobalUnnamedAddr())
324 if ((ITy->getBitWidth() == 8 || ITy->getBitWidth() == 16 ||
325 ITy->getBitWidth() == 32) &&
327 if (ITy->getBitWidth() == 8)
329 if (ITy->getBitWidth() == 16)
332 assert(ITy->getBitWidth() == 32 &&
"Unknown width");
342 GVar->getDataLayout().getTypeAllocSize(
C->getType())) {
364 !
C->needsDynamicRelocation())
387 if (Attrs.hasAttribute(
"bss-section") && Kind.isBSS())
388 return Attrs.getAttribute(
"bss-section").getValueAsString();
389 else if (Attrs.hasAttribute(
"rodata-section") && Kind.isReadOnly())
390 return Attrs.getAttribute(
"rodata-section").getValueAsString();
391 else if (Attrs.hasAttribute(
"relro-section") && Kind.isReadOnlyWithRel())
392 return Attrs.getAttribute(
"relro-section").getValueAsString();
393 else if (Attrs.hasAttribute(
"data-section") && Kind.isData())
394 return Attrs.getAttribute(
"data-section").getValueAsString();
410 auto Attrs = GVar->getAttributes();
411 if ((Attrs.hasAttribute(
"bss-section") && Kind.isBSS()) ||
412 (Attrs.hasAttribute(
"data-section") && Kind.isData()) ||
413 (Attrs.hasAttribute(
"relro-section") && Kind.isReadOnlyWithRel()) ||
414 (Attrs.hasAttribute(
"rodata-section") && Kind.isReadOnly())) {
442 nullptr, Alignment, &
F);
446 bool UsesLabelDifference,
const Function &
F)
const {
450 if (UsesLabelDifference)
457 return F.isWeakForLinker();
476 if (SectionPrefix.
empty())
479 "TargetLoweringObjectFile::getSectionForConstant that "
480 "accepts SectionPrefix is not implemented for the object file format");
509 switch (Encoding & 0x70) {
535 Mang->getNameWithPrefix(OutName, GV,
false);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
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")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file contains constants used for implementing Dwarf debug support.
Module.h This file contains the declarations for the Module class.
static bool isNullOrUndef(const Constant *C)
static bool IsNullTerminatedString(const Constant *C)
IsNullTerminatedString - Return true if the specified constant (which is known to have a type that is...
static bool isSuitableForBSS(const GlobalVariable *GV)
static bool containsConstantPtrAuth(const Constant *C)
Class to represent array types.
ConstantDataSequential - A vector or array constant whose element type is a simple 1/2/4/8-byte integ...
This is an important base class in LLVM.
A parsed version of the target data layout string in and methods for querying it.
StringRef getInternalSymbolPrefix() const
StringRef getSection() const
Get the custom section of this global if it has one.
bool hasSection() const
Check if this global has a custom object file section.
bool isDeclarationForLinker() const
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this global belongs to.
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
AttributeSet getAttributes() const
Return the attribute set for this global.
bool hasImplicitSection() const
Check if section name is present.
bool isConstant() const
If the value is a global constant, its value is immutable throughout the runtime execution of the pro...
Class to represent integer types.
static const MCBinaryExpr * createSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Context object for machine code objects.
LLVM_ABI MCSymbol * createTempSymbol()
Create a temporary symbol with a unique name.
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.
void initMCObjectFileInfo(MCContext &MCCtx, bool PIC, bool LargeCodeModel=false)
MCSection * ReadOnlySection
Section that is readonly and can contain arbitrary initialized data.
MCContext & getContext() const
MCSection * DataSection
Section directive for standard data.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Streaming machine code generation interface.
virtual void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc())
Emit a label for Symbol into the current section.
virtual void emitCGProfileEntry(const MCSymbolRefExpr *From, const MCSymbolRefExpr *To, uint64_t Count)
unsigned emitULEB128IntValue(uint64_t Value, unsigned PadTo=0)
Special case of EmitULEB128Value that avoids the client having to pass in a MCExpr for constant integ...
void emitInt64(uint64_t Value)
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
virtual void emitBytes(StringRef Data)
Emit the bytes in Data into the output.
Represent a reference to a symbol from inside an expression.
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 ...
ArrayRef< MDOperand > operands() const
Tracking metadata reference owned by Metadata.
This class contains meta information specific to a module.
A Module instance is used to store all the information related to an LLVM module.
iterator_range< op_iterator > operands()
SectionKind - This is a simple POD value that classifies the properties of a section.
static SectionKind getThreadData()
static SectionKind getBSSExtern()
static SectionKind getMetadata()
static SectionKind getMergeable2ByteCString()
static SectionKind getExclude()
static SectionKind getBSSLocal()
static SectionKind getMergeableConst4()
static SectionKind getCommon()
static SectionKind getText()
static SectionKind getThreadBSSLocal()
static SectionKind getReadOnlyWithRel()
static SectionKind getData()
static SectionKind getMergeableConst8()
static SectionKind getBSS()
static SectionKind getThreadBSS()
static SectionKind getMergeableConst16()
static SectionKind getMergeable4ByteCString()
static SectionKind getMergeable1ByteCString()
static SectionKind getReadOnly()
static SectionKind getMergeableConst32()
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
void append(StringRef RHS)
Append from a StringRef.
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.
Represent a constant reference to a string, i.e.
constexpr bool empty() const
Check if the string is empty.
void emitCGProfileMetadata(MCStreamer &Streamer, Module &M) const
Emit Call Graph Profile metadata.
virtual void getNameWithPrefix(SmallVectorImpl< char > &OutName, const GlobalValue *GV, const TargetMachine &TM) const
unsigned PersonalityEncoding
PersonalityEncoding, LSDAEncoding, TTypeEncoding - Some encoding values for EH.
unsigned getCallSiteEncoding() const
static SectionKind getKindForGlobal(const GlobalObject *GO, const TargetMachine &TM)
Classify the specified global variable into a set of target independent categories embodied in Sectio...
virtual MCSection * getSectionForJumpTable(const Function &F, const TargetMachine &TM) const
virtual bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference, const Function &F) const
virtual MCSymbol * getCFIPersonalitySymbol(const GlobalValue *GV, const TargetMachine &TM, MachineModuleInfo *MMI) const
virtual void Initialize(MCContext &ctx, const TargetMachine &TM)
This method must be called before any actual lowering is done.
virtual MCSection * SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const =0
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.
static StringRef getCustomSectionName(const GlobalObject *GO, const TargetMachine &TM)
Return the section name specified by 'pragma clang section' or the section attribute.
MCSymbol * getSymbolWithGlobalValueBase(const GlobalValue *GV, StringRef Suffix, const TargetMachine &TM) const
Return the MCSymbol for a private symbol with global value name as its base, with the specified suffi...
virtual MCSection * getSectionForMachineBasicBlock(const Function &F, const MachineBasicBlock &MBB, const TargetMachine &TM) const
virtual const MCExpr * getDebugThreadLocalSymbol(const MCSymbol *Sym) const
Create a symbol reference to describe the given TLS variable when emitting the address in debug info.
virtual const MCExpr * getTTypeGlobalReference(const GlobalValue *GV, unsigned Encoding, const TargetMachine &TM, MachineModuleInfo *MMI, MCStreamer &Streamer) const
Return an MCExpr to use for a reference to the specified global variable from exception handling info...
~TargetLoweringObjectFile() override
unsigned CallSiteEncoding
virtual MCSection * getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const =0
Targets should implement this method to assign a section to globals with an explicit section specfied...
void emitPseudoProbeDescMetadata(MCStreamer &Streamer, Module &M, std::function< void(MCStreamer &Streamer)> COMDATSymEmitter=nullptr) const
Emit pseudo_probe_desc metadata.
const MCExpr * getTTypeReference(const MCSymbolRefExpr *Sym, unsigned Encoding, MCStreamer &Streamer) const
virtual void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM, const MCSymbol *Sym, const MachineModuleInfo *MMI) const
virtual MCSection * getUniqueSectionForFunction(const Function &F, const TargetMachine &TM) const
MCSection * SectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const
This method computes the appropriate section to emit the specified global variable or function defini...
Primary interface to the complete machine description for the target machine.
LLVM Value Representation.
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > extract(Y &&MD)
Extract a Value from Metadata.
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
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...
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
@ Ref
The access may reference the value stored in memory.
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
constexpr const char * PseudoProbeDescMetadataName
This struct is a compact representation of a valid (non-zero power of two) alignment.
MachineJumpTableEntry - One jump table in the jump table info.