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 <memory>
6
#include <string>
7
#include <unordered_set>
8
#include <utility>
9
10
#include "
mini-llvm/ir/BasicBlock.h
"
11
#include "
mini-llvm/ir/Instruction/Terminator.h
"
12
#include "
mini-llvm/ir/InstructionVisitor.h
"
13
#include "
mini-llvm/ir/Type.h
"
14
#include "
mini-llvm/ir/Type/Void.h
"
15
#include "
mini-llvm/ir/Use.h
"
16
#include "
mini-llvm/ir/Value.h
"
17
#include "
mini-llvm/utils/Compiler.h
"
18
19
namespace
mini_llvm::ir
{
20
21
class
MINI_LLVM_EXPORT
CondBr
final :
public
Terminator
{
22
public
:
23
CondBr
(std::shared_ptr<Value>
cond
, std::weak_ptr<BasicBlock>
trueDest
, std::weak_ptr<BasicBlock>
falseDest
)
24
: cond_(this, std::move(
cond
)), trueDest_(this, std::move(
trueDest
)), falseDest_(this, std::move(
falseDest
)) {}
25
26
template
<
typename
Self>
27
auto
&
cond
(
this
Self &&self) {
28
return
self.cond_;
29
}
30
31
template
<
typename
Self>
32
auto
&
trueDest
(
this
Self &&self) {
33
return
self.trueDest_;
34
}
35
36
template
<
typename
Self>
37
auto
&
falseDest
(
this
Self &&self) {
38
return
self.falseDest_;
39
}
40
41
std::unordered_set<BasicBlock *>
successors
()
const override
{
42
return
{&*
trueDest
(), &*
falseDest
()};
43
}
44
45
std::unordered_set<const UseBase *>
operands
()
const override
{
46
return
{&
cond
(), &
trueDest
(), &
falseDest
()};
47
}
48
49
void
accept
(
InstructionVisitor
&visitor)
override
{
50
visitor.
visitCondBr
(*
this
);
51
}
52
53
void
accept
(
InstructionVisitor
&visitor)
const override
{
54
visitor.
visitCondBr
(*
this
);
55
}
56
57
bool
isWellFormed
()
const override
;
58
59
std::unique_ptr<Type>
type
()
const override
{
60
return
std::make_unique<Void>();
61
}
62
63
std::string
format
()
const override
;
64
std::unique_ptr<Value>
clone
()
const override
;
65
66
private
:
67
Use<Value>
cond_;
68
Use<BasicBlock>
trueDest_, falseDest_;
69
};
70
71
}
// namespace mini_llvm::ir
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
Type.h
Use.h
Value.h
Void.h
mini_llvm::ir::CondBr::trueDest
auto & trueDest(this Self &&self)
Definition
CondBr.h:32
mini_llvm::ir::CondBr::accept
void accept(InstructionVisitor &visitor) override
Definition
CondBr.h:49
mini_llvm::ir::CondBr::CondBr
CondBr(std::shared_ptr< Value > cond, std::weak_ptr< BasicBlock > trueDest, std::weak_ptr< BasicBlock > falseDest)
Definition
CondBr.h:23
mini_llvm::ir::CondBr::type
std::unique_ptr< Type > type() const override
Definition
CondBr.h:59
mini_llvm::ir::CondBr::cond
auto & cond(this Self &&self)
Definition
CondBr.h:27
mini_llvm::ir::CondBr::accept
void accept(InstructionVisitor &visitor) const override
Definition
CondBr.h:53
mini_llvm::ir::CondBr::falseDest
auto & falseDest(this Self &&self)
Definition
CondBr.h:37
mini_llvm::ir::CondBr::isWellFormed
bool isWellFormed() const override
mini_llvm::ir::CondBr::successors
std::unordered_set< BasicBlock * > successors() const override
Definition
CondBr.h:41
mini_llvm::ir::CondBr::clone
std::unique_ptr< Value > clone() const override
mini_llvm::ir::CondBr::format
std::string format() const override
mini_llvm::ir::CondBr::operands
std::unordered_set< const UseBase * > operands() const override
Definition
CondBr.h:45
mini_llvm::ir::InstructionVisitor
Definition
InstructionVisitor.h:58
mini_llvm::ir::InstructionVisitor::visitCondBr
virtual void visitCondBr(CondBr &I)
Definition
InstructionVisitor.h:77
mini_llvm::ir::Terminator
Definition
Terminator.h:13
mini_llvm::ir::Use
Definition
Use.h:44
BasicBlock.h
InstructionVisitor.h
Terminator.h
mini_llvm::ir
Definition
Argument.h:13
include
mini-llvm
ir
Instruction
CondBr.h
Generated by
1.17.0