19 #ifndef LLVM_SUPPORT_TARGETREGISTRY_H
20 #define LLVM_SUPPORT_TARGETREGISTRY_H
39 class MCInstrAnalysis;
44 class MCSubtargetInfo;
46 class MCRelocationInfo;
47 class MCTargetAsmParser;
49 class MCTargetStreamer;
52 class formatted_raw_ostream;
55 MCTargetStreamer *TargetStreamer,
56 formatted_raw_ostream &OS,
bool isVerboseAsm,
57 bool useLoc,
bool useCFI,
58 bool useDwarfDirectory,
59 MCInstPrinter *InstPrint, MCCodeEmitter *CE,
60 MCAsmBackend *TAB,
bool ShowInst);
68 MCRelocationInfo *RelInfo);
116 unsigned SyntaxVariant,
138 bool useDwarfDirectory,
165 const char *ShortDesc;
240 : AsmStreamerCtorFn(0), MCRelocationInfoCtorFn(0),
241 MCSymbolizerCtorFn(0) {}
281 if (!MCAsmInfoCtorFn)
283 return MCAsmInfoCtorFn(MRI, Triple);
291 if (!MCCodeGenInfoCtorFn)
293 return MCCodeGenInfoCtorFn(Triple, RM, CM, OL);
299 if (!MCInstrInfoCtorFn)
301 return MCInstrInfoCtorFn();
307 if (!MCInstrAnalysisCtorFn)
309 return MCInstrAnalysisCtorFn(Info);
315 if (!MCRegInfoCtorFn)
317 return MCRegInfoCtorFn(Triple);
331 if (!MCSubtargetInfoCtorFn)
333 return MCSubtargetInfoCtorFn(Triple, CPU, Features);
348 if (!TargetMachineCtorFn)
350 return TargetMachineCtorFn(*
this, Triple, CPU, Features, Options,
359 if (!MCAsmBackendCtorFn)
361 return MCAsmBackendCtorFn(*
this, MRI, Triple, CPU);
371 if (!MCAsmParserCtorFn)
373 return MCAsmParserCtorFn(STI, Parser, MII);
379 if (!AsmPrinterCtorFn)
381 return AsmPrinterCtorFn(TM, Streamer);
385 if (!MCDisassemblerCtorFn)
387 return MCDisassemblerCtorFn(*
this, STI);
395 if (!MCInstPrinterCtorFn)
397 return MCInstPrinterCtorFn(*
this, SyntaxVariant, MAI, MII, MRI, STI);
406 if (!MCCodeEmitterCtorFn)
408 return MCCodeEmitterCtorFn(II, MRI, STI, Ctx);
425 bool NoExecStack)
const {
426 if (!MCObjectStreamerCtorFn)
428 return MCObjectStreamerCtorFn(*
this, TT, Ctx, TAB, _OS, _Emitter,
429 RelaxAll, NoExecStack);
438 bool useDwarfDirectory,
442 bool ShowInst)
const {
443 if (AsmStreamerCtorFn)
444 return AsmStreamerCtorFn(Ctx, OS, isVerboseAsm, useLoc, useCFI,
445 useDwarfDirectory, InstPrint, CE, TAB,
448 useDwarfDirectory, InstPrint, CE, TAB,
459 ? MCRelocationInfoCtorFn
480 return Fn(TT, GetOpInfo, SymbolLookUp, DisInfo, Ctx, RelInfo);
497 return Current == x.Current;
505 assert(Current &&
"Cannot increment end iterator!");
516 assert(Current &&
"Cannot dereference end iterator!");
532 static iterator
begin();
587 const char *ShortDesc,
589 bool HasJIT =
false);
601 T.MCAsmInfoCtorFn = Fn;
615 T.MCCodeGenInfoCtorFn = Fn;
628 T.MCInstrInfoCtorFn = Fn;
635 T.MCInstrAnalysisCtorFn = Fn;
648 T.MCRegInfoCtorFn = Fn;
662 T.MCSubtargetInfoCtorFn = Fn;
676 T.TargetMachineCtorFn = Fn;
689 T.MCAsmBackendCtorFn = Fn;
702 T.MCAsmParserCtorFn = Fn;
715 T.AsmPrinterCtorFn = Fn;
729 T.MCDisassemblerCtorFn = Fn;
743 T.MCInstPrinterCtorFn = Fn;
757 T.MCCodeEmitterCtorFn = Fn;
771 T.MCObjectStreamerCtorFn = Fn;
784 T.AsmStreamerCtorFn = Fn;
798 T.MCRelocationInfoCtorFn = Fn;
812 T.MCSymbolizerCtorFn = Fn;
840 if (
Triple(TT).getArch() == TargetArchType)
854 template<
class MCAsmInfoImpl>
861 return new MCAsmInfoImpl(TT);
888 template<
class MCCodeGenInfoImpl>
897 return new MCCodeGenInfoImpl();
923 template<
class MCInstrInfoImpl>
930 return new MCInstrInfoImpl();
956 template<
class MCInstrAnalysisImpl>
963 return new MCInstrAnalysisImpl(Info);
989 template<
class MCRegisterInfoImpl>
996 return new MCRegisterInfoImpl();
1022 template<
class MCSubtargetInfoImpl>
1030 return new MCSubtargetInfoImpl();
1056 template<
class TargetMachineImpl>
1069 return new TargetMachineImpl(T, TT, CPU, FS, Options, RM, CM, OL);
1080 template<
class MCAsmBackendImpl>
1090 return new MCAsmBackendImpl(T, MRI, Triple, CPU);
1102 template<
class MCAsmParserImpl>
1111 return new MCAsmParserImpl(STI, P, MII);
1123 template<
class AsmPr
interImpl>
1131 return new AsmPrinterImpl(TM, Streamer);
1143 template<
class MCCodeEmitterImpl>
1154 return new MCCodeEmitterImpl();
const Target * getNext() const
RegisterMCRegInfo(Target &T)
MCInstrInfo *(* MCInstrInfoCtorFnTy)(void)
const char * getName() const
getName - Get the target name.
RegisterTarget(Target &T, const char *Name, const char *Desc)
static unsigned getTripleMatchQuality(const std::string &TT)
MCStreamer *(* MCObjectStreamerCtorTy)(const Target &T, StringRef TT, MCContext &Ctx, MCAsmBackend &TAB, raw_ostream &_OS, MCCodeEmitter *_Emitter, bool RelaxAll, bool NoExecStack)
MCInstPrinter *(* MCInstPrinterCtorTy)(const Target &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI, const MCSubtargetInfo &STI)
static void RegisterMCInstrAnalysis(Target &T, Target::MCInstrAnalysisCtorFnTy Fn)
MCTargetAsmParser - Generic interface to target specific assembly parsers.
const char *(* LLVMSymbolLookupCallback)(void *DisInfo, uint64_t ReferenceValue, uint64_t *ReferenceType, uint64_t ReferencePC, const char **ReferenceName)
MCCodeGenInfo *(* MCCodeGenInfoCtorFnTy)(StringRef TT, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL)
RegisterMCAsmInfoFn(Target &T, Target::MCAsmInfoCtorFnTy Fn)
MCSymbolizer * createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp, void *DisInfo, MCContext *Ctx, MCRelocationInfo *RelInfo)
static void RegisterMCDisassembler(Target &T, Target::MCDisassemblerCtorTy Fn)
TargetRegistry - Generic interface to target specific features.
RegisterMCSubtargetInfoFn(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)
MCCodeEmitter * createMCCodeEmitter(const MCInstrInfo &II, const MCRegisterInfo &MRI, const MCSubtargetInfo &STI, MCContext &Ctx) const
createMCCodeEmitter - Create a target specific code emitter.
static const Target * lookupTarget(const std::string &Triple, std::string &Error)
static void RegisterMCInstPrinter(Target &T, Target::MCInstPrinterCtorTy Fn)
MCStreamer *(* AsmStreamerCtorTy)(MCContext &Ctx, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, bool useCFI, bool useDwarfDirectory, MCInstPrinter *InstPrint, MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst)
MCSymbolizer *(* MCSymbolizerCtorTy)(StringRef TT, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp, void *DisInfo, MCContext *Ctx, MCRelocationInfo *RelInfo)
bool hasTargetMachine() const
hasTargetMachine - Check if this target supports code generation.
const Target & operator*() const
MCInstrInfo * createMCInstrInfo() const
MCAsmInfo * createMCAsmInfo(const MCRegisterInfo &MRI, StringRef Triple) const
bool hasMCAsmBackend() const
hasMCAsmBackend - Check if this target supports .o generation.
MCTargetAsmParser *(* MCAsmParserCtorTy)(MCSubtargetInfo &STI, MCAsmParser &P, const MCInstrInfo &MII)
RegisterMCAsmParser(Target &T)
MCCodeGenInfo * createMCCodeGenInfo(StringRef Triple, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) const
RegisterMCCodeEmitter(Target &T)
RegisterAsmPrinter(Target &T)
MCInstPrinter * createMCInstPrinter(unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI, const MCSubtargetInfo &STI) const
MCDisassembler *(* MCDisassemblerCtorTy)(const Target &T, const MCSubtargetInfo &STI)
static void RegisterTargetMachine(Target &T, Target::TargetMachineCtorTy Fn)
static const Target * getClosestTargetForJIT(std::string &Error)
unsigned(* TripleMatchQualityFnTy)(const std::string &TT)
RegisterTargetMachine(Target &T)
static void RegisterTarget(Target &T, const char *Name, const char *ShortDesc, Target::TripleMatchQualityFnTy TQualityFn, bool HasJIT=false)
MCInstrAnalysis * createMCInstrAnalysis(const MCInstrInfo *Info) const
RegisterMCRegInfoFn(Target &T, Target::MCRegInfoCtorFnTy Fn)
bool hasJIT() const
hasJIT - Check if this targets supports the just-in-time compilation.
static void RegisterMCAsmBackend(Target &T, Target::MCAsmBackendCtorTy Fn)
MCInstrAnalysis *(* MCInstrAnalysisCtorFnTy)(const MCInstrInfo *Info)
static void printRegisteredTargetsForVersion()
RegisterMCInstrInfoFn(Target &T, Target::MCInstrInfoCtorFnTy Fn)
iterator(const iterator &I)
static void RegisterMCAsmParser(Target &T, Target::MCAsmParserCtorTy Fn)
Symbolize and annotate disassembled instructions.
MCAsmBackend * createMCAsmBackend(const MCRegisterInfo &MRI, StringRef Triple, StringRef CPU) const
static void RegisterMCObjectStreamer(Target &T, Target::MCObjectStreamerCtorTy Fn)
RegisterMCInstrAnalysisFn(Target &T, Target::MCInstrAnalysisCtorFnTy Fn)
const char * getShortDescription() const
getShortDescription - Get a short description of the target.
MCCodeEmitter - Generic instruction encoding interface.
static void RegisterAsmStreamer(Target &T, Target::AsmStreamerCtorTy Fn)
MCAsmInfo *(* MCAsmInfoCtorFnTy)(const MCRegisterInfo &MRI, StringRef TT)
Create MCExprs from relocations found in an object file.
static void RegisterMCCodeGenInfo(Target &T, Target::MCCodeGenInfoCtorFnTy Fn)
MCRelocationInfo * createMCRelocationInfo(StringRef TT, MCContext &Ctx) const
RegisterMCSubtargetInfo(Target &T)
static void RegisterMCAsmInfo(Target &T, Target::MCAsmInfoCtorFnTy Fn)
static void RegisterMCSubtargetInfo(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)
MCSubtargetInfo * createMCSubtargetInfo(StringRef Triple, StringRef CPU, StringRef Features) const
MCSubtargetInfo *(* MCSubtargetInfoCtorFnTy)(StringRef TT, StringRef CPU, StringRef Features)
MCRelocationInfo * createMCRelocationInfo(StringRef TT, MCContext &Ctx)
TargetMachine * createTargetMachine(StringRef Triple, StringRef CPU, StringRef Features, const TargetOptions &Options, Reloc::Model RM=Reloc::Default, CodeModel::Model CM=CodeModel::Default, CodeGenOpt::Level OL=CodeGenOpt::Default) const
AsmPrinter * createAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) const
RegisterMCInstrAnalysis(Target &T)
MCTargetAsmParser * createMCAsmParser(MCSubtargetInfo &STI, MCAsmParser &Parser, const MCInstrInfo &MII) const
static void RegisterMCCodeEmitter(Target &T, Target::MCCodeEmitterCtorTy Fn)
AsmPrinter *(* AsmPrinterCtorTy)(TargetMachine &TM, MCStreamer &Streamer)
MCStreamer * createAsmStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, bool useCFI, bool useDwarfDirectory, MCInstPrinter *InstPrint=0, MCCodeEmitter *CE=0, MCAsmBackend *TAB=0, bool ShowInst=false)
TargetMachine *(* TargetMachineCtorTy)(const Target &T, StringRef TT, StringRef CPU, StringRef Features, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL)
bool operator!=(const iterator &x) const
MCDisassembler * createMCDisassembler(const MCSubtargetInfo &STI) const
const Target * operator->() const
bool operator==(const iterator &x) const
static void RegisterMCRegInfo(Target &T, Target::MCRegInfoCtorFnTy Fn)
MCStreamer * createMCObjectStreamer(StringRef TT, MCContext &Ctx, MCAsmBackend &TAB, raw_ostream &_OS, MCCodeEmitter *_Emitter, bool RelaxAll, bool NoExecStack) const
RegisterMCAsmBackend(Target &T)
RegisterMCAsmInfo(Target &T)
MCRegisterInfo *(* MCRegInfoCtorFnTy)(StringRef TT)
MCSymbolizer * createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp, void *DisInfo, MCContext *Ctx, MCRelocationInfo *RelInfo) const
MCRelocationInfo *(* MCRelocationInfoCtorTy)(StringRef TT, MCContext &Ctx)
MCRegisterInfo * createMCRegInfo(StringRef Triple) const
static void RegisterMCInstrInfo(Target &T, Target::MCInstrInfoCtorFnTy Fn)
RegisterMCInstrInfo(Target &T)
RegisterMCCodeGenInfo(Target &T)
static void RegisterMCSymbolizer(Target &T, Target::MCSymbolizerCtorTy Fn)
MCAsmBackend - Generic interface to target specific assembler backends.
cl::opt< bool > RelaxAll("mc-relax-all", cl::desc("When used with filetype=obj, ""relax all fixups in the emitted object file"))
MCStreamer * createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS, bool isVerboseAsm, bool useLoc, bool useCFI, bool useDwarfDirectory, MCInstPrinter *InstPrint, MCCodeEmitter *CE, MCAsmBackend *TAB, bool ShowInst) const
createAsmStreamer - Create a target specific MCStreamer.
static void RegisterMCRelocationInfo(Target &T, Target::MCRelocationInfoCtorTy Fn)
static void RegisterAsmPrinter(Target &T, Target::AsmPrinterCtorTy Fn)
const MCRegisterInfo & MRI
int(* LLVMOpInfoCallback)(void *DisInfo, uint64_t PC, uint64_t Offset, uint64_t Size, int TagType, void *TagBuf)
MCAsmBackend *(* MCAsmBackendCtorTy)(const Target &T, const MCRegisterInfo &MRI, StringRef TT, StringRef CPU)
MCCodeEmitter *(* MCCodeEmitterCtorTy)(const MCInstrInfo &II, const MCRegisterInfo &MRI, const MCSubtargetInfo &STI, MCContext &Ctx)
RegisterMCCodeGenInfoFn(Target &T, Target::MCCodeGenInfoCtorFnTy Fn)