mini-llvm
0.1.0
Toggle main menu visibility
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
10
#include "
mini-llvm/ir/BasicBlock.h
"
11
#include "
mini-llvm/ir/Constant/VoidValue.h
"
12
#include "
mini-llvm/ir/Instruction/Terminator.h
"
13
#include "
mini-llvm/ir/InstructionVisitor.h
"
14
#include "
mini-llvm/ir/Type.h
"
15
#include "
mini-llvm/ir/Type/Void.h
"
16
#include "
mini-llvm/ir/Use.h
"
17
#include "
mini-llvm/ir/Value.h
"
18
#include "
mini-llvm/utils/Compiler.h
"
19
20
namespace
mini_llvm::ir
{
21
22
class
MINI_LLVM_EXPORT
Ret
final :
public
Terminator
{
23
public
:
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
54
private
:
55
Use<Value>
value_;
56
};
57
58
}
// namespace mini_llvm::ir
Compiler.h
MINI_LLVM_EXPORT
#define MINI_LLVM_EXPORT
Definition
Compiler.h:17
Type.h
Use.h
Value.h
VoidValue.h
Void.h
mini_llvm::ir::InstructionVisitor
Definition
InstructionVisitor.h:58
mini_llvm::ir::InstructionVisitor::visitRet
virtual void visitRet(Ret &I)
Definition
InstructionVisitor.h:99
mini_llvm::ir::Ret::type
std::unique_ptr< Type > type() const override
Definition
Ret.h:47
mini_llvm::ir::Ret::successors
std::unordered_set< BasicBlock * > successors() const override
Definition
Ret.h:31
mini_llvm::ir::Ret::format
std::string format() const override
mini_llvm::ir::Ret::clone
std::unique_ptr< Value > clone() const override
mini_llvm::ir::Ret::accept
void accept(InstructionVisitor &visitor) const override
Definition
Ret.h:43
mini_llvm::ir::Ret::Ret
Ret(std::shared_ptr< Value > value=std::make_shared< VoidValue >())
Definition
Ret.h:24
mini_llvm::ir::Ret::value
auto & value(this Self &&self)
Definition
Ret.h:27
mini_llvm::ir::Ret::accept
void accept(InstructionVisitor &visitor) override
Definition
Ret.h:39
mini_llvm::ir::Ret::operands
std::unordered_set< const UseBase * > operands() const override
Definition
Ret.h:35
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
Ret.h
Generated by
1.17.0