mini-llvm
0.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
CondBr.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/BasicBlock.h
"
11
#include "
mini-llvm/mir/BasicBlockOperand.h
"
12
#include "
mini-llvm/mir/Condition.h
"
13
#include "
mini-llvm/mir/ImmediateOperand.h
"
14
#include "
mini-llvm/mir/Instruction.h
"
15
#include "
mini-llvm/mir/Instruction/Terminator.h
"
16
#include "
mini-llvm/mir/InstructionVisitor.h
"
17
#include "
mini-llvm/mir/MemoryOperand.h
"
18
#include "
mini-llvm/mir/RegisterOperand.h
"
19
#include "
mini-llvm/utils/Compiler.h
"
20
21
namespace
mini_llvm::mir
{
22
23
class
MINI_LLVM_EXPORT
CondBr
:
public
Terminator
{
24
public
:
25
CondBr
(
Condition
cond
,
BasicBlock
*
trueDest
,
BasicBlock
*
falseDest
)
26
: cond_(
cond
), trueDest_(
trueDest
), falseDest_(
falseDest
) {}
27
28
Condition
cond
()
const
{
29
return
cond_;
30
}
31
32
void
setCond
(
Condition
cond
) {
33
cond_ =
cond
;
34
}
35
36
template
<
typename
Self>
37
auto
&
trueDest
(
this
Self &&self) {
38
return
self.trueDest_;
39
}
40
41
template
<
typename
Self>
42
auto
&
falseDest
(
this
Self &&self) {
43
return
self.falseDest_;
44
}
45
46
std::unordered_set<const BasicBlockOperand *>
blockOps
()
const override
{
47
return
{&
trueDest
(), &
falseDest
()};
48
}
49
50
std::unordered_set<const RegisterOperand *>
regOps
()
const override
{
51
return
{};
52
}
53
54
std::unordered_set<const RegisterOperand *>
dsts
()
const override
{
55
return
{};
56
}
57
58
std::unordered_set<const RegisterOperand *>
srcs
()
const override
{
59
return
{};
60
}
61
62
std::unordered_set<const ImmediateOperand *>
immOps
()
const override
{
63
return
{};
64
}
65
66
std::unordered_set<const MemoryOperand *>
memOps
()
const override
{
67
return
{};
68
}
69
70
std::string
format
()
const override
{
71
return
std::format(
"CONDBR {} {:o}, {:o}"
,
specifier
(
cond
()), *
trueDest
(), *
falseDest
());
72
}
73
74
std::unique_ptr<Instruction>
clone
()
const override
{
75
return
std::make_unique<CondBr>(
cond
(), &*
trueDest
(), &*
falseDest
());
76
}
77
78
void
accept
(
InstructionVisitor
&visitor)
override
{
79
visitor.
visitCondBr
(*
this
);
80
}
81
82
void
accept
(
InstructionVisitor
&visitor)
const override
{
83
visitor.
visitCondBr
(*
this
);
84
}
85
86
private
:
87
Condition
cond_;
88
BasicBlockOperand
trueDest_, falseDest_;
89
};
90
91
}
// namespace mini_llvm::mir
BasicBlockOperand.h
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
Condition.h
ImmediateOperand.h
MemoryOperand.h
RegisterOperand.h
mini_llvm::mir::BasicBlockOperand
Definition
BasicBlockOperand.h:9
mini_llvm::mir::BasicBlock
Definition
BasicBlock.h:24
mini_llvm::mir::CondBr::accept
void accept(InstructionVisitor &visitor) const override
Definition
CondBr.h:82
mini_llvm::mir::CondBr::immOps
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition
CondBr.h:62
mini_llvm::mir::CondBr::accept
void accept(InstructionVisitor &visitor) override
Definition
CondBr.h:78
mini_llvm::mir::CondBr::trueDest
auto & trueDest(this Self &&self)
Definition
CondBr.h:37
mini_llvm::mir::CondBr::setCond
void setCond(Condition cond)
Definition
CondBr.h:32
mini_llvm::mir::CondBr::format
std::string format() const override
Definition
CondBr.h:70
mini_llvm::mir::CondBr::regOps
std::unordered_set< const RegisterOperand * > regOps() const override
Definition
CondBr.h:50
mini_llvm::mir::CondBr::blockOps
std::unordered_set< const BasicBlockOperand * > blockOps() const override
Definition
CondBr.h:46
mini_llvm::mir::CondBr::srcs
std::unordered_set< const RegisterOperand * > srcs() const override
Definition
CondBr.h:58
mini_llvm::mir::CondBr::memOps
std::unordered_set< const MemoryOperand * > memOps() const override
Definition
CondBr.h:66
mini_llvm::mir::CondBr::CondBr
CondBr(Condition cond, BasicBlock *trueDest, BasicBlock *falseDest)
Definition
CondBr.h:25
mini_llvm::mir::CondBr::dsts
std::unordered_set< const RegisterOperand * > dsts() const override
Definition
CondBr.h:54
mini_llvm::mir::CondBr::falseDest
auto & falseDest(this Self &&self)
Definition
CondBr.h:42
mini_llvm::mir::CondBr::cond
Condition cond() const
Definition
CondBr.h:28
mini_llvm::mir::CondBr::clone
std::unique_ptr< Instruction > clone() const override
Definition
CondBr.h:74
mini_llvm::mir::InstructionVisitor
Definition
InstructionVisitor.h:70
mini_llvm::mir::InstructionVisitor::visitCondBr
virtual void visitCondBr(CondBr &I)
Definition
InstructionVisitor.h:93
mini_llvm::mir::Terminator
Definition
Terminator.h:13
BasicBlock.h
InstructionVisitor.h
Terminator.h
Instruction.h
mini_llvm::mir
Definition
BasicBlock.h:22
mini_llvm::mir::specifier
constexpr const char * specifier(Condition cond)
Definition
Condition.h:15
mini_llvm::mir::Condition
Condition
Definition
Condition.h:9
include
mini-llvm
mir
Instruction
CondBr.h
Generated by
1.17.0