[PATCH] D39907: Move declaration of MCAsmStreamer to include, NFC.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 10 13:58:14 PST 2017


The existing and support way of doing target specific things is via
TargetStreamer. What prevents you from using it?

Cheers,
Rafael

Alexey Bataev via Phabricator via llvm-commits
<llvm-commits at lists.llvm.org> writes:

> ABataev created this revision.
> Herald added a subscriber: aprantl.
>
> Declaration of MCAsmStreamer is moved to include directory to make it
> possible to override it. Required for implementing of debug info for
> Cuda/NVPTX.
>
>
> https://reviews.llvm.org/D39907
>
> Files:
>   include/llvm/MC/MCAsmStreamer.h
>   include/llvm/Support/TargetRegistry.h
>   lib/MC/MCAsmStreamer.cpp
>
> Index: lib/MC/MCAsmStreamer.cpp
> ===================================================================
> --- lib/MC/MCAsmStreamer.cpp
> +++ lib/MC/MCAsmStreamer.cpp
> @@ -8,23 +8,20 @@
>  //===----------------------------------------------------------------------===//
>  
>  #include "llvm/ADT/STLExtras.h"
> -#include "llvm/ADT/SmallString.h"
>  #include "llvm/ADT/StringExtras.h"
>  #include "llvm/ADT/Twine.h"
>  #include "llvm/MC/MCAsmBackend.h"
> +#include "llvm/MC/MCAsmStreamer.h"
>  #include "llvm/MC/MCAsmInfo.h"
>  #include "llvm/MC/MCCodeEmitter.h"
>  #include "llvm/MC/MCCodeView.h"
> -#include "llvm/MC/MCContext.h"
>  #include "llvm/MC/MCExpr.h"
>  #include "llvm/MC/MCFixupKindInfo.h"
>  #include "llvm/MC/MCInst.h"
> -#include "llvm/MC/MCInstPrinter.h"
>  #include "llvm/MC/MCObjectFileInfo.h"
>  #include "llvm/MC/MCRegisterInfo.h"
>  #include "llvm/MC/MCSectionCOFF.h"
>  #include "llvm/MC/MCSectionMachO.h"
> -#include "llvm/MC/MCStreamer.h"
>  #include "llvm/MC/MCSymbolELF.h"
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/Format.h"
> @@ -37,279 +34,17 @@
>  
>  using namespace llvm;
>  
> -namespace {
> -
> -class MCAsmStreamer final : public MCStreamer {
> -  std::unique_ptr<formatted_raw_ostream> OSOwner;
> -  formatted_raw_ostream &OS;
> -  const MCAsmInfo *MAI;
> -  std::unique_ptr<MCInstPrinter> InstPrinter;
> -  std::unique_ptr<MCCodeEmitter> Emitter;
> -  std::unique_ptr<MCAsmBackend> AsmBackend;
> -
> -  SmallString<128> ExplicitCommentToEmit;
> -  SmallString<128> CommentToEmit;
> -  raw_svector_ostream CommentStream;
> -
> -  unsigned IsVerboseAsm : 1;
> -  unsigned ShowInst : 1;
> -  unsigned UseDwarfDirectory : 1;
> -
> -  void EmitRegisterName(int64_t Register);
> -  void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
> -  void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
> -
> -public:
> -  MCAsmStreamer(MCContext &Context, std::unique_ptr<formatted_raw_ostream> os,
> -                bool isVerboseAsm, bool useDwarfDirectory,
> -                MCInstPrinter *printer, MCCodeEmitter *emitter,
> -                MCAsmBackend *asmbackend, bool showInst)
> -      : MCStreamer(Context), OSOwner(std::move(os)), OS(*OSOwner),
> -        MAI(Context.getAsmInfo()), InstPrinter(printer), Emitter(emitter),
> -        AsmBackend(asmbackend), CommentStream(CommentToEmit),
> -        IsVerboseAsm(isVerboseAsm), ShowInst(showInst),
> -        UseDwarfDirectory(useDwarfDirectory) {
> -    assert(InstPrinter);
> -    if (IsVerboseAsm)
> -        InstPrinter->setCommentStream(CommentStream);
> -  }
> -
> -  inline void EmitEOL() {
> -    // Dump Explicit Comments here.
> -    emitExplicitComments();
> -    // If we don't have any comments, just emit a \n.
> -    if (!IsVerboseAsm) {
> -      OS << '\n';
> -      return;
> -    }
> -    EmitCommentsAndEOL();
> -  }
> -
> -  void EmitSyntaxDirective() override;
> -
> -  void EmitCommentsAndEOL();
> -
> -  /// isVerboseAsm - Return true if this streamer supports verbose assembly at
> -  /// all.
> -  bool isVerboseAsm() const override { return IsVerboseAsm; }
> -
> -  /// hasRawTextSupport - We support EmitRawText.
> -  bool hasRawTextSupport() const override { return true; }
> -
> -  /// AddComment - Add a comment that can be emitted to the generated .s
> -  /// file if applicable as a QoI issue to make the output of the compiler
> -  /// more readable.  This only affects the MCAsmStreamer, and only when
> -  /// verbose assembly output is enabled.
> -  void AddComment(const Twine &T, bool EOL = true) override;
> -
> -  /// AddEncodingComment - Add a comment showing the encoding of an instruction.
> -  /// If PrintSchedInfo - is true then the comment sched:[x:y] should
> -  //    be added to output if it's being supported by target
> -  void AddEncodingComment(const MCInst &Inst, const MCSubtargetInfo &,
> -                          bool PrintSchedInfo);
> -
> -  /// GetCommentOS - Return a raw_ostream that comments can be written to.
> -  /// Unlike AddComment, you are required to terminate comments with \n if you
> -  /// use this method.
> -  raw_ostream &GetCommentOS() override {
> -    if (!IsVerboseAsm)
> -      return nulls();  // Discard comments unless in verbose asm mode.
> -    return CommentStream;
> -  }
> -
> -  void emitRawComment(const Twine &T, bool TabPrefix = true) override;
> -
> -  void addExplicitComment(const Twine &T) override;
> -  void emitExplicitComments() override;
> -
> -  /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
> -  void AddBlankLine() override {
> -    EmitEOL();
> +/// Emit End-Of-Line symbol.
> +inline void MCAsmStreamer::EmitEOL() {
> +  // Dump Explicit Comments here.
> +  emitExplicitComments();
> +  // If we don't have any comments, just emit a \n.
> +  if (!IsVerboseAsm) {
> +    OS << '\n';
> +    return;
>    }
> -
> -  /// @name MCStreamer Interface
> -  /// @{
> -
> -  void ChangeSection(MCSection *Section, const MCExpr *Subsection) override;
> -
> -  void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
> -  void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
> -
> -  void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
> -  void EmitLinkerOptions(ArrayRef<std::string> Options) override;
> -  void EmitDataRegion(MCDataRegionType Kind) override;
> -  void EmitVersionMin(MCVersionMinType Kind, unsigned Major, unsigned Minor,
> -                      unsigned Update) override;
> -  void EmitThumbFunc(MCSymbol *Func) override;
> -
> -  void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
> -  void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
> -  bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
> -
> -  void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override;
> -  void BeginCOFFSymbolDef(const MCSymbol *Symbol) override;
> -  void EmitCOFFSymbolStorageClass(int StorageClass) override;
> -  void EmitCOFFSymbolType(int Type) override;
> -  void EndCOFFSymbolDef() override;
> -  void EmitCOFFSafeSEH(MCSymbol const *Symbol) override;
> -  void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
> -  void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override;
> -  void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
> -  void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
> -                        unsigned ByteAlignment) override;
> -
> -  /// EmitLocalCommonSymbol - Emit a local common (.lcomm) symbol.
> -  ///
> -  /// @param Symbol - The common symbol to emit.
> -  /// @param Size - The size of the common symbol.
> -  /// @param ByteAlignment - The alignment of the common symbol in bytes.
> -  void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
> -                             unsigned ByteAlignment) override;
> -
> -  void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
> -                    uint64_t Size = 0, unsigned ByteAlignment = 0) override;
> -
> -  void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
> -                      unsigned ByteAlignment = 0) override;
> -
> -  void EmitBinaryData(StringRef Data) override;
> -
> -  void EmitBytes(StringRef Data) override;
> -
> -  void EmitValueImpl(const MCExpr *Value, unsigned Size,
> -                     SMLoc Loc = SMLoc()) override;
> -  void EmitIntValue(uint64_t Value, unsigned Size) override;
> -
> -  void EmitULEB128Value(const MCExpr *Value) override;
> -
> -  void EmitSLEB128Value(const MCExpr *Value) override;
> -
> -  void EmitDTPRel32Value(const MCExpr *Value) override;
> -  void EmitDTPRel64Value(const MCExpr *Value) override;
> -  void EmitTPRel32Value(const MCExpr *Value) override;
> -  void EmitTPRel64Value(const MCExpr *Value) override;
> -
> -  void EmitGPRel64Value(const MCExpr *Value) override;
> -
> -  void EmitGPRel32Value(const MCExpr *Value) override;
> -
> -
> -  void emitFill(uint64_t NumBytes, uint8_t FillValue) override;
> -
> -  void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
> -                SMLoc Loc = SMLoc()) override;
> -
> -  void emitFill(uint64_t NumValues, int64_t Size, int64_t Expr) override;
> -
> -  void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr,
> -                SMLoc Loc = SMLoc()) override;
> -
> -  void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
> -                            unsigned ValueSize = 1,
> -                            unsigned MaxBytesToEmit = 0) override;
> -
> -  void EmitCodeAlignment(unsigned ByteAlignment,
> -                         unsigned MaxBytesToEmit = 0) override;
> -
> -  void emitValueToOffset(const MCExpr *Offset,
> -                         unsigned char Value,
> -                         SMLoc Loc) override;
> -
> -  void EmitFileDirective(StringRef Filename) override;
> -  unsigned EmitDwarfFileDirective(unsigned FileNo, StringRef Directory,
> -                                  StringRef Filename,
> -                                  unsigned CUID = 0) override;
> -  void EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
> -                             unsigned Column, unsigned Flags,
> -                             unsigned Isa, unsigned Discriminator,
> -                             StringRef FileName) override;
> -  MCSymbol *getDwarfLineTableSymbol(unsigned CUID) override;
> -
> -  bool EmitCVFileDirective(unsigned FileNo, StringRef Filename,
> -                           ArrayRef<uint8_t> Checksum,
> -                           unsigned ChecksumKind) override;
> -  bool EmitCVFuncIdDirective(unsigned FuncId) override;
> -  bool EmitCVInlineSiteIdDirective(unsigned FunctionId, unsigned IAFunc,
> -                                   unsigned IAFile, unsigned IALine,
> -                                   unsigned IACol, SMLoc Loc) override;
> -  void EmitCVLocDirective(unsigned FunctionId, unsigned FileNo, unsigned Line,
> -                          unsigned Column, bool PrologueEnd, bool IsStmt,
> -                          StringRef FileName, SMLoc Loc) override;
> -  void EmitCVLinetableDirective(unsigned FunctionId, const MCSymbol *FnStart,
> -                                const MCSymbol *FnEnd) override;
> -  void EmitCVInlineLinetableDirective(unsigned PrimaryFunctionId,
> -                                      unsigned SourceFileId,
> -                                      unsigned SourceLineNum,
> -                                      const MCSymbol *FnStartSym,
> -                                      const MCSymbol *FnEndSym) override;
> -  void EmitCVDefRangeDirective(
> -      ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
> -      StringRef FixedSizePortion) override;
> -  void EmitCVStringTableDirective() override;
> -  void EmitCVFileChecksumsDirective() override;
> -  void EmitCVFileChecksumOffsetDirective(unsigned FileNo) override;
> -  void EmitCVFPOData(const MCSymbol *ProcSym, SMLoc L) override;
> -
> -  void EmitIdent(StringRef IdentString) override;
> -  void EmitCFISections(bool EH, bool Debug) override;
> -  void EmitCFIDefCfa(int64_t Register, int64_t Offset) override;
> -  void EmitCFIDefCfaOffset(int64_t Offset) override;
> -  void EmitCFIDefCfaRegister(int64_t Register) override;
> -  void EmitCFIOffset(int64_t Register, int64_t Offset) override;
> -  void EmitCFIPersonality(const MCSymbol *Sym, unsigned Encoding) override;
> -  void EmitCFILsda(const MCSymbol *Sym, unsigned Encoding) override;
> -  void EmitCFIRememberState() override;
> -  void EmitCFIRestoreState() override;
> -  void EmitCFIRestore(int64_t Register) override;
> -  void EmitCFISameValue(int64_t Register) override;
> -  void EmitCFIRelOffset(int64_t Register, int64_t Offset) override;
> -  void EmitCFIAdjustCfaOffset(int64_t Adjustment) override;
> -  void EmitCFIEscape(StringRef Values) override;
> -  void EmitCFIGnuArgsSize(int64_t Size) override;
> -  void EmitCFISignalFrame() override;
> -  void EmitCFIUndefined(int64_t Register) override;
> -  void EmitCFIRegister(int64_t Register1, int64_t Register2) override;
> -  void EmitCFIWindowSave() override;
> -  void EmitCFIReturnColumn(int64_t Register) override;
> -
> -  void EmitWinCFIStartProc(const MCSymbol *Symbol, SMLoc Loc) override;
> -  void EmitWinCFIEndProc(SMLoc Loc) override;
> -  void EmitWinCFIStartChained(SMLoc Loc) override;
> -  void EmitWinCFIEndChained(SMLoc Loc) override;
> -  void EmitWinCFIPushReg(unsigned Register, SMLoc Loc) override;
> -  void EmitWinCFISetFrame(unsigned Register, unsigned Offset,
> -                          SMLoc Loc) override;
> -  void EmitWinCFIAllocStack(unsigned Size, SMLoc Loc) override;
> -  void EmitWinCFISaveReg(unsigned Register, unsigned Offset,
> -                         SMLoc Loc) override;
> -  void EmitWinCFISaveXMM(unsigned Register, unsigned Offset,
> -                         SMLoc Loc) override;
> -  void EmitWinCFIPushFrame(bool Code, SMLoc Loc) override;
> -  void EmitWinCFIEndProlog(SMLoc Loc) override;
> -
> -  void EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except,
> -                        SMLoc Loc) override;
> -  void EmitWinEHHandlerData(SMLoc Loc) override;
> -
> -  void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
> -                       bool PrintSchedInfo) override;
> -
> -  void EmitBundleAlignMode(unsigned AlignPow2) override;
> -  void EmitBundleLock(bool AlignToEnd) override;
> -  void EmitBundleUnlock() override;
> -
> -  bool EmitRelocDirective(const MCExpr &Offset, StringRef Name,
> -                          const MCExpr *Expr, SMLoc Loc) override;
> -
> -  /// EmitRawText - If this file is backed by an assembly streamer, this dumps
> -  /// the specified string in the output .s file.  This capability is
> -  /// indicated by the hasRawTextSupport() predicate.
> -  void EmitRawTextImpl(StringRef String) override;
> -
> -  void FinishImpl() override;
> -};
> -
> -} // end anonymous namespace.
> +  EmitCommentsAndEOL();
> +}
>  
>  /// AddComment - Add a comment that can be emitted to the generated .s
>  /// file if applicable as a QoI issue to make the output of the compiler
> Index: include/llvm/Support/TargetRegistry.h
> ===================================================================
> --- include/llvm/Support/TargetRegistry.h
> +++ include/llvm/Support/TargetRegistry.h
> @@ -164,6 +164,10 @@
>    using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
>        MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
>        bool IsVerboseAsm);
> +  using AsmStreamerCtorTy = MCStreamer
> +      *(*)(MCContext &Context, std::unique_ptr<formatted_raw_ostream> OS,
> +           bool isVerboseAsm, bool useDwarfDirectory, MCInstPrinter *IP,
> +           MCCodeEmitter *CE, MCAsmBackend *MAB, bool ShowInst);
>    using ObjectTargetStreamerCtorTy = MCTargetStreamer *(*)(
>        MCStreamer &S, const MCSubtargetInfo &STI);
>    using MCRelocationInfoCtorTy = MCRelocationInfo *(*)(const Triple &TT,
> @@ -252,6 +256,9 @@
>    /// registered (default = nullptr).
>    AsmTargetStreamerCtorTy AsmTargetStreamerCtorFn = nullptr;
>  
> +  /// Construction function for common asm streamer.
> +  AsmStreamerCtorTy AsmStreamerCtorFn = nullptr;
> +
>    /// Construction function for this target's obj TargetStreamer, if
>    /// registered (default = nullptr).
>    ObjectTargetStreamerCtorTy ObjectTargetStreamerCtorFn = nullptr;
> @@ -492,9 +499,11 @@
>                                  MCInstPrinter *InstPrint, MCCodeEmitter *CE,
>                                  MCAsmBackend *TAB, bool ShowInst) const {
>      formatted_raw_ostream &OSRef = *OS;
> -    MCStreamer *S = llvm::createAsmStreamer(Ctx, std::move(OS), IsVerboseAsm,
> -                                            UseDwarfDirectory, InstPrint, CE,
> -                                            TAB, ShowInst);
> +    AsmStreamerCtorTy Streamer =
> +        AsmStreamerCtorFn ? AsmStreamerCtorFn : llvm::createAsmStreamer;
> +    MCStreamer *S = Streamer(Ctx, std::move(OS), IsVerboseAsm,
> +                             UseDwarfDirectory, InstPrint, CE, TAB, ShowInst);
> +
>      createAsmTargetStreamer(*S, OSRef, InstPrint, IsVerboseAsm);
>      return S;
>    }
> @@ -830,6 +839,10 @@
>      T.AsmTargetStreamerCtorFn = Fn;
>    }
>  
> +  static void RegisterAsmStreamer(Target &T, Target::AsmStreamerCtorTy Fn) {
> +    T.AsmStreamerCtorFn = Fn;
> +  }
> +
>    static void
>    RegisterObjectTargetStreamer(Target &T,
>                                 Target::ObjectTargetStreamerCtorTy Fn) {
> Index: include/llvm/MC/MCAsmStreamer.h
> ===================================================================
> --- /dev/null
> +++ include/llvm/MC/MCAsmStreamer.h
> @@ -0,0 +1,284 @@
> +//===- lib/MC/MCAsmStreamer.h - Text Assembly Output ------------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/ADT/SmallString.h"
> +#include "llvm/MC/MCContext.h"
> +#include "llvm/MC/MCInstPrinter.h"
> +#include "llvm/MC/MCStreamer.h"
> +
> +namespace llvm {
> +class Twine;
> +class MCAsmBackend;
> +class MCAsmInfo;
> +class MCCodeEmitter;
> +class MCExpr;
> +class MCInst;
> +
> +class MCAsmStreamer final : public MCStreamer {
> +  std::unique_ptr<formatted_raw_ostream> OSOwner;
> +  formatted_raw_ostream &OS;
> +  const MCAsmInfo *MAI;
> +  std::unique_ptr<MCInstPrinter> InstPrinter;
> +  std::unique_ptr<MCCodeEmitter> Emitter;
> +  std::unique_ptr<MCAsmBackend> AsmBackend;
> +
> +  SmallString<128> ExplicitCommentToEmit;
> +  SmallString<128> CommentToEmit;
> +  raw_svector_ostream CommentStream;
> +
> +  unsigned IsVerboseAsm : 1;
> +  unsigned ShowInst : 1;
> +  unsigned UseDwarfDirectory : 1;
> +
> +  void EmitRegisterName(int64_t Register);
> +  void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
> +  void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
> +
> +public:
> +  MCAsmStreamer(MCContext &Context, std::unique_ptr<formatted_raw_ostream> os,
> +                bool isVerboseAsm, bool useDwarfDirectory,
> +                MCInstPrinter *printer, MCCodeEmitter *emitter,
> +                MCAsmBackend *asmbackend, bool showInst)
> +      : MCStreamer(Context), OSOwner(std::move(os)), OS(*OSOwner),
> +        MAI(Context.getAsmInfo()), InstPrinter(printer), Emitter(emitter),
> +        AsmBackend(asmbackend), CommentStream(CommentToEmit),
> +        IsVerboseAsm(isVerboseAsm), ShowInst(showInst),
> +        UseDwarfDirectory(useDwarfDirectory) {
> +    assert(InstPrinter);
> +    if (IsVerboseAsm)
> +        InstPrinter->setCommentStream(CommentStream);
> +  }
> +
> +  void EmitEOL();
> +
> +  void EmitSyntaxDirective() override;
> +
> +  void EmitCommentsAndEOL();
> +
> +  /// isVerboseAsm - Return true if this streamer supports verbose assembly at
> +  /// all.
> +  bool isVerboseAsm() const override { return IsVerboseAsm; }
> +
> +  /// hasRawTextSupport - We support EmitRawText.
> +  bool hasRawTextSupport() const override { return true; }
> +
> +  /// AddComment - Add a comment that can be emitted to the generated .s
> +  /// file if applicable as a QoI issue to make the output of the compiler
> +  /// more readable.  This only affects the MCAsmStreamer, and only when
> +  /// verbose assembly output is enabled.
> +  void AddComment(const Twine &T, bool EOL = true) override;
> +
> +  /// AddEncodingComment - Add a comment showing the encoding of an instruction.
> +  /// If PrintSchedInfo - is true then the comment sched:[x:y] should
> +  //    be added to output if it's being supported by target
> +  void AddEncodingComment(const MCInst &Inst, const MCSubtargetInfo &,
> +                          bool PrintSchedInfo);
> +
> +  /// GetCommentOS - Return a raw_ostream that comments can be written to.
> +  /// Unlike AddComment, you are required to terminate comments with \n if you
> +  /// use this method.
> +  raw_ostream &GetCommentOS() override {
> +    if (!IsVerboseAsm)
> +      return nulls();  // Discard comments unless in verbose asm mode.
> +    return CommentStream;
> +  }
> +
> +  void emitRawComment(const Twine &T, bool TabPrefix = true) override;
> +
> +  void addExplicitComment(const Twine &T) override;
> +  void emitExplicitComments() override;
> +
> +  /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
> +  void AddBlankLine() override {
> +    EmitEOL();
> +  }
> +
> +  /// @name MCStreamer Interface
> +  /// @{
> +
> +  void ChangeSection(MCSection *Section, const MCExpr *Subsection) override;
> +
> +  void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
> +  void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
> +
> +  void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
> +  void EmitLinkerOptions(ArrayRef<std::string> Options) override;
> +  void EmitDataRegion(MCDataRegionType Kind) override;
> +  void EmitVersionMin(MCVersionMinType Kind, unsigned Major, unsigned Minor,
> +                      unsigned Update) override;
> +  void EmitThumbFunc(MCSymbol *Func) override;
> +
> +  void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
> +  void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
> +  bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
> +
> +  void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override;
> +  void BeginCOFFSymbolDef(const MCSymbol *Symbol) override;
> +  void EmitCOFFSymbolStorageClass(int StorageClass) override;
> +  void EmitCOFFSymbolType(int Type) override;
> +  void EndCOFFSymbolDef() override;
> +  void EmitCOFFSafeSEH(MCSymbol const *Symbol) override;
> +  void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
> +  void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override;
> +  void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
> +  void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
> +                        unsigned ByteAlignment) override;
> +
> +  /// EmitLocalCommonSymbol - Emit a local common (.lcomm) symbol.
> +  ///
> +  /// @param Symbol - The common symbol to emit.
> +  /// @param Size - The size of the common symbol.
> +  /// @param ByteAlignment - The alignment of the common symbol in bytes.
> +  void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
> +                             unsigned ByteAlignment) override;
> +
> +  void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
> +                    uint64_t Size = 0, unsigned ByteAlignment = 0) override;
> +
> +  void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
> +                      unsigned ByteAlignment = 0) override;
> +
> +  void EmitBinaryData(StringRef Data) override;
> +
> +  void EmitBytes(StringRef Data) override;
> +
> +  void EmitValueImpl(const MCExpr *Value, unsigned Size,
> +                     SMLoc Loc = SMLoc()) override;
> +  void EmitIntValue(uint64_t Value, unsigned Size) override;
> +
> +  void EmitULEB128Value(const MCExpr *Value) override;
> +
> +  void EmitSLEB128Value(const MCExpr *Value) override;
> +
> +  void EmitDTPRel32Value(const MCExpr *Value) override;
> +  void EmitDTPRel64Value(const MCExpr *Value) override;
> +  void EmitTPRel32Value(const MCExpr *Value) override;
> +  void EmitTPRel64Value(const MCExpr *Value) override;
> +
> +  void EmitGPRel64Value(const MCExpr *Value) override;
> +
> +  void EmitGPRel32Value(const MCExpr *Value) override;
> +
> +
> +  void emitFill(uint64_t NumBytes, uint8_t FillValue) override;
> +
> +  void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
> +                SMLoc Loc = SMLoc()) override;
> +
> +  void emitFill(uint64_t NumValues, int64_t Size, int64_t Expr) override;
> +
> +  void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr,
> +                SMLoc Loc = SMLoc()) override;
> +
> +  void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
> +                            unsigned ValueSize = 1,
> +                            unsigned MaxBytesToEmit = 0) override;
> +
> +  void EmitCodeAlignment(unsigned ByteAlignment,
> +                         unsigned MaxBytesToEmit = 0) override;
> +
> +  void emitValueToOffset(const MCExpr *Offset,
> +                         unsigned char Value,
> +                         SMLoc Loc) override;
> +
> +  void EmitFileDirective(StringRef Filename) override;
> +  unsigned EmitDwarfFileDirective(unsigned FileNo, StringRef Directory,
> +                                  StringRef Filename,
> +                                  unsigned CUID = 0) override;
> +  void EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
> +                             unsigned Column, unsigned Flags,
> +                             unsigned Isa, unsigned Discriminator,
> +                             StringRef FileName) override;
> +  MCSymbol *getDwarfLineTableSymbol(unsigned CUID) override;
> +
> +  bool EmitCVFileDirective(unsigned FileNo, StringRef Filename,
> +                           ArrayRef<uint8_t> Checksum,
> +                           unsigned ChecksumKind) override;
> +  bool EmitCVFuncIdDirective(unsigned FuncId) override;
> +  bool EmitCVInlineSiteIdDirective(unsigned FunctionId, unsigned IAFunc,
> +                                   unsigned IAFile, unsigned IALine,
> +                                   unsigned IACol, SMLoc Loc) override;
> +  void EmitCVLocDirective(unsigned FunctionId, unsigned FileNo, unsigned Line,
> +                          unsigned Column, bool PrologueEnd, bool IsStmt,
> +                          StringRef FileName, SMLoc Loc) override;
> +  void EmitCVLinetableDirective(unsigned FunctionId, const MCSymbol *FnStart,
> +                                const MCSymbol *FnEnd) override;
> +  void EmitCVInlineLinetableDirective(unsigned PrimaryFunctionId,
> +                                      unsigned SourceFileId,
> +                                      unsigned SourceLineNum,
> +                                      const MCSymbol *FnStartSym,
> +                                      const MCSymbol *FnEndSym) override;
> +  void EmitCVDefRangeDirective(
> +      ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
> +      StringRef FixedSizePortion) override;
> +  void EmitCVStringTableDirective() override;
> +  void EmitCVFileChecksumsDirective() override;
> +  void EmitCVFileChecksumOffsetDirective(unsigned FileNo) override;
> +  void EmitCVFPOData(const MCSymbol *ProcSym, SMLoc L) override;
> +
> +  void EmitIdent(StringRef IdentString) override;
> +  void EmitCFISections(bool EH, bool Debug) override;
> +  void EmitCFIDefCfa(int64_t Register, int64_t Offset) override;
> +  void EmitCFIDefCfaOffset(int64_t Offset) override;
> +  void EmitCFIDefCfaRegister(int64_t Register) override;
> +  void EmitCFIOffset(int64_t Register, int64_t Offset) override;
> +  void EmitCFIPersonality(const MCSymbol *Sym, unsigned Encoding) override;
> +  void EmitCFILsda(const MCSymbol *Sym, unsigned Encoding) override;
> +  void EmitCFIRememberState() override;
> +  void EmitCFIRestoreState() override;
> +  void EmitCFIRestore(int64_t Register) override;
> +  void EmitCFISameValue(int64_t Register) override;
> +  void EmitCFIRelOffset(int64_t Register, int64_t Offset) override;
> +  void EmitCFIAdjustCfaOffset(int64_t Adjustment) override;
> +  void EmitCFIEscape(StringRef Values) override;
> +  void EmitCFIGnuArgsSize(int64_t Size) override;
> +  void EmitCFISignalFrame() override;
> +  void EmitCFIUndefined(int64_t Register) override;
> +  void EmitCFIRegister(int64_t Register1, int64_t Register2) override;
> +  void EmitCFIWindowSave() override;
> +  void EmitCFIReturnColumn(int64_t Register) override;
> +
> +  void EmitWinCFIStartProc(const MCSymbol *Symbol, SMLoc Loc) override;
> +  void EmitWinCFIEndProc(SMLoc Loc) override;
> +  void EmitWinCFIStartChained(SMLoc Loc) override;
> +  void EmitWinCFIEndChained(SMLoc Loc) override;
> +  void EmitWinCFIPushReg(unsigned Register, SMLoc Loc) override;
> +  void EmitWinCFISetFrame(unsigned Register, unsigned Offset,
> +                          SMLoc Loc) override;
> +  void EmitWinCFIAllocStack(unsigned Size, SMLoc Loc) override;
> +  void EmitWinCFISaveReg(unsigned Register, unsigned Offset,
> +                         SMLoc Loc) override;
> +  void EmitWinCFISaveXMM(unsigned Register, unsigned Offset,
> +                         SMLoc Loc) override;
> +  void EmitWinCFIPushFrame(bool Code, SMLoc Loc) override;
> +  void EmitWinCFIEndProlog(SMLoc Loc) override;
> +
> +  void EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except,
> +                        SMLoc Loc) override;
> +  void EmitWinEHHandlerData(SMLoc Loc) override;
> +
> +  void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
> +                       bool PrintSchedInfo) override;
> +
> +  void EmitBundleAlignMode(unsigned AlignPow2) override;
> +  void EmitBundleLock(bool AlignToEnd) override;
> +  void EmitBundleUnlock() override;
> +
> +  bool EmitRelocDirective(const MCExpr &Offset, StringRef Name,
> +                          const MCExpr *Expr, SMLoc Loc) override;
> +
> +  /// EmitRawText - If this file is backed by an assembly streamer, this dumps
> +  /// the specified string in the output .s file.  This capability is
> +  /// indicated by the hasRawTextSupport() predicate.
> +  void EmitRawTextImpl(StringRef String) override;
> +
> +  void FinishImpl() override;
> +};
> +
> +} // end namespace llvm
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list