mini-llvm 0.1.0
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
15
16namespace mini_llvm::mir {
17
19public:
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
67private:
69};
70
71} // 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 Br.h:63
std::unordered_set< const RegisterOperand * > dsts() const override
Definition Br.h:35
std::unordered_set< const RegisterOperand * > srcs() const override
Definition Br.h:39
Br(BasicBlock *dest)
Definition Br.h:20
auto & dest(this Self &&self)
Definition Br.h:23
std::unordered_set< const RegisterOperand * > regOps() const override
Definition Br.h:31
void accept(InstructionVisitor &visitor) override
Definition Br.h:59
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition Br.h:43
std::unordered_set< const BasicBlockOperand * > blockOps() const override
Definition Br.h:27
std::string format() const override
Definition Br.h:51
std::unordered_set< const MemoryOperand * > memOps() const override
Definition Br.h:47
std::unique_ptr< Instruction > clone() const override
Definition Br.h:55
Definition InstructionVisitor.h:70
virtual void visitBr(Br &I)
Definition InstructionVisitor.h:86
Definition Terminator.h:13
Definition BasicBlock.h:22