LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TargetRegistry.h
Go to the documentation of this file.
1 //===-- Support/TargetRegistry.h - Target Registration ----------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file exposes the TargetRegistry interface, which tools can use to access
11 // the appropriate target specific classes (TargetMachine, AsmPrinter, etc.)
12 // which have been registered.
13 //
14 // Target specific class implementations should register themselves using the
15 // appropriate TargetRegistry interfaces.
16 //
17 //===----------------------------------------------------------------------===//
18 
19 #ifndef LLVM_SUPPORT_TARGETREGISTRY_H
20 #define LLVM_SUPPORT_TARGETREGISTRY_H
21 
22 #include "llvm/ADT/Triple.h"
23 #include "llvm/Support/CodeGen.h"
24 #include "llvm-c/Disassembler.h"
25 #include <cassert>
26 #include <string>
27 
28 namespace llvm {
29  class AsmPrinter;
30  class Module;
31  class MCAssembler;
32  class MCAsmBackend;
33  class MCAsmInfo;
34  class MCAsmParser;
35  class MCCodeEmitter;
36  class MCCodeGenInfo;
37  class MCContext;
38  class MCDisassembler;
39  class MCInstrAnalysis;
40  class MCInstPrinter;
41  class MCInstrInfo;
42  class MCRegisterInfo;
43  class MCStreamer;
44  class MCSubtargetInfo;
45  class MCSymbolizer;
46  class MCRelocationInfo;
47  class MCTargetAsmParser;
48  class TargetMachine;
49  class MCTargetStreamer;
50  class TargetOptions;
51  class raw_ostream;
52  class formatted_raw_ostream;
53 
54  MCStreamer *createAsmStreamer(MCContext &Ctx,
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);
61 
62  MCRelocationInfo *createMCRelocationInfo(StringRef TT, MCContext &Ctx);
63 
64  MCSymbolizer *createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo,
65  LLVMSymbolLookupCallback SymbolLookUp,
66  void *DisInfo,
67  MCContext *Ctx,
68  MCRelocationInfo *RelInfo);
69 
70  /// Target - Wrapper for Target specific information.
71  ///
72  /// For registration purposes, this is a POD type so that targets can be
73  /// registered without the use of static constructors.
74  ///
75  /// Targets should implement a single global instance of this class (which
76  /// will be zero initialized), and pass that instance to the TargetRegistry as
77  /// part of their initialization.
78  class Target {
79  public:
80  friend struct TargetRegistry;
81 
82  typedef unsigned (*TripleMatchQualityFnTy)(const std::string &TT);
83 
84  typedef MCAsmInfo *(*MCAsmInfoCtorFnTy)(const MCRegisterInfo &MRI,
85  StringRef TT);
86  typedef MCCodeGenInfo *(*MCCodeGenInfoCtorFnTy)(StringRef TT,
90  typedef MCInstrInfo *(*MCInstrInfoCtorFnTy)(void);
91  typedef MCInstrAnalysis *(*MCInstrAnalysisCtorFnTy)(const MCInstrInfo*Info);
92  typedef MCRegisterInfo *(*MCRegInfoCtorFnTy)(StringRef TT);
93  typedef MCSubtargetInfo *(*MCSubtargetInfoCtorFnTy)(StringRef TT,
94  StringRef CPU,
95  StringRef Features);
96  typedef TargetMachine *(*TargetMachineCtorTy)(const Target &T,
97  StringRef TT,
98  StringRef CPU,
99  StringRef Features,
100  const TargetOptions &Options,
102  CodeModel::Model CM,
103  CodeGenOpt::Level OL);
104  typedef AsmPrinter *(*AsmPrinterCtorTy)(TargetMachine &TM,
105  MCStreamer &Streamer);
106  typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T,
107  const MCRegisterInfo &MRI,
108  StringRef TT,
109  StringRef CPU);
110  typedef MCTargetAsmParser *(*MCAsmParserCtorTy)(MCSubtargetInfo &STI,
111  MCAsmParser &P,
112  const MCInstrInfo &MII);
113  typedef MCDisassembler *(*MCDisassemblerCtorTy)(const Target &T,
114  const MCSubtargetInfo &STI);
115  typedef MCInstPrinter *(*MCInstPrinterCtorTy)(const Target &T,
116  unsigned SyntaxVariant,
117  const MCAsmInfo &MAI,
118  const MCInstrInfo &MII,
119  const MCRegisterInfo &MRI,
120  const MCSubtargetInfo &STI);
121  typedef MCCodeEmitter *(*MCCodeEmitterCtorTy)(const MCInstrInfo &II,
122  const MCRegisterInfo &MRI,
123  const MCSubtargetInfo &STI,
124  MCContext &Ctx);
125  typedef MCStreamer *(*MCObjectStreamerCtorTy)(const Target &T,
126  StringRef TT,
127  MCContext &Ctx,
128  MCAsmBackend &TAB,
129  raw_ostream &_OS,
130  MCCodeEmitter *_Emitter,
131  bool RelaxAll,
132  bool NoExecStack);
133  typedef MCStreamer *(*AsmStreamerCtorTy)(MCContext &Ctx,
135  bool isVerboseAsm,
136  bool useLoc,
137  bool useCFI,
138  bool useDwarfDirectory,
139  MCInstPrinter *InstPrint,
140  MCCodeEmitter *CE,
141  MCAsmBackend *TAB,
142  bool ShowInst);
143  typedef MCRelocationInfo *(*MCRelocationInfoCtorTy)(StringRef TT,
144  MCContext &Ctx);
145  typedef MCSymbolizer *(*MCSymbolizerCtorTy)(StringRef TT,
146  LLVMOpInfoCallback GetOpInfo,
147  LLVMSymbolLookupCallback SymbolLookUp,
148  void *DisInfo,
149  MCContext *Ctx,
150  MCRelocationInfo *RelInfo);
151 
152  private:
153  /// Next - The next registered target in the linked list, maintained by the
154  /// TargetRegistry.
155  Target *Next;
156 
157  /// TripleMatchQualityFn - The target function for rating the match quality
158  /// of a triple.
159  TripleMatchQualityFnTy TripleMatchQualityFn;
160 
161  /// Name - The target name.
162  const char *Name;
163 
164  /// ShortDesc - A short description of the target.
165  const char *ShortDesc;
166 
167  /// HasJIT - Whether this target supports the JIT.
168  bool HasJIT;
169 
170  /// MCAsmInfoCtorFn - Constructor function for this target's MCAsmInfo, if
171  /// registered.
172  MCAsmInfoCtorFnTy MCAsmInfoCtorFn;
173 
174  /// MCCodeGenInfoCtorFn - Constructor function for this target's
175  /// MCCodeGenInfo, if registered.
176  MCCodeGenInfoCtorFnTy MCCodeGenInfoCtorFn;
177 
178  /// MCInstrInfoCtorFn - Constructor function for this target's MCInstrInfo,
179  /// if registered.
180  MCInstrInfoCtorFnTy MCInstrInfoCtorFn;
181 
182  /// MCInstrAnalysisCtorFn - Constructor function for this target's
183  /// MCInstrAnalysis, if registered.
184  MCInstrAnalysisCtorFnTy MCInstrAnalysisCtorFn;
185 
186  /// MCRegInfoCtorFn - Constructor function for this target's MCRegisterInfo,
187  /// if registered.
188  MCRegInfoCtorFnTy MCRegInfoCtorFn;
189 
190  /// MCSubtargetInfoCtorFn - Constructor function for this target's
191  /// MCSubtargetInfo, if registered.
192  MCSubtargetInfoCtorFnTy MCSubtargetInfoCtorFn;
193 
194  /// TargetMachineCtorFn - Construction function for this target's
195  /// TargetMachine, if registered.
196  TargetMachineCtorTy TargetMachineCtorFn;
197 
198  /// MCAsmBackendCtorFn - Construction function for this target's
199  /// MCAsmBackend, if registered.
200  MCAsmBackendCtorTy MCAsmBackendCtorFn;
201 
202  /// MCAsmParserCtorFn - Construction function for this target's
203  /// MCTargetAsmParser, if registered.
204  MCAsmParserCtorTy MCAsmParserCtorFn;
205 
206  /// AsmPrinterCtorFn - Construction function for this target's AsmPrinter,
207  /// if registered.
208  AsmPrinterCtorTy AsmPrinterCtorFn;
209 
210  /// MCDisassemblerCtorFn - Construction function for this target's
211  /// MCDisassembler, if registered.
212  MCDisassemblerCtorTy MCDisassemblerCtorFn;
213 
214  /// MCInstPrinterCtorFn - Construction function for this target's
215  /// MCInstPrinter, if registered.
216  MCInstPrinterCtorTy MCInstPrinterCtorFn;
217 
218  /// MCCodeEmitterCtorFn - Construction function for this target's
219  /// CodeEmitter, if registered.
220  MCCodeEmitterCtorTy MCCodeEmitterCtorFn;
221 
222  /// MCObjectStreamerCtorFn - Construction function for this target's
223  /// MCObjectStreamer, if registered.
224  MCObjectStreamerCtorTy MCObjectStreamerCtorFn;
225 
226  /// AsmStreamerCtorFn - Construction function for this target's
227  /// AsmStreamer, if registered (default = llvm::createAsmStreamer).
228  AsmStreamerCtorTy AsmStreamerCtorFn;
229 
230  /// MCRelocationInfoCtorFn - Construction function for this target's
231  /// MCRelocationInfo, if registered (default = llvm::createMCRelocationInfo)
232  MCRelocationInfoCtorTy MCRelocationInfoCtorFn;
233 
234  /// MCSymbolizerCtorFn - Construction function for this target's
235  /// MCSymbolizer, if registered (default = llvm::createMCSymbolizer)
236  MCSymbolizerCtorTy MCSymbolizerCtorFn;
237 
238  public:
240  : AsmStreamerCtorFn(0), MCRelocationInfoCtorFn(0),
241  MCSymbolizerCtorFn(0) {}
242 
243  /// @name Target Information
244  /// @{
245 
246  // getNext - Return the next registered target.
247  const Target *getNext() const { return Next; }
248 
249  /// getName - Get the target name.
250  const char *getName() const { return Name; }
251 
252  /// getShortDescription - Get a short description of the target.
253  const char *getShortDescription() const { return ShortDesc; }
254 
255  /// @}
256  /// @name Feature Predicates
257  /// @{
258 
259  /// hasJIT - Check if this targets supports the just-in-time compilation.
260  bool hasJIT() const { return HasJIT; }
261 
262  /// hasTargetMachine - Check if this target supports code generation.
263  bool hasTargetMachine() const { return TargetMachineCtorFn != 0; }
264 
265  /// hasMCAsmBackend - Check if this target supports .o generation.
266  bool hasMCAsmBackend() const { return MCAsmBackendCtorFn != 0; }
267 
268  /// @}
269  /// @name Feature Constructors
270  /// @{
271 
272  /// createMCAsmInfo - Create a MCAsmInfo implementation for the specified
273  /// target triple.
274  ///
275  /// \param Triple This argument is used to determine the target machine
276  /// feature set; it should always be provided. Generally this should be
277  /// either the target triple from the module, or the target triple of the
278  /// host if that does not exist.
280  StringRef Triple) const {
281  if (!MCAsmInfoCtorFn)
282  return 0;
283  return MCAsmInfoCtorFn(MRI, Triple);
284  }
285 
286  /// createMCCodeGenInfo - Create a MCCodeGenInfo implementation.
287  ///
289  CodeModel::Model CM,
290  CodeGenOpt::Level OL) const {
291  if (!MCCodeGenInfoCtorFn)
292  return 0;
293  return MCCodeGenInfoCtorFn(Triple, RM, CM, OL);
294  }
295 
296  /// createMCInstrInfo - Create a MCInstrInfo implementation.
297  ///
299  if (!MCInstrInfoCtorFn)
300  return 0;
301  return MCInstrInfoCtorFn();
302  }
303 
304  /// createMCInstrAnalysis - Create a MCInstrAnalysis implementation.
305  ///
307  if (!MCInstrAnalysisCtorFn)
308  return 0;
309  return MCInstrAnalysisCtorFn(Info);
310  }
311 
312  /// createMCRegInfo - Create a MCRegisterInfo implementation.
313  ///
315  if (!MCRegInfoCtorFn)
316  return 0;
317  return MCRegInfoCtorFn(Triple);
318  }
319 
320  /// createMCSubtargetInfo - Create a MCSubtargetInfo implementation.
321  ///
322  /// \param Triple This argument is used to determine the target machine
323  /// feature set; it should always be provided. Generally this should be
324  /// either the target triple from the module, or the target triple of the
325  /// host if that does not exist.
326  /// \param CPU This specifies the name of the target CPU.
327  /// \param Features This specifies the string representation of the
328  /// additional target features.
330  StringRef Features) const {
331  if (!MCSubtargetInfoCtorFn)
332  return 0;
333  return MCSubtargetInfoCtorFn(Triple, CPU, Features);
334  }
335 
336  /// createTargetMachine - Create a target specific machine implementation
337  /// for the specified \p Triple.
338  ///
339  /// \param Triple This argument is used to determine the target machine
340  /// feature set; it should always be provided. Generally this should be
341  /// either the target triple from the module, or the target triple of the
342  /// host if that does not exist.
344  StringRef Features, const TargetOptions &Options,
348  if (!TargetMachineCtorFn)
349  return 0;
350  return TargetMachineCtorFn(*this, Triple, CPU, Features, Options,
351  RM, CM, OL);
352  }
353 
354  /// createMCAsmBackend - Create a target specific assembly parser.
355  ///
356  /// \param Triple The target triple string.
358  StringRef Triple, StringRef CPU) const {
359  if (!MCAsmBackendCtorFn)
360  return 0;
361  return MCAsmBackendCtorFn(*this, MRI, Triple, CPU);
362  }
363 
364  /// createMCAsmParser - Create a target specific assembly parser.
365  ///
366  /// \param Parser The target independent parser implementation to use for
367  /// parsing and lexing.
369  MCAsmParser &Parser,
370  const MCInstrInfo &MII) const {
371  if (!MCAsmParserCtorFn)
372  return 0;
373  return MCAsmParserCtorFn(STI, Parser, MII);
374  }
375 
376  /// createAsmPrinter - Create a target specific assembly printer pass. This
377  /// takes ownership of the MCStreamer object.
379  if (!AsmPrinterCtorFn)
380  return 0;
381  return AsmPrinterCtorFn(TM, Streamer);
382  }
383 
385  if (!MCDisassemblerCtorFn)
386  return 0;
387  return MCDisassemblerCtorFn(*this, STI);
388  }
389 
390  MCInstPrinter *createMCInstPrinter(unsigned SyntaxVariant,
391  const MCAsmInfo &MAI,
392  const MCInstrInfo &MII,
393  const MCRegisterInfo &MRI,
394  const MCSubtargetInfo &STI) const {
395  if (!MCInstPrinterCtorFn)
396  return 0;
397  return MCInstPrinterCtorFn(*this, SyntaxVariant, MAI, MII, MRI, STI);
398  }
399 
400 
401  /// createMCCodeEmitter - Create a target specific code emitter.
403  const MCRegisterInfo &MRI,
404  const MCSubtargetInfo &STI,
405  MCContext &Ctx) const {
406  if (!MCCodeEmitterCtorFn)
407  return 0;
408  return MCCodeEmitterCtorFn(II, MRI, STI, Ctx);
409  }
410 
411  /// createMCObjectStreamer - Create a target specific MCStreamer.
412  ///
413  /// \param TT The target triple.
414  /// \param Ctx The target context.
415  /// \param TAB The target assembler backend object. Takes ownership.
416  /// \param _OS The stream object.
417  /// \param _Emitter The target independent assembler object.Takes ownership.
418  /// \param RelaxAll Relax all fixups?
419  /// \param NoExecStack Mark file as not needing a executable stack.
421  MCAsmBackend &TAB,
422  raw_ostream &_OS,
423  MCCodeEmitter *_Emitter,
424  bool RelaxAll,
425  bool NoExecStack) const {
426  if (!MCObjectStreamerCtorFn)
427  return 0;
428  return MCObjectStreamerCtorFn(*this, TT, Ctx, TAB, _OS, _Emitter,
429  RelaxAll, NoExecStack);
430  }
431 
432  /// createAsmStreamer - Create a target specific MCStreamer.
435  bool isVerboseAsm,
436  bool useLoc,
437  bool useCFI,
438  bool useDwarfDirectory,
439  MCInstPrinter *InstPrint,
440  MCCodeEmitter *CE,
441  MCAsmBackend *TAB,
442  bool ShowInst) const {
443  if (AsmStreamerCtorFn)
444  return AsmStreamerCtorFn(Ctx, OS, isVerboseAsm, useLoc, useCFI,
445  useDwarfDirectory, InstPrint, CE, TAB,
446  ShowInst);
447  return llvm::createAsmStreamer(Ctx, 0, OS, isVerboseAsm, useLoc, useCFI,
448  useDwarfDirectory, InstPrint, CE, TAB,
449  ShowInst);
450  }
451 
452  /// createMCRelocationInfo - Create a target specific MCRelocationInfo.
453  ///
454  /// \param TT The target triple.
455  /// \param Ctx The target context.
458  MCRelocationInfoCtorTy Fn = MCRelocationInfoCtorFn
459  ? MCRelocationInfoCtorFn
461  return Fn(TT, Ctx);
462  }
463 
464  /// createMCSymbolizer - Create a target specific MCSymbolizer.
465  ///
466  /// \param TT The target triple.
467  /// \param GetOpInfo The function to get the symbolic information for operands.
468  /// \param SymbolLookUp The function to lookup a symbol name.
469  /// \param DisInfo The pointer to the block of symbolic information for above call
470  /// back.
471  /// \param Ctx The target context.
472  /// \param RelInfo The relocation information for this target. Takes ownership.
473  MCSymbolizer *
475  LLVMSymbolLookupCallback SymbolLookUp,
476  void *DisInfo,
477  MCContext *Ctx, MCRelocationInfo *RelInfo) const {
478  MCSymbolizerCtorTy Fn =
479  MCSymbolizerCtorFn ? MCSymbolizerCtorFn : llvm::createMCSymbolizer;
480  return Fn(TT, GetOpInfo, SymbolLookUp, DisInfo, Ctx, RelInfo);
481  }
482 
483  /// @}
484  };
485 
486  /// TargetRegistry - Generic interface to target specific features.
487  struct TargetRegistry {
488  class iterator {
489  const Target *Current;
490  explicit iterator(Target *T) : Current(T) {}
491  friend struct TargetRegistry;
492  public:
493  iterator(const iterator &I) : Current(I.Current) {}
494  iterator() : Current(0) {}
495 
496  bool operator==(const iterator &x) const {
497  return Current == x.Current;
498  }
499  bool operator!=(const iterator &x) const {
500  return !operator==(x);
501  }
502 
503  // Iterator traversal: forward iteration only
504  iterator &operator++() { // Preincrement
505  assert(Current && "Cannot increment end iterator!");
506  Current = Current->getNext();
507  return *this;
508  }
509  iterator operator++(int) { // Postincrement
510  iterator tmp = *this;
511  ++*this;
512  return tmp;
513  }
514 
515  const Target &operator*() const {
516  assert(Current && "Cannot dereference end iterator!");
517  return *Current;
518  }
519 
520  const Target *operator->() const {
521  return &operator*();
522  }
523  };
524 
525  /// printRegisteredTargetsForVersion - Print the registered targets
526  /// appropriately for inclusion in a tool's version output.
527  static void printRegisteredTargetsForVersion();
528 
529  /// @name Registry Access
530  /// @{
531 
532  static iterator begin();
533 
534  static iterator end() { return iterator(); }
535 
536  /// lookupTarget - Lookup a target based on a target triple.
537  ///
538  /// \param Triple - The triple to use for finding a target.
539  /// \param Error - On failure, an error string describing why no target was
540  /// found.
541  static const Target *lookupTarget(const std::string &Triple,
542  std::string &Error);
543 
544  /// lookupTarget - Lookup a target based on an architecture name
545  /// and a target triple. If the architecture name is non-empty,
546  /// then the lookup is done by architecture. Otherwise, the target
547  /// triple is used.
548  ///
549  /// \param ArchName - The architecture to use for finding a target.
550  /// \param TheTriple - The triple to use for finding a target. The
551  /// triple is updated with canonical architecture name if a lookup
552  /// by architecture is done.
553  /// \param Error - On failure, an error string describing why no target was
554  /// found.
555  static const Target *lookupTarget(const std::string &ArchName,
556  Triple &TheTriple,
557  std::string &Error);
558 
559  /// getClosestTargetForJIT - Pick the best target that is compatible with
560  /// the current host. If no close target can be found, this returns null
561  /// and sets the Error string to a reason.
562  ///
563  /// Maintained for compatibility through 2.6.
564  static const Target *getClosestTargetForJIT(std::string &Error);
565 
566  /// @}
567  /// @name Target Registration
568  /// @{
569 
570  /// RegisterTarget - Register the given target. Attempts to register a
571  /// target which has already been registered will be ignored.
572  ///
573  /// Clients are responsible for ensuring that registration doesn't occur
574  /// while another thread is attempting to access the registry. Typically
575  /// this is done by initializing all targets at program startup.
576  ///
577  /// @param T - The target being registered.
578  /// @param Name - The target name. This should be a static string.
579  /// @param ShortDesc - A short target description. This should be a static
580  /// string.
581  /// @param TQualityFn - The triple match quality computation function for
582  /// this target.
583  /// @param HasJIT - Whether the target supports JIT code
584  /// generation.
585  static void RegisterTarget(Target &T,
586  const char *Name,
587  const char *ShortDesc,
589  bool HasJIT = false);
590 
591  /// RegisterMCAsmInfo - Register a MCAsmInfo implementation for the
592  /// given target.
593  ///
594  /// Clients are responsible for ensuring that registration doesn't occur
595  /// while another thread is attempting to access the registry. Typically
596  /// this is done by initializing all targets at program startup.
597  ///
598  /// @param T - The target being registered.
599  /// @param Fn - A function to construct a MCAsmInfo for the target.
601  T.MCAsmInfoCtorFn = Fn;
602  }
603 
604  /// RegisterMCCodeGenInfo - Register a MCCodeGenInfo implementation for the
605  /// given target.
606  ///
607  /// Clients are responsible for ensuring that registration doesn't occur
608  /// while another thread is attempting to access the registry. Typically
609  /// this is done by initializing all targets at program startup.
610  ///
611  /// @param T - The target being registered.
612  /// @param Fn - A function to construct a MCCodeGenInfo for the target.
615  T.MCCodeGenInfoCtorFn = Fn;
616  }
617 
618  /// RegisterMCInstrInfo - Register a MCInstrInfo implementation for the
619  /// given target.
620  ///
621  /// Clients are responsible for ensuring that registration doesn't occur
622  /// while another thread is attempting to access the registry. Typically
623  /// this is done by initializing all targets at program startup.
624  ///
625  /// @param T - The target being registered.
626  /// @param Fn - A function to construct a MCInstrInfo for the target.
628  T.MCInstrInfoCtorFn = Fn;
629  }
630 
631  /// RegisterMCInstrAnalysis - Register a MCInstrAnalysis implementation for
632  /// the given target.
635  T.MCInstrAnalysisCtorFn = Fn;
636  }
637 
638  /// RegisterMCRegInfo - Register a MCRegisterInfo implementation for the
639  /// given target.
640  ///
641  /// Clients are responsible for ensuring that registration doesn't occur
642  /// while another thread is attempting to access the registry. Typically
643  /// this is done by initializing all targets at program startup.
644  ///
645  /// @param T - The target being registered.
646  /// @param Fn - A function to construct a MCRegisterInfo for the target.
648  T.MCRegInfoCtorFn = Fn;
649  }
650 
651  /// RegisterMCSubtargetInfo - Register a MCSubtargetInfo implementation for
652  /// the given target.
653  ///
654  /// Clients are responsible for ensuring that registration doesn't occur
655  /// while another thread is attempting to access the registry. Typically
656  /// this is done by initializing all targets at program startup.
657  ///
658  /// @param T - The target being registered.
659  /// @param Fn - A function to construct a MCSubtargetInfo for the target.
662  T.MCSubtargetInfoCtorFn = Fn;
663  }
664 
665  /// RegisterTargetMachine - Register a TargetMachine implementation for the
666  /// given target.
667  ///
668  /// Clients are responsible for ensuring that registration doesn't occur
669  /// while another thread is attempting to access the registry. Typically
670  /// this is done by initializing all targets at program startup.
671  ///
672  /// @param T - The target being registered.
673  /// @param Fn - A function to construct a TargetMachine for the target.
676  T.TargetMachineCtorFn = Fn;
677  }
678 
679  /// RegisterMCAsmBackend - Register a MCAsmBackend implementation for the
680  /// given target.
681  ///
682  /// Clients are responsible for ensuring that registration doesn't occur
683  /// while another thread is attempting to access the registry. Typically
684  /// this is done by initializing all targets at program startup.
685  ///
686  /// @param T - The target being registered.
687  /// @param Fn - A function to construct an AsmBackend for the target.
689  T.MCAsmBackendCtorFn = Fn;
690  }
691 
692  /// RegisterMCAsmParser - Register a MCTargetAsmParser implementation for
693  /// the given target.
694  ///
695  /// Clients are responsible for ensuring that registration doesn't occur
696  /// while another thread is attempting to access the registry. Typically
697  /// this is done by initializing all targets at program startup.
698  ///
699  /// @param T - The target being registered.
700  /// @param Fn - A function to construct an MCTargetAsmParser for the target.
702  T.MCAsmParserCtorFn = Fn;
703  }
704 
705  /// RegisterAsmPrinter - Register an AsmPrinter implementation for the given
706  /// target.
707  ///
708  /// Clients are responsible for ensuring that registration doesn't occur
709  /// while another thread is attempting to access the registry. Typically
710  /// this is done by initializing all targets at program startup.
711  ///
712  /// @param T - The target being registered.
713  /// @param Fn - A function to construct an AsmPrinter for the target.
715  T.AsmPrinterCtorFn = Fn;
716  }
717 
718  /// RegisterMCDisassembler - Register a MCDisassembler implementation for
719  /// the given target.
720  ///
721  /// Clients are responsible for ensuring that registration doesn't occur
722  /// while another thread is attempting to access the registry. Typically
723  /// this is done by initializing all targets at program startup.
724  ///
725  /// @param T - The target being registered.
726  /// @param Fn - A function to construct an MCDisassembler for the target.
729  T.MCDisassemblerCtorFn = Fn;
730  }
731 
732  /// RegisterMCInstPrinter - Register a MCInstPrinter implementation for the
733  /// given target.
734  ///
735  /// Clients are responsible for ensuring that registration doesn't occur
736  /// while another thread is attempting to access the registry. Typically
737  /// this is done by initializing all targets at program startup.
738  ///
739  /// @param T - The target being registered.
740  /// @param Fn - A function to construct an MCInstPrinter for the target.
743  T.MCInstPrinterCtorFn = Fn;
744  }
745 
746  /// RegisterMCCodeEmitter - Register a MCCodeEmitter implementation for the
747  /// given target.
748  ///
749  /// Clients are responsible for ensuring that registration doesn't occur
750  /// while another thread is attempting to access the registry. Typically
751  /// this is done by initializing all targets at program startup.
752  ///
753  /// @param T - The target being registered.
754  /// @param Fn - A function to construct an MCCodeEmitter for the target.
757  T.MCCodeEmitterCtorFn = Fn;
758  }
759 
760  /// RegisterMCObjectStreamer - Register a object code MCStreamer
761  /// implementation for the given target.
762  ///
763  /// Clients are responsible for ensuring that registration doesn't occur
764  /// while another thread is attempting to access the registry. Typically
765  /// this is done by initializing all targets at program startup.
766  ///
767  /// @param T - The target being registered.
768  /// @param Fn - A function to construct an MCStreamer for the target.
771  T.MCObjectStreamerCtorFn = Fn;
772  }
773 
774  /// RegisterAsmStreamer - Register an assembly MCStreamer implementation
775  /// for the given target.
776  ///
777  /// Clients are responsible for ensuring that registration doesn't occur
778  /// while another thread is attempting to access the registry. Typically
779  /// this is done by initializing all targets at program startup.
780  ///
781  /// @param T - The target being registered.
782  /// @param Fn - A function to construct an MCStreamer for the target.
784  T.AsmStreamerCtorFn = Fn;
785  }
786 
787  /// RegisterMCRelocationInfo - Register an MCRelocationInfo
788  /// implementation for the given target.
789  ///
790  /// Clients are responsible for ensuring that registration doesn't occur
791  /// while another thread is attempting to access the registry. Typically
792  /// this is done by initializing all targets at program startup.
793  ///
794  /// @param T - The target being registered.
795  /// @param Fn - A function to construct an MCRelocationInfo for the target.
798  T.MCRelocationInfoCtorFn = Fn;
799  }
800 
801  /// RegisterMCSymbolizer - Register an MCSymbolizer
802  /// implementation for the given target.
803  ///
804  /// Clients are responsible for ensuring that registration doesn't occur
805  /// while another thread is attempting to access the registry. Typically
806  /// this is done by initializing all targets at program startup.
807  ///
808  /// @param T - The target being registered.
809  /// @param Fn - A function to construct an MCSymbolizer for the target.
812  T.MCSymbolizerCtorFn = Fn;
813  }
814 
815  /// @}
816  };
817 
818 
819  //===--------------------------------------------------------------------===//
820 
821  /// RegisterTarget - Helper template for registering a target, for use in the
822  /// target's initialization function. Usage:
823  ///
824  ///
825  /// Target TheFooTarget; // The global target instance.
826  ///
827  /// extern "C" void LLVMInitializeFooTargetInfo() {
828  /// RegisterTarget<Triple::foo> X(TheFooTarget, "foo", "Foo description");
829  /// }
830  template<Triple::ArchType TargetArchType = Triple::UnknownArch,
831  bool HasJIT = false>
832  struct RegisterTarget {
833  RegisterTarget(Target &T, const char *Name, const char *Desc) {
834  TargetRegistry::RegisterTarget(T, Name, Desc,
836  HasJIT);
837  }
838 
839  static unsigned getTripleMatchQuality(const std::string &TT) {
840  if (Triple(TT).getArch() == TargetArchType)
841  return 20;
842  return 0;
843  }
844  };
845 
846  /// RegisterMCAsmInfo - Helper template for registering a target assembly info
847  /// implementation. This invokes the static "Create" method on the class to
848  /// actually do the construction. Usage:
849  ///
850  /// extern "C" void LLVMInitializeFooTarget() {
851  /// extern Target TheFooTarget;
852  /// RegisterMCAsmInfo<FooMCAsmInfo> X(TheFooTarget);
853  /// }
854  template<class MCAsmInfoImpl>
857  TargetRegistry::RegisterMCAsmInfo(T, &Allocator);
858  }
859  private:
860  static MCAsmInfo *Allocator(const MCRegisterInfo &/*MRI*/, StringRef TT) {
861  return new MCAsmInfoImpl(TT);
862  }
863 
864  };
865 
866  /// RegisterMCAsmInfoFn - Helper template for registering a target assembly info
867  /// implementation. This invokes the specified function to do the
868  /// construction. Usage:
869  ///
870  /// extern "C" void LLVMInitializeFooTarget() {
871  /// extern Target TheFooTarget;
872  /// RegisterMCAsmInfoFn X(TheFooTarget, TheFunction);
873  /// }
877  }
878  };
879 
880  /// RegisterMCCodeGenInfo - Helper template for registering a target codegen info
881  /// implementation. This invokes the static "Create" method on the class
882  /// to actually do the construction. Usage:
883  ///
884  /// extern "C" void LLVMInitializeFooTarget() {
885  /// extern Target TheFooTarget;
886  /// RegisterMCCodeGenInfo<FooMCCodeGenInfo> X(TheFooTarget);
887  /// }
888  template<class MCCodeGenInfoImpl>
892  }
893  private:
894  static MCCodeGenInfo *Allocator(StringRef /*TT*/, Reloc::Model /*RM*/,
895  CodeModel::Model /*CM*/,
896  CodeGenOpt::Level /*OL*/) {
897  return new MCCodeGenInfoImpl();
898  }
899  };
900 
901  /// RegisterMCCodeGenInfoFn - Helper template for registering a target codegen
902  /// info implementation. This invokes the specified function to do the
903  /// construction. Usage:
904  ///
905  /// extern "C" void LLVMInitializeFooTarget() {
906  /// extern Target TheFooTarget;
907  /// RegisterMCCodeGenInfoFn X(TheFooTarget, TheFunction);
908  /// }
912  }
913  };
914 
915  /// RegisterMCInstrInfo - Helper template for registering a target instruction
916  /// info implementation. This invokes the static "Create" method on the class
917  /// to actually do the construction. Usage:
918  ///
919  /// extern "C" void LLVMInitializeFooTarget() {
920  /// extern Target TheFooTarget;
921  /// RegisterMCInstrInfo<FooMCInstrInfo> X(TheFooTarget);
922  /// }
923  template<class MCInstrInfoImpl>
927  }
928  private:
929  static MCInstrInfo *Allocator() {
930  return new MCInstrInfoImpl();
931  }
932  };
933 
934  /// RegisterMCInstrInfoFn - Helper template for registering a target
935  /// instruction info implementation. This invokes the specified function to
936  /// do the construction. Usage:
937  ///
938  /// extern "C" void LLVMInitializeFooTarget() {
939  /// extern Target TheFooTarget;
940  /// RegisterMCInstrInfoFn X(TheFooTarget, TheFunction);
941  /// }
945  }
946  };
947 
948  /// RegisterMCInstrAnalysis - Helper template for registering a target
949  /// instruction analyzer implementation. This invokes the static "Create"
950  /// method on the class to actually do the construction. Usage:
951  ///
952  /// extern "C" void LLVMInitializeFooTarget() {
953  /// extern Target TheFooTarget;
954  /// RegisterMCInstrAnalysis<FooMCInstrAnalysis> X(TheFooTarget);
955  /// }
956  template<class MCInstrAnalysisImpl>
960  }
961  private:
962  static MCInstrAnalysis *Allocator(const MCInstrInfo *Info) {
963  return new MCInstrAnalysisImpl(Info);
964  }
965  };
966 
967  /// RegisterMCInstrAnalysisFn - Helper template for registering a target
968  /// instruction analyzer implementation. This invokes the specified function
969  /// to do the construction. Usage:
970  ///
971  /// extern "C" void LLVMInitializeFooTarget() {
972  /// extern Target TheFooTarget;
973  /// RegisterMCInstrAnalysisFn X(TheFooTarget, TheFunction);
974  /// }
978  }
979  };
980 
981  /// RegisterMCRegInfo - Helper template for registering a target register info
982  /// implementation. This invokes the static "Create" method on the class to
983  /// actually do the construction. Usage:
984  ///
985  /// extern "C" void LLVMInitializeFooTarget() {
986  /// extern Target TheFooTarget;
987  /// RegisterMCRegInfo<FooMCRegInfo> X(TheFooTarget);
988  /// }
989  template<class MCRegisterInfoImpl>
992  TargetRegistry::RegisterMCRegInfo(T, &Allocator);
993  }
994  private:
995  static MCRegisterInfo *Allocator(StringRef /*TT*/) {
996  return new MCRegisterInfoImpl();
997  }
998  };
999 
1000  /// RegisterMCRegInfoFn - Helper template for registering a target register
1001  /// info implementation. This invokes the specified function to do the
1002  /// construction. Usage:
1003  ///
1004  /// extern "C" void LLVMInitializeFooTarget() {
1005  /// extern Target TheFooTarget;
1006  /// RegisterMCRegInfoFn X(TheFooTarget, TheFunction);
1007  /// }
1011  }
1012  };
1013 
1014  /// RegisterMCSubtargetInfo - Helper template for registering a target
1015  /// subtarget info implementation. This invokes the static "Create" method
1016  /// on the class to actually do the construction. Usage:
1017  ///
1018  /// extern "C" void LLVMInitializeFooTarget() {
1019  /// extern Target TheFooTarget;
1020  /// RegisterMCSubtargetInfo<FooMCSubtargetInfo> X(TheFooTarget);
1021  /// }
1022  template<class MCSubtargetInfoImpl>
1026  }
1027  private:
1028  static MCSubtargetInfo *Allocator(StringRef /*TT*/, StringRef /*CPU*/,
1029  StringRef /*FS*/) {
1030  return new MCSubtargetInfoImpl();
1031  }
1032  };
1033 
1034  /// RegisterMCSubtargetInfoFn - Helper template for registering a target
1035  /// subtarget info implementation. This invokes the specified function to
1036  /// do the construction. Usage:
1037  ///
1038  /// extern "C" void LLVMInitializeFooTarget() {
1039  /// extern Target TheFooTarget;
1040  /// RegisterMCSubtargetInfoFn X(TheFooTarget, TheFunction);
1041  /// }
1045  }
1046  };
1047 
1048  /// RegisterTargetMachine - Helper template for registering a target machine
1049  /// implementation, for use in the target machine initialization
1050  /// function. Usage:
1051  ///
1052  /// extern "C" void LLVMInitializeFooTarget() {
1053  /// extern Target TheFooTarget;
1054  /// RegisterTargetMachine<FooTargetMachine> X(TheFooTarget);
1055  /// }
1056  template<class TargetMachineImpl>
1060  }
1061 
1062  private:
1063  static TargetMachine *Allocator(const Target &T, StringRef TT,
1064  StringRef CPU, StringRef FS,
1065  const TargetOptions &Options,
1066  Reloc::Model RM,
1067  CodeModel::Model CM,
1068  CodeGenOpt::Level OL) {
1069  return new TargetMachineImpl(T, TT, CPU, FS, Options, RM, CM, OL);
1070  }
1071  };
1072 
1073  /// RegisterMCAsmBackend - Helper template for registering a target specific
1074  /// assembler backend. Usage:
1075  ///
1076  /// extern "C" void LLVMInitializeFooMCAsmBackend() {
1077  /// extern Target TheFooTarget;
1078  /// RegisterMCAsmBackend<FooAsmLexer> X(TheFooTarget);
1079  /// }
1080  template<class MCAsmBackendImpl>
1083  TargetRegistry::RegisterMCAsmBackend(T, &Allocator);
1084  }
1085 
1086  private:
1087  static MCAsmBackend *Allocator(const Target &T,
1088  const MCRegisterInfo &MRI,
1089  StringRef Triple, StringRef CPU) {
1090  return new MCAsmBackendImpl(T, MRI, Triple, CPU);
1091  }
1092  };
1093 
1094  /// RegisterMCAsmParser - Helper template for registering a target specific
1095  /// assembly parser, for use in the target machine initialization
1096  /// function. Usage:
1097  ///
1098  /// extern "C" void LLVMInitializeFooMCAsmParser() {
1099  /// extern Target TheFooTarget;
1100  /// RegisterMCAsmParser<FooAsmParser> X(TheFooTarget);
1101  /// }
1102  template<class MCAsmParserImpl>
1105  TargetRegistry::RegisterMCAsmParser(T, &Allocator);
1106  }
1107 
1108  private:
1109  static MCTargetAsmParser *Allocator(MCSubtargetInfo &STI, MCAsmParser &P,
1110  const MCInstrInfo &MII) {
1111  return new MCAsmParserImpl(STI, P, MII);
1112  }
1113  };
1114 
1115  /// RegisterAsmPrinter - Helper template for registering a target specific
1116  /// assembly printer, for use in the target machine initialization
1117  /// function. Usage:
1118  ///
1119  /// extern "C" void LLVMInitializeFooAsmPrinter() {
1120  /// extern Target TheFooTarget;
1121  /// RegisterAsmPrinter<FooAsmPrinter> X(TheFooTarget);
1122  /// }
1123  template<class AsmPrinterImpl>
1126  TargetRegistry::RegisterAsmPrinter(T, &Allocator);
1127  }
1128 
1129  private:
1130  static AsmPrinter *Allocator(TargetMachine &TM, MCStreamer &Streamer) {
1131  return new AsmPrinterImpl(TM, Streamer);
1132  }
1133  };
1134 
1135  /// RegisterMCCodeEmitter - Helper template for registering a target specific
1136  /// machine code emitter, for use in the target initialization
1137  /// function. Usage:
1138  ///
1139  /// extern "C" void LLVMInitializeFooMCCodeEmitter() {
1140  /// extern Target TheFooTarget;
1141  /// RegisterMCCodeEmitter<FooCodeEmitter> X(TheFooTarget);
1142  /// }
1143  template<class MCCodeEmitterImpl>
1147  }
1148 
1149  private:
1150  static MCCodeEmitter *Allocator(const MCInstrInfo &/*II*/,
1151  const MCRegisterInfo &/*MRI*/,
1152  const MCSubtargetInfo &/*STI*/,
1153  MCContext &/*Ctx*/) {
1154  return new MCCodeEmitterImpl();
1155  }
1156  };
1157 
1158 }
1159 
1160 #endif
const Target * getNext() const
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
static iterator end()
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)
MCCodeGenInfo * createMCCodeGenInfo(StringRef Triple, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) const
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)
#define T
static void RegisterTargetMachine(Target &T, Target::TargetMachineCtorTy Fn)
static const Target * getClosestTargetForJIT(std::string &Error)
unsigned(* TripleMatchQualityFnTy)(const std::string &TT)
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)
#define P(N)
MCInstrAnalysis *(* MCInstrAnalysisCtorFnTy)(const MCInstrInfo *Info)
static void printRegisteredTargetsForVersion()
RegisterMCInstrInfoFn(Target &T, Target::MCInstrInfoCtorFnTy Fn)
static void RegisterMCAsmParser(Target &T, Target::MCAsmParserCtorTy Fn)
Symbolize and annotate disassembled instructions.
Definition: MCSymbolizer.h:39
MCAsmBackend * createMCAsmBackend(const MCRegisterInfo &MRI, StringRef Triple, StringRef CPU) const
static void RegisterMCObjectStreamer(Target &T, Target::MCObjectStreamerCtorTy Fn)
static iterator begin()
const MCInstrInfo & MII
RegisterMCInstrAnalysisFn(Target &T, Target::MCInstrAnalysisCtorFnTy Fn)
const char * getShortDescription() const
getShortDescription - Get a short description of the target.
MCCodeEmitter - Generic instruction encoding interface.
Definition: MCCodeEmitter.h:22
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
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
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
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)
#define I(x, y, z)
Definition: MD5.cpp:54
static void RegisterMCSymbolizer(Target &T, Target::MCSymbolizerCtorTy Fn)
MCAsmBackend - Generic interface to target specific assembler backends.
Definition: MCAsmBackend.h:34
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)