63 std::vector<const MDNode *> &) {
70 bool DoAutoReset,
StringRef Swift5ReflSegmentName)
71 : Swift5ReflectionSegmentName(Swift5ReflSegmentName), TT(TheTriple),
90 "Cannot initialize MC for non-Windows COFF object files.");
137 InlineSrcMgr.reset();
142 COFFAllocator.DestroyAll();
143 DXCAllocator.DestroyAll();
144 ELFAllocator.DestroyAll();
145 GOFFAllocator.DestroyAll();
146 MachOAllocator.DestroyAll();
147 WasmAllocator.DestroyAll();
148 XCOFFAllocator.DestroyAll();
149 MCInstAllocator.DestroyAll();
150 SPIRVAllocator.DestroyAll();
152 MCSubtargetAllocator.DestroyAll();
153 InlineAsmUsedLabelNames.
clear();
158 CompilationDir.
clear();
159 MainFileName.clear();
160 MCDwarfLineTablesCUMap.clear();
161 SectionsForRanges.clear();
162 MCGenDwarfLabelEntries.clear();
164 DwarfCompileUnitID = 0;
169 MachOUniquingMap.clear();
170 ELFUniquingMap.clear();
171 GOFFUniquingMap.clear();
172 COFFUniquingMap.clear();
173 WasmUniquingMap.clear();
174 XCOFFUniquingMap.clear();
175 DXCUniquingMap.clear();
177 ELFEntrySizeMap.clear();
178 ELFSeenGenericMergeableSections.clear();
181 AllowTemporaryLabels =
true;
182 DwarfLocSeen =
false;
183 GenDwarfForAssembly =
false;
184 GenDwarfFileNumber = 0;
194 return new (MCInstAllocator.Allocate())
MCInst;
205 assert(!NameRef.
empty() &&
"Normal symbols cannot be unnamed!");
209 Sym = createSymbol(NameRef,
false,
false);
222 "$parent_frame_offset");
232 static_assert(std::is_trivially_destructible<MCSymbolCOFF>(),
233 "MCSymbol classes must be trivially destructible");
234 static_assert(std::is_trivially_destructible<MCSymbolELF>(),
235 "MCSymbol classes must be trivially destructible");
236 static_assert(std::is_trivially_destructible<MCSymbolMachO>(),
237 "MCSymbol classes must be trivially destructible");
238 static_assert(std::is_trivially_destructible<MCSymbolWasm>(),
239 "MCSymbol classes must be trivially destructible");
240 static_assert(std::is_trivially_destructible<MCSymbolXCOFF>(),
241 "MCSymbol classes must be trivially destructible");
255 return createXCOFFSymbolImpl(
Name, IsTemporary);
259 return new (
Name, *
this)
262 return new (
Name, *
this)
268 if (CanBeUnnamed && !UseNamesOnTempLabels)
269 return createSymbolImpl(
nullptr,
true);
273 bool IsTemporary = CanBeUnnamed;
274 if (AllowTemporaryLabels && !IsTemporary)
278 bool AddSuffix = AlwaysAddSuffix;
279 unsigned &NextUniqueID = NextID[
Name];
285 auto NameEntry = UsedNames.insert(std::make_pair(NewName.
str(),
true));
286 if (NameEntry.second || !NameEntry.first->second) {
289 NameEntry.first->second =
true;
292 return createSymbolImpl(&*NameEntry.first, IsTemporary);
294 assert(IsTemporary &&
"Cannot rename non-temporary symbols");
303 return createSymbol(NameSV, AlwaysAddSuffix,
true);
309 return createSymbol(NameSV,
true,
false);
315 return createSymbol(NameSV,
true,
false);
324unsigned MCContext::NextInstance(
unsigned LocalLabelVal) {
325 MCLabel *&Label = Instances[LocalLabelVal];
327 Label =
new (*this)
MCLabel(0);
328 return Label->incInstance();
331unsigned MCContext::GetInstance(
unsigned LocalLabelVal) {
332 MCLabel *&Label = Instances[LocalLabelVal];
334 Label =
new (*this)
MCLabel(0);
335 return Label->getInstance();
338MCSymbol *MCContext::getOrCreateDirectionalLocalSymbol(
unsigned LocalLabelVal,
340 MCSymbol *&
Sym = LocalSymbols[std::make_pair(LocalLabelVal, Instance)];
347 unsigned Instance = NextInstance(LocalLabelVal);
348 return getOrCreateDirectionalLocalSymbol(LocalLabelVal, Instance);
353 unsigned Instance = GetInstance(LocalLabelVal);
356 return getOrCreateDirectionalLocalSymbol(LocalLabelVal, Instance);
362 return Symbols.
lookup(NameRef);
372 InlineAsmUsedLabelNames[
Sym->getName()] =
Sym;
379 return new (
nullptr, *
this)
MCSymbolXCOFF(
nullptr, IsTemporary);
397 const bool IsEntryPoint = !InvalidName.empty() && InvalidName[0] ==
'.';
399 StringRef(IsEntryPoint ?
"._Renamed.." :
"_Renamed..");
403 for (
size_t I = 0;
I < InvalidName.size(); ++
I) {
406 InvalidName[
I] =
'_';
413 ValidName.
append(InvalidName.substr(1, InvalidName.size() - 1));
415 ValidName.
append(InvalidName);
417 auto NameEntry = UsedNames.insert(std::make_pair(ValidName.
str(),
true));
418 assert((NameEntry.second || !NameEntry.first->second) &&
419 "This name is used somewhere else.");
421 NameEntry.first->second =
true;
435 unsigned TypeAndAttributes,
437 const char *BeginSymName) {
443 assert(Section.size() <= 16 &&
"section name is too long");
444 assert(!memchr(Section.data(),
'\0', Section.size()) &&
445 "section name cannot contain NUL");
448 auto R = MachOUniquingMap.try_emplace((Segment +
Twine(
',') + Section).str());
450 return R.first->second;
458 R.first->second =
new (MachOAllocator.Allocate())
460 TypeAndAttributes, Reserved2, Kind, Begin);
461 return R.first->second;
468 bool Comdat,
unsigned UniqueID,
474 if (
Sym &&
Sym->isDefined() &&
475 (!
Sym->isInSection() ||
Sym->getSection().getBeginSymbol() !=
Sym))
477 if (
Sym &&
Sym->isUndefined()) {
478 R = cast<MCSymbolELF>(
Sym);
480 auto NameIter = UsedNames.insert(std::make_pair(Section,
false)).first;
481 R =
new (&*NameIter, *
this)
MCSymbolELF(&*NameIter,
false);
488 auto *
Ret =
new (ELFAllocator.Allocate())
493 Ret->getFragmentList().insert(
Ret->begin(),
F);
506 std::tie(
I, Inserted) = RelSecNames.
insert(std::make_pair(
Name.str(),
true));
508 return createELFSectionImpl(
516 unsigned EntrySize) {
522 unsigned Flags,
unsigned EntrySize,
523 const Twine &Group,
bool IsComdat,
531 UniqueID, LinkedToSym);
535 unsigned Flags,
unsigned EntrySize,
537 bool IsComdat,
unsigned UniqueID,
544 auto IterBool = ELFUniquingMap.insert(std::make_pair(
545 ELFSectionKey{Section.str(), Group,
546 LinkedToSym ? LinkedToSym->
getName() :
"", UniqueID},
548 auto &Entry = *IterBool.first;
549 if (!IterBool.second)
552 StringRef CachedName = Entry.first.SectionName;
594 createELFSectionImpl(CachedName,
Type,
Flags, Kind, EntrySize, GroupSym,
595 IsComdat, UniqueID, LinkedToSym);
596 Entry.second = Result;
599 Result->getUniqueID(), Result->getEntrySize());
612 unsigned Flags,
unsigned UniqueID,
613 unsigned EntrySize) {
616 ELFSeenGenericMergeableSections.insert(
SectionName);
622 ELFEntrySizeMap.insert(std::make_pair(
634 ELFSeenGenericMergeableSections.count(
SectionName);
637std::optional<unsigned>
639 unsigned EntrySize) {
640 auto I = ELFEntrySizeMap.find(
642 return (
I != ELFEntrySizeMap.end()) ? std::optional<unsigned>(
I->second)
648 const MCExpr *SubsectionId) {
650 auto &GOFFSection = GOFFUniquingMap[Section.str()];
652 GOFFSection =
new (GOFFAllocator.Allocate())
663 const char *BeginSymName) {
665 if (!COMDATSymName.
empty()) {
667 COMDATSymName = COMDATSymbol->
getName();
671 COFFSectionKey
T{Section, COMDATSymName,
Selection, UniqueID};
672 auto IterBool = COFFUniquingMap.insert(std::make_pair(
T,
nullptr));
673 auto Iter = IterBool.first;
674 if (!IterBool.second)
681 StringRef CachedName = Iter->first.SectionName;
685 Iter->second = Result;
692 const char *BeginSymName) {
719 unsigned Flags,
const Twine &Group,
721 const char *BeginSymName) {
735 const char *BeginSymName) {
740 auto IterBool = WasmUniquingMap.insert(
741 std::make_pair(WasmSectionKey{Section.str(), Group, UniqueID},
nullptr));
742 auto &Entry = *IterBool.first;
743 if (!IterBool.second)
746 StringRef CachedName = Entry.first.SectionName;
748 MCSymbol *Begin = createSymbol(CachedName,
true,
false);
749 Symbols[Begin->
getName()] = Begin;
754 Entry.second = Result;
757 Result->getFragmentList().insert(Result->begin(),
F);
758 F->setParent(Result);
766 return XCOFFUniquingMap.count(
767 XCOFFSectionKey(Section.str(), CsectProp.
MappingClass)) != 0;
772 std::optional<XCOFF::CsectProperties> CsectProp,
bool MultiSymbolsAllowed,
773 const char *BeginSymName,
776 assert((IsDwarfSec != CsectProp.has_value()) &&
"Invalid XCOFF section!");
779 auto IterBool = XCOFFUniquingMap.insert(std::make_pair(
781 : XCOFFSectionKey(Section.str(), CsectProp->MappingClass),
783 auto &Entry = *IterBool.first;
784 if (!IterBool.second) {
793 StringRef CachedName = Entry.first.SectionName;
815 Result =
new (XCOFFAllocator.Allocate())
817 CsectProp->Type, Kind, QualName, Begin, CachedName,
818 MultiSymbolsAllowed);
820 Entry.second = Result;
823 Result->getFragmentList().insert(Result->begin(),
F);
824 F->setParent(Result);
846 Result->getFragmentList().insert(Result->begin(),
F);
847 F->setParent(Result);
855 auto ItInsertedPair = DXCUniquingMap.try_emplace(Section);
856 if (!ItInsertedPair.second)
857 return ItInsertedPair.first->second;
859 auto MapIt = ItInsertedPair.first;
869 MapIt->second->getFragmentList().insert(MapIt->second->begin(),
F);
870 F->setParent(MapIt->second);
872 return MapIt->second;
880 const std::string &To) {
891 const auto &DebugPrefixMap = this->DebugPrefixMap;
892 if (DebugPrefixMap.
empty())
900 for (
auto &CUIDTablePair : MCDwarfLineTablesCUMap) {
901 for (
auto &Dir : CUIDTablePair.second.getMCDwarfDirs()) {
904 Dir = std::string(
P);
909 P = CUIDTablePair.second.getRootFile().Name;
911 CUIDTablePair.second.getRootFile().Name = std::string(
P);
934 std::optional<MD5::MD5Result> Cksum;
952 if (FileNameBuf.
empty() || FileNameBuf ==
"-")
953 FileNameBuf =
"<stdin>";
974 std::optional<MD5::MD5Result> Checksum,
975 std::optional<StringRef> Source,
unsigned CUID) {
977 return Table.
tryGetFile(Directory, FileName, Checksum, Source, DwarfVersion,
996 SectionsForRanges.remove_if(
1011 assert(DiagHandler &&
"MCContext::DiagHandler is not set");
1012 bool UseInlineSrcMgr =
false;
1016 }
else if (InlineSrcMgr) {
1017 SMP = InlineSrcMgr.get();
1018 UseInlineSrcMgr =
true;
1021 DiagHandler(SMD, UseInlineSrcMgr, *SMP, LocInfos);
1024void MCContext::reportCommon(
1034 bool UseInlineSrcMgr =
false;
1043 }
else if (InlineSrcMgr) {
1044 SMP = InlineSrcMgr.get();
1045 UseInlineSrcMgr =
true;
1052 DiagHandler(
D, UseInlineSrcMgr, *SMP, LocInfos);
unsigned const MachineRegisterInfo * MRI
This file defines the StringMap class.
amdgpu AMDGPU DAG DAG Pattern Instruction Selection
BlockVerifier::State From
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
COFFYAML::WeakExternalCharacteristics Characteristics
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file defines DenseMapInfo traits for DenseMap.
static void defaultDiagHandler(const SMDiagnostic &SMD, bool, const SourceMgr &, std::vector< const MDNode * > &)
#define DWARF2_FLAG_IS_STMT
This file declares the MCSectionGOFF class, which contains all of the necessary machine code sections...
This file contains the MCSymbolGOFF class.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file defines the SmallString class.
This file defines the SmallVector class.
static void DiagHandler(const SMDiagnostic &Diag, void *Context)
void Reset()
Deallocate all but the current slab and reset the current pointer to the beginning of it,...
Holds state from .cv_file and .cv_loc directives for later emission.
Tagged union holding either a T or a Error.
This class is intended to be used as a base class for asm properties and features specific to the tar...
StringRef getPrivateGlobalPrefix() const
StringRef getLinkerPrivateGlobalPrefix() const
virtual bool isAcceptableChar(char C) const
Return true if C is an acceptable character inside a symbol name.
virtual bool isValidUnquotedName(StringRef Name) const
Return true if the identifier Name does not need quotes to be syntactically correct.
static const MCConstantExpr * create(int64_t Value, MCContext &Ctx, bool PrintInHex=false, unsigned SizeInBytes=0)
void remapDebugPath(SmallVectorImpl< char > &Path)
Remap one path in-place as per the debug prefix map.
MCSubtargetInfo & getSubtargetCopy(const MCSubtargetInfo &STI)
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.
Environment getObjectFileType() const
void setSymbolValue(MCStreamer &Streamer, const Twine &Sym, uint64_t Val)
Set value for a symbol.
const std::string & getMainFileName() const
Get the main file name for use in error messages and debug info.
void addDebugPrefixMapEntry(const std::string &From, const std::string &To)
Add an entry to the debug prefix map.
MCSymbol * createTempSymbol()
Create a temporary symbol with a unique name.
StringRef getCompilationDir() const
Get the compilation directory for DW_AT_comp_dir The compilation directory should be set with setComp...
MCInst * createMCInst()
Create and return a new MC instruction.
MCSymbol * getOrCreateFrameAllocSymbol(const Twine &FuncName, unsigned Idx)
Gets a symbol that will be defined to the final stack offset of a local variable after codegen.
MCSectionELF * createELFRelSection(const Twine &Name, unsigned Type, unsigned Flags, unsigned EntrySize, const MCSymbolELF *Group, const MCSectionELF *RelInfoSection)
MCSymbol * createLinkerPrivateTempSymbol()
Create and return a new linker temporary symbol with a unique but unspecified name.
MCSectionWasm * getWasmSection(const Twine &Section, SectionKind K, unsigned Flags=0)
void recordELFMergeableSectionInfo(StringRef SectionName, unsigned Flags, unsigned UniqueID, unsigned EntrySize)
Expected< unsigned > getDwarfFile(StringRef Directory, StringRef FileName, unsigned FileNumber, std::optional< MD5::MD5Result > Checksum, std::optional< StringRef > Source, unsigned CUID)
Creates an entry in the dwarf file and directory tables.
MCSectionELF * getELFNamedSection(const Twine &Prefix, const Twine &Suffix, unsigned Type, unsigned Flags, unsigned EntrySize=0)
Get a section with the provided group identifier.
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
void diagnose(const SMDiagnostic &SMD)
bool isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID=0)
isValidDwarfFileNumber - takes a dwarf file number and returns true if it currently is assigned and f...
void registerInlineAsmLabel(MCSymbol *Sym)
registerInlineAsmLabel - Records that the name is a label referenced in inline assembly.
MCDwarfLineTable & getMCDwarfLineTable(unsigned CUID)
void initInlineSourceManager()
MCSymbol * getOrCreateParentFrameOffsetSymbol(const Twine &FuncName)
MCSymbol * lookupSymbol(const Twine &Name) const
Get the symbol for Name, or null.
bool emitCompactUnwindNonCanonical() const
CodeViewContext & getCVContext()
void reset()
reset - return object to right after construction state to prepare to process a new module
bool isELFGenericMergeableSection(StringRef Name)
MCContext(const Triple &TheTriple, const MCAsmInfo *MAI, const MCRegisterInfo *MRI, const MCSubtargetInfo *MSTI, const SourceMgr *Mgr=nullptr, MCTargetOptions const *TargetOpts=nullptr, bool DoAutoReset=true, StringRef Swift5ReflSegmentName={})
MCSectionXCOFF * getXCOFFSection(StringRef Section, SectionKind K, std::optional< XCOFF::CsectProperties > CsectProp=std::nullopt, bool MultiSymbolsAllowed=false, const char *BeginSymName=nullptr, std::optional< XCOFF::DwarfSectionSubtypeFlags > DwarfSubtypeFlags=std::nullopt)
std::optional< unsigned > getELFUniqueIDForEntsize(StringRef SectionName, unsigned Flags, unsigned EntrySize)
Return the unique ID of the section with the given name, flags and entry size, if it exists.
MCSymbol * createDirectionalLocalSymbol(unsigned LocalLabelVal)
Create the definition of a directional local symbol for numbered label (used for "1:" definitions).
void reportWarning(SMLoc L, const Twine &Msg)
uint16_t getDwarfVersion() const
@ GenericSectionID
Pass this value as the UniqueID during section creation to get the generic section with the given nam...
void finalizeDwarfSections(MCStreamer &MCOS)
Remove empty sections from SectionsForRanges, to avoid generating useless debug info for them.
void reportError(SMLoc L, const Twine &Msg)
MCSectionCOFF * getCOFFSection(StringRef Section, unsigned Characteristics, SectionKind Kind, StringRef COMDATSymName, int Selection, unsigned UniqueID=GenericSectionID, const char *BeginSymName=nullptr)
MCSymbol * getOrCreateLSDASymbol(const Twine &FuncName)
MCSectionDXContainer * getDXContainerSection(StringRef Section, SectionKind K)
Get the section for the provided Section name.
bool hasXCOFFSection(StringRef Section, XCOFF::CsectProperties CsectProp) const
MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
MCSectionSPIRV * getSPIRVSection()
EmitDwarfUnwindType emitDwarfUnwindInfo() const
bool isELFImplicitMergeableSectionNamePrefix(StringRef Name)
MCSectionELF * createELFGroupSection(const MCSymbolELF *Group, bool IsComdat)
void setGenDwarfRootFile(StringRef FileName, StringRef Buffer)
Specifies information about the "root file" for assembler clients (e.g., llvm-mc).
MCSectionGOFF * getGOFFSection(StringRef Section, SectionKind Kind, MCSection *Parent, const MCExpr *SubsectionId)
MCSectionCOFF * getAssociativeCOFFSection(MCSectionCOFF *Sec, const MCSymbol *KeySym, unsigned UniqueID=GenericSectionID)
Gets or creates a section equivalent to Sec that is associated with the section containing KeySym.
void setMCLineTableRootFile(unsigned CUID, StringRef CompilationDir, StringRef Filename, std::optional< MD5::MD5Result > Checksum, std::optional< StringRef > Source)
Specifies the "root" file and directory of the compilation unit.
MCSymbol * getDirectionalLocalSymbol(unsigned LocalLabelVal, bool Before)
Create and return a directional local symbol for numbered label (used for "1b" or 1f" references).
MCSymbol * createNamedTempSymbol()
Create a temporary symbol with a unique name whose name cannot be omitted in the symbol table.
Fragment for data and encoded instructions.
Expected< unsigned > tryGetFile(StringRef &Directory, StringRef &FileName, std::optional< MD5::MD5Result > Checksum, std::optional< StringRef > Source, uint16_t DwarfVersion, unsigned FileNumber=0)
const SmallVectorImpl< MCDwarfFile > & getMCDwarfFiles() const
Instances of this class represent the information from a dwarf .loc directive.
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.
Instances of this class represent a label name in the MC file, and MCLabel are created and uniqued by...
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This represents a section on Windows.
unsigned getCharacteristics() const
This represents a section on linux, lots of unix variants and some bare metal systems.
This represents a section on a Mach-O system (used by Mac OS X).
This represents a section on wasm.
bool isMultiSymbolsAllowed() const
Instances of this class represent a uniqued identifier for a section in the current translation unit.
static constexpr unsigned NonUniqueID
SectionKind getKind() const
StringRef getName() const
MCSymbol * getBeginSymbol()
Streaming machine code generation interface.
virtual void emitAssignment(MCSymbol *Symbol, const MCExpr *Value)
Emit an assignment of Value to Symbol.
virtual bool mayHaveInstructions(MCSection &Sec) const
Generic base class for all target subtargets.
void setComdat(bool isComdat)
static StringRef getUnqualifiedName(StringRef Name)
void setSymbolTableName(StringRef STN)
StringRef getUnqualifiedName() const
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
StringRef getName() const
getName - Get the symbol name.
void setFragment(MCFragment *F) const
Mark the symbol as defined in the fragment F.
void update(ArrayRef< uint8_t > Data)
Updates the hash for the byte stream provided.
void final(MD5Result &Result)
Finishes off the hash and puts the result in result.
virtual StringRef getBufferIdentifier() const
Return an identifier for this buffer, typically the filename it was read from.
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a ca...
void print(const char *ProgName, raw_ostream &S, bool ShowColors=true, bool ShowKindLabel=true) const
Represents a location in source code.
SectionKind - This is a simple POD value that classifies the properties of a section.
static SectionKind getThreadData()
static SectionKind getMetadata()
static SectionKind getText()
static SectionKind getReadOnlyWithRel()
static SectionKind getData()
static SectionKind getBSS()
static SectionKind getThreadBSS()
static SectionKind getExecuteOnly()
static SectionKind getReadOnly()
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
void append(StringRef RHS)
Append from a StringRef.
StringRef str() const
Explicit conversion to StringRef.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling.
unsigned getMainFileID() const
const MemoryBuffer * getMemoryBuffer(unsigned i) const
unsigned getNumBuffers() const
SMDiagnostic GetMessage(SMLoc Loc, DiagKind Kind, const Twine &Msg, ArrayRef< SMRange > Ranges={}, ArrayRef< SMFixIt > FixIts={}) const
Return an SMDiagnostic at the specified location with the specified string.
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
ValueTy lookup(StringRef Key) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
bool insert(MapEntryTy *KeyValue)
insert - Insert the specified key/value pair into the map.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
StringRef drop_front(size_t N=1) const
Return a StringRef equal to 'this' but with the first N elements dropped.
char front() const
front - Get the first character in the string.
bool startswith(StringRef Prefix) const
bool consume_front(StringRef Prefix)
Returns true if this StringRef has the given prefix and removes that prefix.
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
StringSwitch & StartsWith(StringLiteral S, T Value)
Triple - Helper class for working with autoconf configuration names.
ObjectFormatType getObjectFormat() const
Get the object format for this triple.
bool isUEFI() const
Tests whether the OS is UEFI.
bool isOSWindows() const
Tests whether the OS is Windows.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
std::string str() const
Return the twine contents as a std::string.
bool isTriviallyEmpty() const
Check if this twine is trivially empty; a false return value does not necessarily mean the twine is e...
The instances of the Type class are immutable: once they are created, they are never changed.
raw_ostream & write_hex(unsigned long long N)
Output N in hexadecimal, without any prefix or padding.
A raw_ostream that writes to an SmallVector or SmallString.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ IMAGE_COMDAT_SELECT_ASSOCIATIVE
DwarfSectionSubtypeFlags
Values for defining the section subtype of sections of type STYP_DWARF as they would appear in the (s...
StringRef getMappingClassString(XCOFF::StorageMappingClass SMC)
void remove_filename(SmallVectorImpl< char > &path, Style style=Style::native)
Remove the last component from path unless it is the root dir.
bool replace_path_prefix(SmallVectorImpl< char > &Path, StringRef OldPrefix, StringRef NewPrefix, Style style=Style::native)
Replace matching path prefix with another path.
void append(SmallVectorImpl< char > &path, const Twine &a, const Twine &b="", const Twine &c="", const Twine &d="")
Append to path.
bool is_separator(char value, Style style=Style::native)
Check whether the given char is a path separator on the host OS.
@ WASM_SYMBOL_TYPE_SECTION
This is an optimization pass for GlobalISel generic memory operations.
auto reverse(ContainerTy &&C)
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
StorageMappingClass MappingClass