llir-opt
0.0.1
Low-Level Post-Link Optimiser for OCaml and C
core
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
Generated by
1.8.17