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_IR_ASMANNOTATIONWRITER_H
18#define LLVM_IR_ASMANNOTATIONWRITER_H
19
20namespace llvm {
21
22class Function;
23class BasicBlock;
24class Instruction;
25class Value;
26class formatted_raw_ostream;
27
28class AssemblyAnnotationWriter {
29public:
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