diff options
Diffstat (limited to 'include/llvm/Support/TargetRegistry.h')
-rw-r--r-- | include/llvm/Support/TargetRegistry.h | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/include/llvm/Support/TargetRegistry.h b/include/llvm/Support/TargetRegistry.h index 954cdb13abafa..bd68d24144875 100644 --- a/include/llvm/Support/TargetRegistry.h +++ b/include/llvm/Support/TargetRegistry.h @@ -1,4 +1,4 @@ -//===-- Support/TargetRegistry.h - Target Registration ----------*- C++ -*-===// +//===- Support/TargetRegistry.h - Target Registration -----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -20,15 +20,22 @@ #define LLVM_SUPPORT_TARGETREGISTRY_H #include "llvm-c/Disassembler.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/ADT/Optional.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/CodeGen.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormattedStream.h" +#include <algorithm> #include <cassert> +#include <cstddef> +#include <iterator> #include <memory> #include <string> namespace llvm { + class AsmPrinter; class MCAsmBackend; class MCAsmInfo; @@ -36,22 +43,20 @@ class MCAsmParser; class MCCodeEmitter; class MCContext; class MCDisassembler; -class MCInstrAnalysis; class MCInstPrinter; +class MCInstrAnalysis; class MCInstrInfo; class MCRegisterInfo; +class MCRelocationInfo; class MCStreamer; class MCSubtargetInfo; class MCSymbolizer; -class MCRelocationInfo; class MCTargetAsmParser; class MCTargetOptions; class MCTargetStreamer; +class raw_pwrite_stream; class TargetMachine; class TargetOptions; -class raw_ostream; -class raw_pwrite_stream; -class formatted_raw_ostream; MCStreamer *createNullStreamer(MCContext &Ctx); MCStreamer *createAsmStreamer(MCContext &Ctx, @@ -68,6 +73,9 @@ MCStreamer *createMachOStreamer(MCContext &Ctx, MCAsmBackend &TAB, raw_pwrite_stream &OS, MCCodeEmitter *CE, bool RelaxAll, bool DWARFMustBeAtTheEnd, bool LabelSections = false); +MCStreamer *createWasmStreamer(MCContext &Ctx, MCAsmBackend &TAB, + raw_pwrite_stream &OS, MCCodeEmitter *CE, + bool RelaxAll); MCRelocationInfo *createMCRelocationInfo(const Triple &TT, MCContext &Ctx); @@ -143,6 +151,11 @@ public: MCCodeEmitter *Emitter, bool RelaxAll, bool IncrementalLinkerCompatible); + typedef MCStreamer *(*WasmStreamerCtorTy)(const Triple &T, MCContext &Ctx, + MCAsmBackend &TAB, + raw_pwrite_stream &OS, + MCCodeEmitter *Emitter, + bool RelaxAll); typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S); typedef MCTargetStreamer *(*AsmTargetStreamerCtorTy)( MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint, @@ -224,36 +237,33 @@ private: MCCodeEmitterCtorTy MCCodeEmitterCtorFn; // Construction functions for the various object formats, if registered. - COFFStreamerCtorTy COFFStreamerCtorFn; - MachOStreamerCtorTy MachOStreamerCtorFn; - ELFStreamerCtorTy ELFStreamerCtorFn; + COFFStreamerCtorTy COFFStreamerCtorFn = nullptr; + MachOStreamerCtorTy MachOStreamerCtorFn = nullptr; + ELFStreamerCtorTy ELFStreamerCtorFn = nullptr; + WasmStreamerCtorTy WasmStreamerCtorFn = nullptr; /// Construction function for this target's null TargetStreamer, if /// registered (default = nullptr). - NullTargetStreamerCtorTy NullTargetStreamerCtorFn; + NullTargetStreamerCtorTy NullTargetStreamerCtorFn = nullptr; /// Construction function for this target's asm TargetStreamer, if /// registered (default = nullptr). - AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn; + AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr; /// Construction function for this target's obj TargetStreamer, if /// registered (default = nullptr). - ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn; + ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr; /// MCRelocationInfoCtorFn - Construction function for this target's /// MCRelocationInfo, if registered (default = llvm::createMCRelocationInfo) - MCRelocationInfoCtorTy MCRelocationInfoCtorFn; + MCRelocationInfoCtorTy MCRelocationInfoCtorFn = nullptr; /// MCSymbolizerCtorFn - Construction function for this target's /// MCSymbolizer, if registered (default = llvm::createMCSymbolizer) - MCSymbolizerCtorTy MCSymbolizerCtorFn; + MCSymbolizerCtorTy MCSymbolizerCtorFn = nullptr; public: - Target() - : COFFStreamerCtorFn(nullptr), MachOStreamerCtorFn(nullptr), - ELFStreamerCtorFn(nullptr), NullTargetStreamerCtorFn(nullptr), - AsmTargetStreamerCtorFn(nullptr), ObjectTargetStreamerCtorFn(nullptr), - MCRelocationInfoCtorFn(nullptr), MCSymbolizerCtorFn(nullptr) {} + Target() = default; /// @name Target Information /// @{ @@ -461,6 +471,12 @@ public: else S = createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll); break; + case Triple::Wasm: + if (WasmStreamerCtorFn) + S = WasmStreamerCtorFn(T, Ctx, TAB, OS, Emitter, RelaxAll); + else + S = createWasmStreamer(Ctx, TAB, OS, Emitter, RelaxAll); + break; } if (ObjectTargetStreamerCtorFn) ObjectTargetStreamerCtorFn(*S, STI); @@ -548,12 +564,14 @@ struct TargetRegistry { class iterator : public std::iterator<std::forward_iterator_tag, Target, ptrdiff_t> { - const Target *Current; - explicit iterator(Target *T) : Current(T) {} friend struct TargetRegistry; + const Target *Current = nullptr; + + explicit iterator(Target *T) : Current(T) {} + public: - iterator() : Current(nullptr) {} + iterator() = default; bool operator==(const iterator &x) const { return Current == x.Current; } bool operator!=(const iterator &x) const { return !operator==(x); } @@ -800,6 +818,10 @@ struct TargetRegistry { T.ELFStreamerCtorFn = Fn; } + static void RegisterWasmStreamer(Target &T, Target::WasmStreamerCtorTy Fn) { + T.WasmStreamerCtorFn = Fn; + } + static void RegisterNullTargetStreamer(Target &T, Target::NullTargetStreamerCtorTy Fn) { T.NullTargetStreamerCtorFn = Fn; @@ -1147,6 +1169,7 @@ private: return new MCCodeEmitterImpl(); } }; -} -#endif +} // end namespace llvm + +#endif // LLVM_SUPPORT_TARGETREGISTRY_H |