mini-llvm 0.1.0
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
20
21namespace mini_llvm::mir {
22
24public:
26 : cond_(cond), trueDest_(trueDest), falseDest_(falseDest) {}
27
28 Condition cond() const {
29 return cond_;
30 }
31
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
86private:
87 Condition cond_;
88 BasicBlockOperand trueDest_, falseDest_;
89};
90
91} // namespace mini_llvm::mir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition BasicBlockOperand.h:9
Definition BasicBlock.h:24
void accept(InstructionVisitor &visitor) const override
Definition CondBr.h:82
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition CondBr.h:62
void accept(InstructionVisitor &visitor) override
Definition CondBr.h:78
auto & trueDest(this Self &&self)
Definition CondBr.h:37
void setCond(Condition cond)
Definition CondBr.h:32
std::string format() const override
Definition CondBr.h:70
std::unordered_set< const RegisterOperand * > regOps() const override
Definition CondBr.h:50
std::unordered_set< const BasicBlockOperand * > blockOps() const override
Definition CondBr.h:46
std::unordered_set< const RegisterOperand * > srcs() const override
Definition CondBr.h:58
std::unordered_set< const MemoryOperand * > memOps() const override
Definition CondBr.h:66
CondBr(Condition cond, BasicBlock *trueDest, BasicBlock *falseDest)
Definition CondBr.h:25
std::unordered_set< const RegisterOperand * > dsts() const override
Definition CondBr.h:54
auto & falseDest(this Self &&self)
Definition CondBr.h:42
Condition cond() const
Definition CondBr.h:28
std::unique_ptr< Instruction > clone() const override
Definition CondBr.h:74
Definition InstructionVisitor.h:70
virtual void visitCondBr(CondBr &I)
Definition InstructionVisitor.h:93
Definition Terminator.h:13
Definition BasicBlock.h:22
constexpr const char * specifier(Condition cond)
Definition Condition.h:15
Condition
Definition Condition.h:9