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