llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
printer.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include <ostream>
8 #include <unordered_map>
9 
10 #include <llvm/Support/raw_ostream.h>
11 
12 #include "core/cond.h"
13 #include "core/calling_conv.h"
14 #include "core/visibility.h"
15 #include "core/inst.h"
16 
17 class Atom;
18 class Block;
19 class Data;
20 class Func;
21 class Prog;
22 class Object;
23 
24 
25 
29 class Printer {
30 public:
32  Printer(llvm::raw_ostream &os) : os_(os) {}
33 
35  virtual void Print(const Prog &prog);
37  virtual void Print(const Data &data);
39  virtual void Print(const Object &object);
41  virtual void Print(const Atom &atom);
43  virtual void Print(const Func &func);
45  virtual void Print(const Block &block);
47  virtual void Print(const Inst &inst);
49  virtual void Print(const Expr &expr);
51  virtual void Print(ConstRef<Value> val);
53  virtual void Print(const std::string_view str);
54 
55 protected:
57  virtual void PrintFuncHeader(const Func &func) {}
59  virtual void PrintInstHeader(const Inst &inst) {}
60 
61 private:
63  void PrintImpl(const Inst &inst);
64 
65 protected:
67  llvm::raw_ostream &os_;
68 
69 private:
71  std::unordered_map<ConstRef<Inst>, unsigned> insts_;
72 };
Inst
Definition: inst.h:53
Func
Definition: func.h:30
ConstRef
Definition: ref.h:83
Atom
Definition: atom.h:23
Printer::os_
llvm::raw_ostream & os_
Output stream.
Definition: printer.h:67
Printer::Printer
Printer(llvm::raw_ostream &os)
Initialises the printer.
Definition: printer.h:32
Expr
Definition: expr.h:19
Data
Definition: data.h:47
Object
Definition: object.h:43
Printer::PrintFuncHeader
virtual void PrintFuncHeader(const Func &func)
Hook to print additional information for functions.
Definition: printer.h:57
Printer::PrintInstHeader
virtual void PrintInstHeader(const Inst &inst)
Hook to print additional information for instructions.
Definition: printer.h:59
Prog
Definition: prog.h:33
Block
Definition: block.h:29
Printer
Definition: printer.h:29
Printer::Print
virtual void Print(const Prog &prog)
Prints a whole program.
Definition: printer.cpp:23