mini-llvm 0.1.0
Loading...
Searching...
No Matches
RISCVRet.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
16
17namespace mini_llvm::mir {
18
19class MINI_LLVM_EXPORT RISCVRet final : public Terminator {
20public:
22 : numIntegerResults_(numIntegerResults), numFloatingResults_(numFloatingResults) {}
23
24 int numIntegerResults() const {
25 return numIntegerResults_;
26 }
27
29 numIntegerResults_ = numIntegerResults;
30 }
31
32 int numFloatingResults() const {
33 return numFloatingResults_;
34 }
35
37 numFloatingResults_ = numFloatingResults;
38 }
39
40 std::unordered_set<const BasicBlockOperand *> blockOps() const override {
41 return {};
42 }
43
44 std::unordered_set<const RegisterOperand *> regOps() const override {
45 return {};
46 }
47
48 std::unordered_set<const RegisterOperand *> dsts() const override {
49 return {};
50 }
51
52 std::unordered_set<const RegisterOperand *> srcs() const override {
53 return {};
54 }
55
56 std::unordered_set<PhysicalRegister *> implicitDsts() const override {
57 return {};
58 }
59
60 std::unordered_set<PhysicalRegister *> implicitSrcs() const override;
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 void accept(InstructionVisitor &visitor) override {
71 static_cast<RISCVInstructionVisitor &>(visitor).visitRISCVRet(*this);
72 }
73
74 void accept(InstructionVisitor &visitor) const override {
75 static_cast<RISCVInstructionVisitor &>(visitor).visitRISCVRet(*this);
76 }
77
78 std::string format() const override;
79
80 std::unique_ptr<Instruction> clone() const override {
81 return std::make_unique<RISCVRet>(numIntegerResults(), numFloatingResults());
82 }
83
84private:
85 int numIntegerResults_, numFloatingResults_;
86};
87
88} // namespace mini_llvm::mir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition InstructionVisitor.h:70
Definition RISCVInstructionVisitor.h:17
int numFloatingResults() const
Definition RISCVRet.h:32
std::unordered_set< const BasicBlockOperand * > blockOps() const override
Definition RISCVRet.h:40
std::string format() const override
void accept(InstructionVisitor &visitor) override
Definition RISCVRet.h:70
void setNumFloatingResults(int numFloatingResults)
Definition RISCVRet.h:36
std::unordered_set< PhysicalRegister * > implicitDsts() const override
Definition RISCVRet.h:56
int numIntegerResults() const
Definition RISCVRet.h:24
RISCVRet(int numIntegerResults, int numFloatingResults)
Definition RISCVRet.h:21
std::unordered_set< const MemoryOperand * > memOps() const override
Definition RISCVRet.h:66
std::unordered_set< const RegisterOperand * > regOps() const override
Definition RISCVRet.h:44
std::unordered_set< const RegisterOperand * > dsts() const override
Definition RISCVRet.h:48
std::unordered_set< const ImmediateOperand * > immOps() const override
Definition RISCVRet.h:62
std::unordered_set< const RegisterOperand * > srcs() const override
Definition RISCVRet.h:52
void accept(InstructionVisitor &visitor) const override
Definition RISCVRet.h:74
void setNumIntegerResults(int numIntegerResults)
Definition RISCVRet.h:28
std::unordered_set< PhysicalRegister * > implicitSrcs() const override
std::unique_ptr< Instruction > clone() const override
Definition RISCVRet.h:80
Definition Terminator.h:13
Definition BasicBlock.h:22