Home | History | Annotate | Download | only in Assembly
      1 //===-- AssemblyAnnotationWriter.h - Annotation .ll files -------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // Clients of the assembly writer can use this interface to add their own
     11 // special-purpose annotations to LLVM assembly language printouts.  Note that
     12 // the assembly parser won't be able to parse these, in general, so
     13 // implementations are advised to print stuff as LLVM comments.
     14 //
     15 //===----------------------------------------------------------------------===//
     16 
     17 #ifndef LLVM_ASSEMBLY_ASMANNOTATIONWRITER_H
     18 #define LLVM_ASSEMBLY_ASMANNOTATIONWRITER_H
     19 
     20 namespace llvm {
     21 
     22 class Function;
     23 class BasicBlock;
     24 class Instruction;
     25 class Value;
     26 class formatted_raw_ostream;
     27 
     28 class AssemblyAnnotationWriter {
     29 public:
     30 
     31   virtual ~AssemblyAnnotationWriter();
     32 
     33   /// emitFunctionAnnot - This may be implemented to emit a string right before
     34   /// the start of a function.
     35   virtual void emitFunctionAnnot(const Function *,
     36                                  formatted_raw_ostream &) {}
     37 
     38   /// emitBasicBlockStartAnnot - This may be implemented to emit a string right
     39   /// after the basic block label, but before the first instruction in the
     40   /// block.
     41   virtual void emitBasicBlockStartAnnot(const BasicBlock *,
     42                                         formatted_raw_ostream &) {
     43   }
     44 
     45   /// emitBasicBlockEndAnnot - This may be implemented to emit a string right
     46   /// after the basic block.
     47   virtual void emitBasicBlockEndAnnot(const BasicBlock *,
     48                                       formatted_raw_ostream &) {
     49   }
     50 
     51   /// emitInstructionAnnot - This may be implemented to emit a string right
     52   /// before an instruction is emitted.
     53   virtual void emitInstructionAnnot(const Instruction *,
     54                                     formatted_raw_ostream &) {}
     55 
     56   /// printInfoComment - This may be implemented to emit a comment to the
     57   /// right of an instruction or global value.
     58   virtual void printInfoComment(const Value &, formatted_raw_ostream &) {}
     59 };
     60 
     61 } // End llvm namespace
     62 
     63 #endif
     64