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