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 #include "llvm/Support/Compiler.h" 20 21 namespace llvm { 22 23 class Function; 24 class BasicBlock; 25 class Instruction; 26 class Value; 27 class formatted_raw_ostream; 28 29 class LLVM_ABI AssemblyAnnotationWriter { 30 public: 31 virtual ~AssemblyAnnotationWriter(); 32 33 /// emitFunctionAnnot - This may be implemented to emit a string right before 34 /// the start of a function. emitFunctionAnnot(const Function *,formatted_raw_ostream &)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. emitBasicBlockStartAnnot(const BasicBlock *,formatted_raw_ostream &)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. emitBasicBlockEndAnnot(const BasicBlock *,formatted_raw_ostream &)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. emitInstructionAnnot(const Instruction *,formatted_raw_ostream &)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. printInfoComment(const Value &,formatted_raw_ostream &)58 virtual void printInfoComment(const Value &, formatted_raw_ostream &) {} 59 }; 60 61 } // End llvm namespace 62 63 #endif 64