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