27 std::unique_ptr<MCObjectWriter> OW, std::unique_ptr<MCCodeEmitter>
Emitter,
30 switch (
T.getObjectFormat()) {
34 assert((
T.isOSWindows() ||
T.isUEFI()) &&
35 "only Windows and UEFI COFF are supported");
36 S = COFFStreamerCtorFn(Ctx, std::move(TAB), std::move(OW),
40 if (MachOStreamerCtorFn)
41 S = MachOStreamerCtorFn(Ctx, std::move(TAB), std::move(OW),
48 if (ELFStreamerCtorFn)
49 S = ELFStreamerCtorFn(
T, Ctx, std::move(TAB), std::move(OW),
64 S = XCOFFStreamerCtorFn(
T, Ctx, std::move(TAB), std::move(OW),
76 if (ObjectTargetStreamerCtorFn)
77 ObjectTargetStreamerCtorFn(*S, STI);
83 std::unique_ptr<MCObjectWriter> &&OW,
91 std::unique_ptr<formatted_raw_ostream>
OS,
93 std::unique_ptr<MCCodeEmitter> CE,
94 std::unique_ptr<MCAsmBackend> TAB)
const {
97 std::move(CE), std::move(TAB));
103 std::unique_ptr<formatted_raw_ostream>
OS,
104 bool IsVerboseAsm,
bool UseDwarfDirectory,
106 std::unique_ptr<MCCodeEmitter> &&CE,
107 std::unique_ptr<MCAsmBackend> &&TAB,
108 bool ShowInst)
const {
119 std::string &
Error) {
123 const Target *TheTarget =
nullptr;
124 if (!ArchName.
empty()) {
126 [&](
const Target &
T) {
return ArchName ==
T.getName(); });
129 Error = (
"invalid target '" + ArchName +
"'.\n").str();
142 std::string TempError;
146 "', see --version and --triple.";
157 Error =
"Unable to find target for this triple (no targets are registered)";
161 auto ArchMatch = [&](
const Target &
T) {
return T.ArchMatchFn(Arch); };
165 Error = (
"No available targets are compatible with triple \"" + TT +
"\"")
170 auto J = std::find_if(std::next(
I),
targets().end(), ArchMatch);
172 Error = std::string(
"Cannot choose between targets \"") +
I->Name +
173 "\" and \"" + J->Name +
"\"";
181 const char *ShortDesc,
182 const char *BackendName,
186 "Missing required target information!");
198 T.ShortDesc = ShortDesc;
199 T.BackendName = BackendName;
200 T.ArchMatchFn = ArchMatchFn;
205 const std::pair<StringRef, const Target *> *RHS) {
206 return LHS->first.compare(
RHS->first);
210 std::vector<std::pair<StringRef, const Target*> > Targets;
213 Targets.push_back(std::make_pair(
T.getName(), &
T));
214 Width = std::max(Width, Targets.back().first.size());
219 OS <<
" Registered Targets:\n";
220 for (
const auto &
Target : Targets) {
dxil DXContainer Global Emitter
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
static Target * FirstTarget
static int TargetArraySortFn(const std::pair< StringRef, const Target * > *LHS, const std::pair< StringRef, const Target * > *RHS)
Lightweight error class with error context and mandatory checking.
Context object for machine code objects.
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Streaming machine code generation interface.
Generic base class for all target subtargets.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
Target - Wrapper for Target specific information.
MCTargetStreamer * createAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint) const
MCStreamer * createMCObjectStreamer(const Triple &T, MCContext &Ctx, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter, const MCSubtargetInfo &STI) const
Create a target specific MCStreamer.
bool(*)(Triple::ArchType Arch) ArchMatchFnTy
const char * getShortDescription() const
getShortDescription - Get a short description of the target.
MCStreamer * createAsmStreamer(MCContext &Ctx, std::unique_ptr< formatted_raw_ostream > OS, MCInstPrinter *IP, std::unique_ptr< MCCodeEmitter > CE, std::unique_ptr< MCAsmBackend > TAB) const
Triple - Helper class for working with autoconf configuration names.
static ArchType getArchTypeForLLVMName(StringRef Str)
The canonical type for the given LLVM architecture name (e.g., "x86").
ArchType getArch() const
Get the parsed architecture type of this triple.
const std::string & getTriple() const
void setArch(ArchType Kind, SubArchType SubArch=NoSubArch)
Set the architecture (first) component of the triple to a known type.
The instances of the Type class are immutable: once they are created, they are never changed.
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
MCStreamer * createAsmStreamer(MCContext &Ctx, std::unique_ptr< formatted_raw_ostream > OS, MCInstPrinter *InstPrint, std::unique_ptr< MCCodeEmitter > &&CE, std::unique_ptr< MCAsmBackend > &&TAB)
Create a machine code streamer which will print out assembly for the native target,...
MCStreamer * createELFStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE)
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
MCStreamer * createMachOStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE, bool DWARFMustBeAtTheEnd, bool LabelSections=false)
MCStreamer * createDXContainerStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE)
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
MCStreamer * createWasmStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE)
MCStreamer * createGOFFStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE)
void array_pod_sort(IteratorTy Start, IteratorTy End)
array_pod_sort - This sorts an array with the specified start and end extent.
MCStreamer * createSPIRVStreamer(MCContext &Ctx, std::unique_ptr< MCAsmBackend > &&TAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&CE)
static const Target * lookupTarget(StringRef Triple, std::string &Error)
lookupTarget - Lookup a target based on a target triple.
static void printRegisteredTargetsForVersion(raw_ostream &OS)
printRegisteredTargetsForVersion - Print the registered targets appropriately for inclusion in a tool...
static void RegisterTarget(Target &T, const char *Name, const char *ShortDesc, const char *BackendName, Target::ArchMatchFnTy ArchMatchFn, bool HasJIT=false)
RegisterTarget - Register the given target.
static iterator_range< iterator > targets()