1274955Ssvnmir//===-- lib/CodeGen/AsmPrinter/AsmPrinterHandler.h -------------*- C++ -*--===//
2274955Ssvnmir//
3274955Ssvnmir//                     The LLVM Compiler Infrastructure
4274955Ssvnmir//
5274955Ssvnmir// This file is distributed under the University of Illinois Open Source
6274955Ssvnmir// License. See LICENSE.TXT for details.
7274955Ssvnmir//
8274955Ssvnmir//===----------------------------------------------------------------------===//
9274955Ssvnmir//
10274955Ssvnmir// This file contains a generic interface for AsmPrinter handlers,
11274955Ssvnmir// like debug and EH info emitters.
12274955Ssvnmir//
13274955Ssvnmir//===----------------------------------------------------------------------===//
14274955Ssvnmir
15280031Sdim#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H
16280031Sdim#define LLVM_LIB_CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H
17274955Ssvnmir
18274955Ssvnmir#include "llvm/Support/DataTypes.h"
19274955Ssvnmir
20274955Ssvnmirnamespace llvm {
21274955Ssvnmir
22296417Sdimclass MachineBasicBlock;
23274955Ssvnmirclass MachineFunction;
24274955Ssvnmirclass MachineInstr;
25274955Ssvnmirclass MCSymbol;
26274955Ssvnmir
27274955Ssvnmir/// \brief Collects and handles AsmPrinter objects required to build debug
28274955Ssvnmir/// or EH information.
29274955Ssvnmirclass AsmPrinterHandler {
30274955Ssvnmirpublic:
31274955Ssvnmir  virtual ~AsmPrinterHandler();
32274955Ssvnmir
33274955Ssvnmir  /// \brief For symbols that have a size designated (e.g. common symbols),
34274955Ssvnmir  /// this tracks that size.
35274955Ssvnmir  virtual void setSymbolSize(const MCSymbol *Sym, uint64_t Size) = 0;
36274955Ssvnmir
37274955Ssvnmir  /// \brief Emit all sections that should come after the content.
38274955Ssvnmir  virtual void endModule() = 0;
39274955Ssvnmir
40274955Ssvnmir  /// \brief Gather pre-function debug information.
41274955Ssvnmir  /// Every beginFunction(MF) call should be followed by an endFunction(MF)
42274955Ssvnmir  /// call.
43274955Ssvnmir  virtual void beginFunction(const MachineFunction *MF) = 0;
44274955Ssvnmir
45288943Sdim  // \brief Emit any of function marker (like .cfi_endproc). This is called
46288943Sdim  // before endFunction and cannot switch sections.
47288943Sdim  virtual void markFunctionEnd();
48288943Sdim
49274955Ssvnmir  /// \brief Gather post-function debug information.
50274955Ssvnmir  /// Please note that some AsmPrinter implementations may not call
51274955Ssvnmir  /// beginFunction at all.
52274955Ssvnmir  virtual void endFunction(const MachineFunction *MF) = 0;
53274955Ssvnmir
54296417Sdim  /// \brief Emit target-specific EH funclet machinery.
55296417Sdim  virtual void beginFunclet(const MachineBasicBlock &MBB,
56296417Sdim                            MCSymbol *Sym = nullptr) {}
57296417Sdim  virtual void endFunclet() {}
58296417Sdim
59274955Ssvnmir  /// \brief Process beginning of an instruction.
60274955Ssvnmir  virtual void beginInstruction(const MachineInstr *MI) = 0;
61274955Ssvnmir
62274955Ssvnmir  /// \brief Process end of an instruction.
63274955Ssvnmir  virtual void endInstruction() = 0;
64274955Ssvnmir};
65274955Ssvnmir} // End of namespace llvm
66274955Ssvnmir
67274955Ssvnmir#endif
68