mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
Br.h
Go to the documentation of this file.
1
// SPDX-License-Identifier: MIT
2
3
#pragma once
4
5
#include <format>
6
#include <memory>
7
#include <string>
8
#include <unordered_set>
9
10
#include "
mini-llvm/mir/BasicBlockOperand.h
"
11
#include "
mini-llvm/mir/ImmediateOperand.h
"
12
#include "
mini-llvm/mir/Instruction/Terminator.h
"
13
#include "
mini-llvm/mir/MemoryOperand.h
"
14
#include "
mini-llvm/utils/Compiler.h
"
15
16
namespace
mini_llvm::mir
{
17
18
class
MINI_LLVM_EXPORT
Br
:
public
Terminator
{
19
public
:
20
explicit
Br
(
BasicBlock
*
dest
) : dest_(
dest
) {}
21
22
template
<
typename
Self>
23
auto
&
dest
(
this
Self &&self) {
24
return
self.dest_;
25
}
26
27
std::unordered_set<const BasicBlockOperand *>
blockOps
()
const override
{
28
return
{&
dest
()};
29
}
30
31
std::unordered_set<const RegisterOperand *>
regOps
()
const override
{
32
return
{};
33
}
34
35
std::unordered_set<const RegisterOperand *>
dsts
()
const override
{
36
return
{};
37
}
38
39
std::unordered_set<const RegisterOperand *>
srcs
()
const override
{
40
return
{};
41
}
42
43
std::unordered_set<const ImmediateOperand *>
immOps
()
const override
{
44
return
{};
45
}
46
47
std::unordered_set<const MemoryOperand *>
memOps
()
const override
{
48
return
{};
49
}
50
51
std::string
format
()
const override
{
52
return
std::format(
"BR {:o}"
, *
dest
());
53
}
54
55
std::unique_ptr<Instruction>
clone
()
const override
{
56
return
std::make_unique<Br>(&*
dest
());
57
}
58
59
void
accept
(
InstructionVisitor
&visitor)
override
{
60
visitor.
visitBr
(*
this
);
61
}
62
63
void
accept
(
InstructionVisitor
&visitor)
const override
{
64
visitor.
visitBr
(*
this
);
65
}
66
67
private
:
68
BasicBlockOperand
dest_;
69
};
70
71
}
// namespace mini_llvm::mir
BasicBlockOperand.h
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
ImmediateOperand.h
MemoryOperand.h
mini_llvm::mir::BasicBlockOperand
Definition
BasicBlockOperand.h:9
mini_llvm::mir::BasicBlock
Definition
BasicBlock.h:24
mini_llvm::mir::Br::accept
void accept(InstructionVisitor &visitor) const override
Definition
Br.h:63
mini_llvm::mir::Br::dsts
std::unordered_set< const RegisterOperand * > dsts() const override
Definition
Br.h:35
mini_llvm::mir::Br::srcs
std::unordered_set< const RegisterOperand * > srcs() const override
Definition
Br.h:39
mini_llvm::mir::Br::Br
Br(BasicBlock *dest)
Definition
Br.h:20
mini_llvm::mir::Br::dest
auto & dest(this Self &&self)
Definition
Br.h:23
mini_llvm::mir::Br::regOps
std::unordered_set< const RegisterOperand * > regOps() const override
Definition
Br.h:31
mini_llvm::mir::Br::accept
void accept(InstructionVisitor &visitor) override
Definition
Br.h:59
mini_llvm::mir::Br::immOps
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition
Br.h:43
mini_llvm::mir::Br::blockOps
std::unordered_set< const BasicBlockOperand * > blockOps() const override
Definition
Br.h:27
mini_llvm::mir::Br::format
std::string format() const override
Definition
Br.h:51
mini_llvm::mir::Br::memOps
std::unordered_set< const MemoryOperand * > memOps() const override
Definition
Br.h:47
mini_llvm::mir::Br::clone
std::unique_ptr< Instruction > clone() const override
Definition
Br.h:55
mini_llvm::mir::InstructionVisitor
Definition
InstructionVisitor.h:70
mini_llvm::mir::InstructionVisitor::visitBr
virtual void visitBr(Br &I)
Definition
InstructionVisitor.h:86
mini_llvm::mir::Terminator
Definition
Terminator.h:13
Terminator.h
mini_llvm::mir
Definition
BasicBlock.h:22
include
mini-llvm
mir
Instruction
Br.h
Generated by
1.17.0