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 <memory>
6#include <string>
7#include <unordered_set>
8#include <utility>
9
13#include "mini-llvm/ir/Type.h"
15#include "mini-llvm/ir/Use.h"
16#include "mini-llvm/ir/Value.h"
18
19namespace mini_llvm::ir {
20
21class MINI_LLVM_EXPORT Br final : public Terminator {
22public:
23 explicit Br(std::weak_ptr<BasicBlock> dest) : dest_(this, std::move(dest)) {}
24
25 template <typename Self>
26 auto &dest(this Self &&self) {
27 return self.dest_;
28 }
29
30 std::unordered_set<BasicBlock *> successors() const override {
31 return {&*dest()};
32 }
33
34 std::unordered_set<const UseBase *> operands() const override {
35 return {&dest()};
36 }
37
38 void accept(InstructionVisitor &visitor) override {
39 visitor.visitBr(*this);
40 }
41
42 void accept(InstructionVisitor &visitor) const override {
43 visitor.visitBr(*this);
44 }
45
46 std::unique_ptr<Type> type() const override {
47 return std::make_unique<Void>();
48 }
49
50 std::string format() const override;
51 std::unique_ptr<Value> clone() const override;
52
53private:
54 Use<BasicBlock> dest_;
55};
56
57} // namespace mini_llvm::ir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
std::unique_ptr< Type > type() const override
Definition Br.h:46
std::string format() const override
std::unordered_set< const UseBase * > operands() const override
Definition Br.h:34
void accept(InstructionVisitor &visitor) override
Definition Br.h:38
Br(std::weak_ptr< BasicBlock > dest)
Definition Br.h:23
std::unique_ptr< Value > clone() const override
void accept(InstructionVisitor &visitor) const override
Definition Br.h:42
std::unordered_set< BasicBlock * > successors() const override
Definition Br.h:30
auto & dest(this Self &&self)
Definition Br.h:26
Definition InstructionVisitor.h:58
virtual void visitBr(Br &I)
Definition InstructionVisitor.h:75
Definition Terminator.h:13
Definition Use.h:44
Definition Argument.h:13